From 036b63d8fc5a8c6e1ff150737226122c174c39cb Mon Sep 17 00:00:00 2001 From: Paul Mangan Date: Thu, 19 Apr 2001 12:21:46 +0000 Subject: [PATCH 1/1] Imported version 1.0 --- ABOUT-NLS | 226 + AUTHORS | 0 COPYING | 307 + ChangeLog | 3186 +++++++++++ ChangeLog.jp | 3145 +++++++++++ INSTALL | 111 + INSTALL.jp | 111 + Makefile.am | 18 + Makefile.in | 420 ++ NEWS | 0 README | 153 + README.jp | 189 + TODO | 66 + TODO.jp | 67 + ac/Makefile.am | 5 + ac/Makefile.in | 229 + ac/aclocal-include.m4 | 12 + ac/gpgme.m4 | 170 + acconfig.h | 23 + aclocal.m4 | 2090 +++++++ autogen.sh | 7 + config.guess | 1087 ++++ config.h.in | 242 + config.sub | 1215 ++++ configure | 6893 +++++++++++++++++++++++ configure.in | 185 + doc/manual/Makefile.am | 1 + doc/manual/Makefile.in | 330 ++ doc/manual/ja/Makefile.am | 26 + doc/manual/ja/Makefile.in | 255 + doc/manual/ja/sylpheed-1.html | 113 + doc/manual/ja/sylpheed-10.html | 63 + doc/manual/ja/sylpheed-11.html | 55 + doc/manual/ja/sylpheed-12.html | 67 + doc/manual/ja/sylpheed-13.html | 203 + doc/manual/ja/sylpheed-14.html | 208 + doc/manual/ja/sylpheed-15.html | 63 + doc/manual/ja/sylpheed-16.html | 155 + doc/manual/ja/sylpheed-17.html | 444 ++ doc/manual/ja/sylpheed-2.html | 321 ++ doc/manual/ja/sylpheed-3.html | 56 + doc/manual/ja/sylpheed-4.html | 59 + doc/manual/ja/sylpheed-5.html | 151 + doc/manual/ja/sylpheed-6.html | 195 + doc/manual/ja/sylpheed-7.html | 54 + doc/manual/ja/sylpheed-8.html | 104 + doc/manual/ja/sylpheed-9.html | 100 + doc/manual/ja/sylpheed.html | 180 + doc/manual/ja/sylpheed.sgml | 2132 +++++++ install-sh | 251 + intl/ChangeLog | 1086 ++++ intl/Makefile.in | 214 + intl/VERSION | 1 + intl/bindtextdom.c | 203 + intl/cat-compat.c | 262 + intl/dcgettext.c | 655 +++ intl/dgettext.c | 59 + intl/explodename.c | 198 + intl/finddomain.c | 216 + intl/gettext.c | 70 + intl/gettext.h | 105 + intl/gettextP.h | 89 + intl/hash-string.h | 59 + intl/intl-compat.c | 76 + intl/l10nflist.c | 411 ++ intl/libgettext.h | 182 + intl/linux-msg.sed | 100 + intl/loadinfo.h | 78 + intl/loadmsgcat.c | 220 + intl/localealias.c | 438 ++ intl/po2tbl.sed.in | 102 + intl/textdomain.c | 108 + intl/xopen-msg.sed | 104 + libkcc/Makefile.am | 54 + libkcc/Makefile.in | 399 ++ libkcc/Makefile.std | 54 + libkcc/README | 461 ++ libkcc/ROUTINE | 24 + libkcc/buffer.c | 71 + libkcc/check.c | 36 + libkcc/compare.c | 14 + libkcc/dec.c | 132 + libkcc/euc.c | 47 + libkcc/filter.c | 145 + libkcc/getstr.c | 22 + libkcc/guess.c | 194 + libkcc/jis.c | 130 + libkcc/kcc.h | 22 + libkcc/libkcc.h | 94 + libkcc/out.c | 188 + libkcc/outchar.c | 10 + libkcc/outsjis.c | 19 + libkcc/setfunc.c | 63 + libkcc/showcode.c | 71 + libkcc/sjis.c | 50 + libkcc/test.c | 44 + libkcc/test_check.c | 18 + libkcc/test_file | 8 + libkcc/test_file.sjis | 8 + libkcc/test_filter.c | 25 + libkcc/testfile | 2 + ltconfig | 3017 ++++++++++ ltmain.sh | 3975 +++++++++++++ missing | 190 + mkinstalldirs | 40 + po/ChangeLog | 80 + po/Makefile.in.in | 248 + po/POTFILES.in | 60 + po/cat-id-tbl.c | 936 +++ po/cs.gmo | Bin 0 -> 47210 bytes po/cs.po | 3813 +++++++++++++ po/de.gmo | Bin 0 -> 62893 bytes po/de.po | 3677 ++++++++++++ po/el.gmo | Bin 0 -> 46832 bytes po/el.po | 3657 ++++++++++++ po/es.gmo | Bin 0 -> 62110 bytes po/es.po | 3842 +++++++++++++ po/fr.gmo | Bin 0 -> 48945 bytes po/fr.po | 3807 +++++++++++++ po/it.gmo | Bin 0 -> 58936 bytes po/it.po | 4547 +++++++++++++++ po/ja.gmo | Bin 0 -> 62521 bytes po/ja.po | 3706 ++++++++++++ po/ko.gmo | Bin 0 -> 54314 bytes po/ko.po | 3643 ++++++++++++ po/nl.gmo | Bin 0 -> 42307 bytes po/nl.po | 3642 ++++++++++++ po/pt_BR.gmo | Bin 0 -> 51165 bytes po/pt_BR.po | 3808 +++++++++++++ po/ru.gmo | Bin 0 -> 58404 bytes po/ru.po | 3670 ++++++++++++ po/stamp-cat-id | 1 + po/sylpheed.pot | 3621 ++++++++++++ po/zh_CN.GB2312.gmo | Bin 0 -> 42290 bytes po/zh_CN.GB2312.po | 3734 ++++++++++++ po/zh_TW.Big5.gmo | Bin 0 -> 47842 bytes po/zh_TW.Big5.po | 3730 ++++++++++++ src/Makefile.am | 133 + src/Makefile.in | 423 ++ src/about.c | 247 + src/about.h | 25 + src/account.c | 654 +++ src/account.h | 51 + src/addr_compl.c | 962 ++++ src/addr_compl.h | 53 + src/addressbook.c | 2036 +++++++ src/addressbook.h | 117 + src/alertpanel.c | 260 + src/alertpanel.h | 50 + src/automaton.c | 77 + src/automaton.h | 54 + src/base64.c | 98 + src/base64.h | 7 + src/codeconv.c | 1160 ++++ src/codeconv.h | 155 + src/compose.c | 4014 +++++++++++++ src/compose.h | 183 + src/defs.h | 94 + src/esmtp.c | 249 + src/esmtp.h | 41 + src/filesel.c | 128 + src/filesel.h | 27 + src/filter.c | 248 + src/filter.h | 81 + src/folder.c | 975 ++++ src/folder.h | 274 + src/foldersel.c | 290 + src/foldersel.h | 30 + src/folderview.c | 1655 ++++++ src/folderview.h | 81 + src/gtksctree.c | 538 ++ src/gtksctree.h | 64 + src/gtkshruler.c | 210 + src/gtkshruler.h | 63 + src/gtkutils.c | 292 + src/gtkutils.h | 94 + src/headerview.c | 342 ++ src/headerview.h | 55 + src/headerwindow.c | 176 + src/headerwindow.h | 42 + src/html.c | 683 +++ src/html.h | 70 + src/imageview.c | 158 + src/imageview.h | 46 + src/imap.c | 1239 ++++ src/imap.h | 100 + src/import.c | 219 + src/import.h | 27 + src/inc.c | 789 +++ src/inc.h | 103 + src/inputdialog.c | 211 + src/inputdialog.h | 32 + src/intl.h | 22 + src/logwindow.c | 159 + src/logwindow.h | 53 + src/main.c | 423 ++ src/main.h | 31 + src/mainwindow.c | 2071 +++++++ src/mainwindow.h | 137 + src/manage_window.c | 58 + src/manage_window.h | 36 + src/manual.c | 55 + src/manual.h | 31 + src/mbox.c | 426 ++ src/mbox.h | 47 + src/md5.h | 42 + src/md5c.c | 334 ++ src/md5global.h | 41 + src/md5ify.c | 42 + src/md5ify.h | 6 + src/menu.c | 89 + src/menu.h | 53 + src/messageview.c | 321 ++ src/messageview.h | 70 + src/mh.c | 999 ++++ src/mh.h | 72 + src/mimeview.c | 858 +++ src/mimeview.h | 72 + src/news.c | 484 ++ src/news.h | 58 + src/nntp.c | 261 + src/nntp.h | 49 + src/passphrase.c | 243 + src/passphrase.h | 27 + src/pixmaps/clip.xpm | 17 + src/pixmaps/deleted.xpm | 15 + src/pixmaps/dir-close.xpm | 47 + src/pixmaps/dir-open.xpm | 53 + src/pixmaps/folder.xpm | 80 + src/pixmaps/forwarded.xpm | 23 + src/pixmaps/group.xpm | 47 + src/pixmaps/inbox.xpm | 25 + src/pixmaps/linewrap.xpm | 29 + src/pixmaps/mark.xpm | 15 + src/pixmaps/new.xpm | 76 + src/pixmaps/outbox.xpm | 27 + src/pixmaps/regular.xpm | 93 + src/pixmaps/replied.xpm | 24 + src/pixmaps/stock_close.xpm | 29 + src/pixmaps/stock_down_arrow.xpm | 100 + src/pixmaps/stock_exec.xpm | 107 + src/pixmaps/stock_mail.xpm | 143 + src/pixmaps/stock_mail_attach.xpm | 134 + src/pixmaps/stock_mail_compose.xpm | 144 + src/pixmaps/stock_mail_forward.xpm | 153 + src/pixmaps/stock_mail_receive.xpm | 175 + src/pixmaps/stock_mail_receive_all.xpm | 181 + src/pixmaps/stock_mail_reply.xpm | 154 + src/pixmaps/stock_mail_reply_to_all.xpm | 126 + src/pixmaps/stock_mail_send.xpm | 162 + src/pixmaps/stock_paste.xpm | 132 + src/pixmaps/stock_preferences.xpm | 80 + src/pixmaps/stock_properties.xpm | 140 + src/pixmaps/stock_search.xpm | 155 + src/pixmaps/stock_trash.xpm | 112 + src/pixmaps/stock_up_arrow.xpm | 100 + src/pixmaps/sylpheed-logo.xpm | 53 + src/pixmaps/tb_address_book.xpm | 56 + src/pixmaps/trash.xpm | 32 + src/pixmaps/unread.xpm | 59 + src/pop.c | 446 ++ src/pop.h | 94 + src/prefs.c | 770 +++ src/prefs.h | 147 + src/prefs_account.c | 1164 ++++ src/prefs_account.h | 107 + src/prefs_common.c | 2198 ++++++++ src/prefs_common.h | 177 + src/prefs_filter.c | 814 +++ src/prefs_filter.h | 27 + src/procheader.c | 546 ++ src/procheader.h | 70 + src/procmime.c | 857 +++ src/procmime.h | 142 + src/procmsg.c | 808 +++ src/procmsg.h | 169 + src/progressdialog.c | 111 + src/progressdialog.h | 44 + src/recv.c | 188 + src/recv.h | 30 + src/rfc2015.c | 1155 ++++ src/rfc2015.h | 37 + src/rfc822.c | 424 ++ src/rfc822.h | 3 + src/select-keys.c | 375 ++ src/select-keys.h | 29 + src/send.c | 256 + src/send.h | 31 + src/session.c | 42 + src/session.h | 55 + src/setup.c | 95 + src/setup.h | 29 + src/smtp.c | 158 + src/smtp.h | 45 + src/socket.c | 439 ++ src/socket.h | 80 + src/sourcewindow.c | 174 + src/sourcewindow.h | 45 + src/statusbar.c | 124 + src/statusbar.h | 38 + src/summary_search.c | 381 ++ src/summary_search.h | 31 + src/summaryview.c | 2935 ++++++++++ src/summaryview.h | 190 + src/textview.c | 1200 ++++ src/textview.h | 77 + src/unmime.c | 995 ++++ src/unmime.h | 23 + src/utils.c | 1833 ++++++ src/utils.h | 254 + src/uuencode.c | 101 + src/uuencode.h | 24 + src/xml.c | 511 ++ src/xml.h | 94 + stamp-h.in | 1 + sylpheed.spec.in | 264 + 316 files changed, 147338 insertions(+) create mode 100644 ABOUT-NLS create mode 100644 AUTHORS create mode 100644 COPYING create mode 100644 ChangeLog create mode 100644 ChangeLog.jp create mode 100644 INSTALL create mode 100644 INSTALL.jp create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 NEWS create mode 100644 README create mode 100644 README.jp create mode 100644 TODO create mode 100644 TODO.jp create mode 100644 ac/Makefile.am create mode 100644 ac/Makefile.in create mode 100644 ac/aclocal-include.m4 create mode 100644 ac/gpgme.m4 create mode 100644 acconfig.h create mode 100644 aclocal.m4 create mode 100644 autogen.sh create mode 100644 config.guess create mode 100644 config.h.in create mode 100644 config.sub create mode 100644 configure create mode 100644 configure.in create mode 100644 doc/manual/Makefile.am create mode 100644 doc/manual/Makefile.in create mode 100644 doc/manual/ja/Makefile.am create mode 100644 doc/manual/ja/Makefile.in create mode 100644 doc/manual/ja/sylpheed-1.html create mode 100644 doc/manual/ja/sylpheed-10.html create mode 100644 doc/manual/ja/sylpheed-11.html create mode 100644 doc/manual/ja/sylpheed-12.html create mode 100644 doc/manual/ja/sylpheed-13.html create mode 100644 doc/manual/ja/sylpheed-14.html create mode 100644 doc/manual/ja/sylpheed-15.html create mode 100644 doc/manual/ja/sylpheed-16.html create mode 100644 doc/manual/ja/sylpheed-17.html create mode 100644 doc/manual/ja/sylpheed-2.html create mode 100644 doc/manual/ja/sylpheed-3.html create mode 100644 doc/manual/ja/sylpheed-4.html create mode 100644 doc/manual/ja/sylpheed-5.html create mode 100644 doc/manual/ja/sylpheed-6.html create mode 100644 doc/manual/ja/sylpheed-7.html create mode 100644 doc/manual/ja/sylpheed-8.html create mode 100644 doc/manual/ja/sylpheed-9.html create mode 100644 doc/manual/ja/sylpheed.html create mode 100644 doc/manual/ja/sylpheed.sgml create mode 100644 install-sh create mode 100644 intl/ChangeLog create mode 100644 intl/Makefile.in create mode 100644 intl/VERSION create mode 100644 intl/bindtextdom.c create mode 100644 intl/cat-compat.c create mode 100644 intl/dcgettext.c create mode 100644 intl/dgettext.c create mode 100644 intl/explodename.c create mode 100644 intl/finddomain.c create mode 100644 intl/gettext.c create mode 100644 intl/gettext.h create mode 100644 intl/gettextP.h create mode 100644 intl/hash-string.h create mode 100644 intl/intl-compat.c create mode 100644 intl/l10nflist.c create mode 100644 intl/libgettext.h create mode 100644 intl/linux-msg.sed create mode 100644 intl/loadinfo.h create mode 100644 intl/loadmsgcat.c create mode 100644 intl/localealias.c create mode 100644 intl/po2tbl.sed.in create mode 100644 intl/textdomain.c create mode 100644 intl/xopen-msg.sed create mode 100644 libkcc/Makefile.am create mode 100644 libkcc/Makefile.in create mode 100644 libkcc/Makefile.std create mode 100644 libkcc/README create mode 100644 libkcc/ROUTINE create mode 100644 libkcc/buffer.c create mode 100644 libkcc/check.c create mode 100644 libkcc/compare.c create mode 100644 libkcc/dec.c create mode 100644 libkcc/euc.c create mode 100644 libkcc/filter.c create mode 100644 libkcc/getstr.c create mode 100644 libkcc/guess.c create mode 100644 libkcc/jis.c create mode 100644 libkcc/kcc.h create mode 100644 libkcc/libkcc.h create mode 100644 libkcc/out.c create mode 100644 libkcc/outchar.c create mode 100644 libkcc/outsjis.c create mode 100644 libkcc/setfunc.c create mode 100644 libkcc/showcode.c create mode 100644 libkcc/sjis.c create mode 100644 libkcc/test.c create mode 100644 libkcc/test_check.c create mode 100644 libkcc/test_file create mode 100644 libkcc/test_file.sjis create mode 100644 libkcc/test_filter.c create mode 100644 libkcc/testfile create mode 100644 ltconfig create mode 100644 ltmain.sh create mode 100644 missing create mode 100644 mkinstalldirs create mode 100644 po/ChangeLog create mode 100644 po/Makefile.in.in create mode 100644 po/POTFILES.in create mode 100644 po/cat-id-tbl.c create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/el.gmo create mode 100644 po/el.po create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/ko.gmo create mode 100644 po/ko.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/stamp-cat-id create mode 100644 po/sylpheed.pot create mode 100644 po/zh_CN.GB2312.gmo create mode 100644 po/zh_CN.GB2312.po create mode 100644 po/zh_TW.Big5.gmo create mode 100644 po/zh_TW.Big5.po create mode 100644 src/Makefile.am create mode 100644 src/Makefile.in create mode 100644 src/about.c create mode 100644 src/about.h create mode 100644 src/account.c create mode 100644 src/account.h create mode 100644 src/addr_compl.c create mode 100644 src/addr_compl.h create mode 100644 src/addressbook.c create mode 100644 src/addressbook.h create mode 100644 src/alertpanel.c create mode 100644 src/alertpanel.h create mode 100644 src/automaton.c create mode 100644 src/automaton.h create mode 100644 src/base64.c create mode 100644 src/base64.h create mode 100644 src/codeconv.c create mode 100644 src/codeconv.h create mode 100644 src/compose.c create mode 100644 src/compose.h create mode 100644 src/defs.h create mode 100644 src/esmtp.c create mode 100644 src/esmtp.h create mode 100644 src/filesel.c create mode 100644 src/filesel.h create mode 100644 src/filter.c create mode 100644 src/filter.h create mode 100644 src/folder.c create mode 100644 src/folder.h create mode 100644 src/foldersel.c create mode 100644 src/foldersel.h create mode 100644 src/folderview.c create mode 100644 src/folderview.h create mode 100644 src/gtksctree.c create mode 100644 src/gtksctree.h create mode 100644 src/gtkshruler.c create mode 100644 src/gtkshruler.h create mode 100644 src/gtkutils.c create mode 100644 src/gtkutils.h create mode 100644 src/headerview.c create mode 100644 src/headerview.h create mode 100644 src/headerwindow.c create mode 100644 src/headerwindow.h create mode 100644 src/html.c create mode 100644 src/html.h create mode 100644 src/imageview.c create mode 100644 src/imageview.h create mode 100644 src/imap.c create mode 100644 src/imap.h create mode 100644 src/import.c create mode 100644 src/import.h create mode 100644 src/inc.c create mode 100644 src/inc.h create mode 100644 src/inputdialog.c create mode 100644 src/inputdialog.h create mode 100644 src/intl.h create mode 100644 src/logwindow.c create mode 100644 src/logwindow.h create mode 100644 src/main.c create mode 100644 src/main.h create mode 100644 src/mainwindow.c create mode 100644 src/mainwindow.h create mode 100644 src/manage_window.c create mode 100644 src/manage_window.h create mode 100644 src/manual.c create mode 100644 src/manual.h create mode 100644 src/mbox.c create mode 100644 src/mbox.h create mode 100644 src/md5.h create mode 100644 src/md5c.c create mode 100644 src/md5global.h create mode 100644 src/md5ify.c create mode 100644 src/md5ify.h create mode 100644 src/menu.c create mode 100644 src/menu.h create mode 100644 src/messageview.c create mode 100644 src/messageview.h create mode 100644 src/mh.c create mode 100644 src/mh.h create mode 100644 src/mimeview.c create mode 100644 src/mimeview.h create mode 100644 src/news.c create mode 100644 src/news.h create mode 100644 src/nntp.c create mode 100644 src/nntp.h create mode 100644 src/passphrase.c create mode 100644 src/passphrase.h create mode 100644 src/pixmaps/clip.xpm create mode 100644 src/pixmaps/deleted.xpm create mode 100644 src/pixmaps/dir-close.xpm create mode 100644 src/pixmaps/dir-open.xpm create mode 100644 src/pixmaps/folder.xpm create mode 100644 src/pixmaps/forwarded.xpm create mode 100644 src/pixmaps/group.xpm create mode 100644 src/pixmaps/inbox.xpm create mode 100644 src/pixmaps/linewrap.xpm create mode 100644 src/pixmaps/mark.xpm create mode 100644 src/pixmaps/new.xpm create mode 100644 src/pixmaps/outbox.xpm create mode 100644 src/pixmaps/regular.xpm create mode 100644 src/pixmaps/replied.xpm create mode 100644 src/pixmaps/stock_close.xpm create mode 100644 src/pixmaps/stock_down_arrow.xpm create mode 100644 src/pixmaps/stock_exec.xpm create mode 100644 src/pixmaps/stock_mail.xpm create mode 100644 src/pixmaps/stock_mail_attach.xpm create mode 100644 src/pixmaps/stock_mail_compose.xpm create mode 100644 src/pixmaps/stock_mail_forward.xpm create mode 100644 src/pixmaps/stock_mail_receive.xpm create mode 100644 src/pixmaps/stock_mail_receive_all.xpm create mode 100644 src/pixmaps/stock_mail_reply.xpm create mode 100644 src/pixmaps/stock_mail_reply_to_all.xpm create mode 100644 src/pixmaps/stock_mail_send.xpm create mode 100644 src/pixmaps/stock_paste.xpm create mode 100644 src/pixmaps/stock_preferences.xpm create mode 100644 src/pixmaps/stock_properties.xpm create mode 100644 src/pixmaps/stock_search.xpm create mode 100644 src/pixmaps/stock_trash.xpm create mode 100644 src/pixmaps/stock_up_arrow.xpm create mode 100644 src/pixmaps/sylpheed-logo.xpm create mode 100644 src/pixmaps/tb_address_book.xpm create mode 100644 src/pixmaps/trash.xpm create mode 100644 src/pixmaps/unread.xpm create mode 100644 src/pop.c create mode 100644 src/pop.h create mode 100644 src/prefs.c create mode 100644 src/prefs.h create mode 100644 src/prefs_account.c create mode 100644 src/prefs_account.h create mode 100644 src/prefs_common.c create mode 100644 src/prefs_common.h create mode 100644 src/prefs_filter.c create mode 100644 src/prefs_filter.h create mode 100644 src/procheader.c create mode 100644 src/procheader.h create mode 100644 src/procmime.c create mode 100644 src/procmime.h create mode 100644 src/procmsg.c create mode 100644 src/procmsg.h create mode 100644 src/progressdialog.c create mode 100644 src/progressdialog.h create mode 100644 src/recv.c create mode 100644 src/recv.h create mode 100644 src/rfc2015.c create mode 100644 src/rfc2015.h create mode 100644 src/rfc822.c create mode 100644 src/rfc822.h create mode 100644 src/select-keys.c create mode 100644 src/select-keys.h create mode 100644 src/send.c create mode 100644 src/send.h create mode 100644 src/session.c create mode 100644 src/session.h create mode 100644 src/setup.c create mode 100644 src/setup.h create mode 100644 src/smtp.c create mode 100644 src/smtp.h create mode 100644 src/socket.c create mode 100644 src/socket.h create mode 100644 src/sourcewindow.c create mode 100644 src/sourcewindow.h create mode 100644 src/statusbar.c create mode 100644 src/statusbar.h create mode 100644 src/summary_search.c create mode 100644 src/summary_search.h create mode 100644 src/summaryview.c create mode 100644 src/summaryview.h create mode 100644 src/textview.c create mode 100644 src/textview.h create mode 100644 src/unmime.c create mode 100644 src/unmime.h create mode 100644 src/utils.c create mode 100644 src/utils.h create mode 100644 src/uuencode.c create mode 100644 src/uuencode.h create mode 100644 src/xml.c create mode 100644 src/xml.h create mode 100644 stamp-h.in create mode 100644 sylpheed.spec.in diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 000000000..28d38c76f --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,226 @@ +Notes 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. + +One advise in advance +===================== + + 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 or message inheritance) 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 provides +usable `catgets' (if using this is selected by the installer) or +`gettext' functions. If neither is available, 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 --with-catgets + ./configure --disable-nls + +will respectively bypass any pre-existing `catgets' or `gettext' to use +the internationalizing routines provided within this package, enable +the use of the `catgets' functions (if found on the locale system), 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. + + By default the configuration process will not test for the `catgets' +function and therefore they will not be used. The reasons are already +given above: the emulation on top of `catgets' cannot provide all the +extensions provided by the GNU `gettext' library. If you nevertheless +want to use the `catgets' functions use + + ./configure --with-catgets + +to enable the test for `catgets' (this causes no harm if `catgets' is +not available on your system). If you really select this option we +would like to hear about the reasons because we cannot think of any +good one ourself. + + 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 +ISO 639 `LL' two-letter code prior to using the programs in the +package. For example, let's suppose that you speak German. At the +shell prompt, merely execute `setenv LANG de' (in `csh'), +`export LANG; LANG=de' (in `sh') or `export LANG=de' (in `bash'). This +can be done from your `.login' or `.profile' file, once and for all. + + An operating system might already offer message localization for +many of its programs, while other programs have been installed locally +with the full capabilities of GNU `gettext'. Just using `gettext' +extended syntax for `LANG' would break proper localization of already +available operating system programs. In this case, users should set +both `LANGUAGE' and `LANG' variables in their environment, as programs +using GNU `gettext' give preference to `LANGUAGE'. For example, some +Swedish users would rather read translations in German than English for +when Swedish is not available. This is easily accomplished by setting +`LANGUAGE' to `sv:de' while leaving `LANG' to `sv'. + +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, courtesy of Linux +International. You may reach your translation team at the address +`LL@li.org', replacing LL by the two-letter ISO 639 code for your +language. Language codes are *not* the same as the country codes given +in ISO 3166. The following translation teams exist, as of December +1997: + + Chinese `zh', Czech `cs', Danish `da', Dutch `nl', English `en', + Esperanto `eo', Finnish `fi', French `fr', German `de', Hungarian + `hu', Irish `ga', Italian `it', Indonesian `id', Japanese `ja', + Korean `ko', Latin `la', Norwegian `no', Persian `fa', Polish + `pl', Portuguese `pt', Russian `ru', Slovenian `sl', Spanish `es', + Swedish `sv', and Turkish `tr'. + +For example, you may reach the Chinese translation team by writing to +`zh@li.org'. + + 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 December +1997. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination. + + Ready PO files cs da de en es fi fr it ja ko nl no pl pt ru sl sv + .----------------------------------------------------. + bash | [] [] [] | 3 + bison | [] [] [] | 3 + clisp | [] [] [] [] | 4 + cpio | [] [] [] [] [] [] | 6 + diffutils | [] [] [] [] [] | 5 + enscript | [] [] [] [] [] [] | 6 + fileutils | [] [] [] [] [] [] [] [] [] [] | 10 + findutils | [] [] [] [] [] [] [] [] [] | 9 + flex | [] [] [] [] | 4 + gcal | [] [] [] [] [] | 5 + gettext | [] [] [] [] [] [] [] [] [] [] [] | 12 + grep | [] [] [] [] [] [] [] [] [] [] | 10 + hello | [] [] [] [] [] [] [] [] [] [] [] | 11 + id-utils | [] [] [] | 3 + indent | [] [] [] [] [] | 5 + libc | [] [] [] [] [] [] [] | 7 + m4 | [] [] [] [] [] [] | 6 + make | [] [] [] [] [] [] | 6 + music | [] [] | 2 + ptx | [] [] [] [] [] [] [] [] | 8 + recode | [] [] [] [] [] [] [] [] [] | 9 + sh-utils | [] [] [] [] [] [] [] [] | 8 + sharutils | [] [] [] [] [] [] | 6 + tar | [] [] [] [] [] [] [] [] [] [] [] | 11 + texinfo | [] [] [] | 3 + textutils | [] [] [] [] [] [] [] [] [] | 9 + wdiff | [] [] [] [] [] [] [] [] | 8 + `----------------------------------------------------' + 17 languages cs da de en es fi fr it ja ko nl no pl pt ru sl sv + 27 packages 6 4 25 1 18 1 26 2 1 12 20 9 19 7 4 7 17 179 + + 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 December 1997 seems to be old, you may fetch a more recent copy +of this `ABOUT-NLS' file on most GNU archive sites. + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 000000000..e69de29bb diff --git a/COPYING b/COPYING new file mode 100644 index 000000000..8daa321ef --- /dev/null +++ b/COPYING @@ -0,0 +1,307 @@ +The code in this distribution is Copyright 1999,2000 by Hiroyuki Yamamoto. + +The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. +Portions of those are also copyrighted by Carl Harris, 1993 and 1995. +Copyright retained for the purpose of protecting free redistribution of +source. + +The MD5 support is copyright by RSA Data Security, Inc. See the header +comment of the md5.c module for license terms. + +Kcc is copyright by Yasuhiro Tonooka (tonooka@msi.co.jp), +and libkcc is copyright by takeshi@SoftAgency.co.jp. + + NO-VIRUS CLAUSE + +The intent of this license is to protect free redistribution and reuse of the +source of the licensed distribution, not to prejudice the authorship +rights of programmers of other code to control their original inventions. + +No portion of this license is to be interpreted as forbidding the reuse of +this code or its constituent parts, algorithms, or inventions in commercial +products. + +Nor shall such inclusion be construed to require the GPLing or disclosure of +any portions of said commercial products other than those falling under +the copyright of the licensed distribution. + +------------------------------------------------------------------------------- + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. +------------------------------------------------------------------------------- diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 000000000..ca74a3751 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3186 @@ +2001-04-19 + + * src/prefs_common.[ch]: reorganized the items of settings, + and added Message tab. + * src/main.c: parse_cmd_opt(): added command line option --version. + * src/mh.c: made it unset MSG_DELETED flag when moved/copied to + special folders. + * src/prefs_common.[ch] + src/headerview.[ch]: the header pane can be toggled now. + * src/prefs_common.[ch] + src/textview.c: page scroll step is now selectable between + one page and half page. + * src/mbox.[ch]: added export_mbox() that reads all messages + in a folder, and store them into one mbox file. + +2001-04-18 + + * src/prefs_filter.[ch]: separated filter setting code from + prefs_common.c, and made it a separate dialog. + +2001-04-17 + + * version 0.4.64 + + * src/automaton.[ch] + src/inc.c: fixed the bug that made Sylpheed crash when clicking + Cancel button while getting new mail (thanks to Sergey Vlasov). + * src/xml.c: xml_build_tree() + src/addressbook.c: fixed a bug that caused infinite loop if an + illegal XML file was given. + +2001-04-16 + + * src/summaryview.c + src/inc.c: applied the patch from Sergey Vlasov that fixes the + problem when the "Go to inbox after receiving new mail" option + was turned off (thanks!). + +2001-04-15 + + * src/xml.[ch]: modified so that it supports some characters which + must be escaped, and multiple-lined tag. + * src/folder.c + src/addressbook.c: modified so that it escapes some characters + like '<', '>', '&', ''', '"'. + +2001-04-10 + + * version 0.4.63 + + * src/folder.[ch] + src/mainwindow.c + src/mh.[ch] + src/procmsg.[ch] + src/summaryview.[ch]: applied the patch from Darko Koruga that + adds copy message operation for the MH folders (thanks!). + * src/imap.c: disabled slash to dot conversion. + * src/imageview.c: fixed a bug that displayed an old image when + loading of a image failed (thanks to Darko Koruga). + +2001-04-09 + + * src/procmsg.c: procmsg_read_cache(): added setvbuf() to speed up + cache reading (thanks to Sergey Vlasov). + * src/inc.c + src/summaryview.[ch] + prefs_common.[ch]: applied the patch that keeps the same folder + after receiving new mail (thanks to Sergey Vlasov). + * src/textview.c + src/utils.[ch]: moved get_quote_level() to utils.c. + +2001-04-08 + + * ac/Makefile.am: added. + * Makefile.am + configure.in: added ac directory. + +2001-04-07 + + * src/summaryview.c: summary_filter(): made it move messages + immediately if immediate_exec option is set. + * src/prefs_common.[ch] + src/textview.[ch] + src/gtkutils.[ch]: applied the message coloring patch from + Stephen Anthony with some modification (thanks!). + * src/gtksctree.c + src/mimeview.c: modified the behavior of MimeView (thanks to + HIRAMATSU). + +2001-04-06 + + * src/utils.c: copy_file() + src/mh.c: applied (and modified) the patch from Darko Koruga + that enables to move messages across file systems (thanks!). + * src/procheader.c + src/utils.[ch]: applied the patch from Jorge Van Hemelryck + that converts the date of messages to the local time (thanks!). + * src/utils.c: remote_tzoffset_sec(): fixed a bug that the signs + of one-letter timezone were reversed. + * src/folder.c: folder_item_add_msg(): put the assertion for the + add_msg() method (thanks to TAKANO). + +2001-04-05 + + * src/procmime.c: procmime_decode_content(): fixed a bug that + corrupted quoted-printable encoded messages when they include + `=00' (thanks to Masahiro Tomita). + * src/gtksctree.c + src/mimeview.c + src/summaryview.c: modified the DnD behavior of MIME view + (thanks to HIRAMATSU). + +2001-04-04 + + * src/about.c: applied the patch from Sergey Vlasov that fixes + the appearance of the about dialog (thanks!). + * src/prefs_common.[ch] + src/rfc2015.[ch] + src/mimeview.c + src/procmime.[ch] + src/compose.[ch] + src/passphrase.c + src/textview.[ch]: applied the GnuPG support patch which had + ported from the sylpheed-win32 branch (thanks to Sergey Vlasov). + * INSTALL, INSTALL.jp: updated the description about GnuPG. + +2001-04-03 + + * src/utils.[ch]: added references_list_append() that parses + References header and makes it string list. + * src/compose.c: modified so that too long References header is + truncated, garbage characters are removed, and header is tidied + up (thanks to Matthias Intemann). + +2001-04-02 + + * src/addr_compl.c: applied the address completion bugfix patch + from Alfons Hoogervorst (thanks!). + +2001-04-01 + + * src/gtksctree.c: modified so that the tree_select_row signal + actually pass the column number. + * src/summaryview.c: summary_selected(): made generic mark and + unread mark can be toggled with clicking of the columns. + Added summary_mark_row_as_read() and summary_mark_row_as_unread(). + * src/prefs_common.c + src/prefs_account.c: applied the layout fix patches from Sergey + Vlasov, and adjusted some widths of GtkEntry widgets. + * src/prefs.c: prefs_dialog_create(): enable notebook to take focus. + * src/inc.c: inc_start(): modified so that authentication dialogs + show server name too (thanks to Sergey Vlasov). + +2001-03-31 + + * src/mimeview.c: mimeview_key_pressed(): fixed a bug that caused + segmentation fault when a malformed multipart message is shown + (thanks to Sergey Vlasov). + * src/summaryview.c: summary_display_msg(): made it focus to the + summary view if the MIME list is empty. + +2001-03-30 + + * src/pixmaps/deleted.xpm + src/pixmaps/mark.xpm + src/summaryview.c: added deleted and mark icon. + * src/gtkutils.c: gtkut_widget_init(): changed gtk_widget_destroy() + to gtk_widget_unref(). + * src/addr_compl.c: start_address_completion(): fixed the bug that + displayed warning when the address book was empty (thanks to + Chideok Hwang). + +2001-03-29 + + * src/summaryview.c: summary_show(): fixed a memory leak bug + (thanks to ChiDeok Hwang). + * src/pixmaps/forwarded.xpm + src/pixmaps/replied.xpm + src/pixmaps/new.xpm + src/pixmaps/unread.xpm + src/compose.c + src/mainwindow.c + src/prefs_common.c + src/procmsg.h + src/summaryview.[ch]: applied the patch from Marc Hoper + that adds replied and forwarded mark to replying or forwarding + messages (thanks!). And new and unread mark were replaced + by the icons David Mehrmann created (thanks!). + * src/summaryview.c: made the width of unread and MIME column + fixed. + * src/prefs.c: prefs_config_parse_one_line(): made it check the + '=' separator (thanks to Sergey Vlasov). + +2001-03-26 + + * src/prefs_common.[ch]: moved smooth scroll option to the + interface tab. + * src/textview.c: made the one-line scroll also perform smooth + scrolling. + +2001-03-25 + + * src/prefs_common.[ch] + src/textview.c: applied the smooth scroll patch from Setoh and + Ninomiya (thanks!). + +2001-03-24 + + * src/summaryview.c: summary_attract_by_subject(): rewritten it + using hash table for speeding up. + * src/prefs_account.c: made filter_on_receive TRUE by default. + * src/mainwindow.c: reordered menu items. + +2001-03-23 + + * src/gtkutils.c: gtkut_clist_bindings_add(): fixed a bug that + caused address completion not to accept space and enter key. + +2001-03-22 + + * src/utils.[ch] + src/codeconv.c: fixed a bug that didn't encode non-ASCII headers + correctly. + * src/compose.c: fixed a bug that didn't decode some headers + correctly when replying or reediting drafts (thanks to Sergey + Vlasov). + +2001-03-21 + + * src/gtkutils.[ch]: added gtkut_widget_init() that modifies the + behaviors of some classes. + * src/main.c: main(): made it call gtkut_widget_init() first. + * src/summaryview.c: summary_create(): removed the key binding code. + +2001-03-19 + + * src/procmsg.[ch]: modified for the sake of readability. + +2001-03-18 + + * src/mainwindow.c: changed "Clean trash" to "Empty trash". + Added new menu items for folder manipulation. + allsel_cb(): made it change the target between summary view and + message view according to the input focus. + Removed "Select all" from Summary submenu. + * src/folderview.[ch]: added functions for creating/renaming/deleting + folder. + * src/procmsg.[ch]: made "marked" and "deleted" flag permanent, and + removed "important" flag. + * src/summaryview.c: added summary_set_row_marks() that sets style + of a row according to the flags, and made some functions use it. + * src/mainwindow.c: allsel_cb(): modified so that it selects + summary view correctly if message view is toggled off. + +2001-03-17 + + * src/socket.c: sock_connect_by_getaddrinfo(): fixed a resource + leak bug of socket, and rewrote the routine. + * src/inc.c: inc_mail(), inc_all_account_mail(): fixed a bug that + displayed the wrong unread number in the folder tree if a + folder was open and new messages arrived at the folder. + * src/socket.c: sock_connect_by_getaddrinfo(): fixed a bug + again. + +2001-03-15 + + * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): made it + check the existence of the destination file. + * src/procmsg.c: procmsg_set_flags(): made it count the last + number of the message list (and fixed a bug that didn't open + newly arrived message). + +2001-03-13 + + * src/prefs_common.c: prefs_send_create(): removed EUC-JP and + Shift_JIS from the outgoing codeset. + +2001-03-12 + + * version 0.4.62 + +2001-03-11 + + * src/send.c: send_message_queue(): modified so that it finds + the account from the `From' and the server name of the queued + message. + * src/account.[ch]: added account_find_from_smtp_server() that + finds an account from the specified address and SMTP server. + * src/Makefile.am + src/mainwindow.c + src/summaryview.[ch] + src/sourcewindow.[ch]: integrated the viewing source patch from + DINH V. Hoà (thanks!). + +2001-03-10 + + * src/addr_compl.[ch] + src/addressbook.c + src/compose.c: applied the enhanced address completion patch + from Alfons Hoogervorst (thanks!). + * src/addr_compl.c: replaced g_assert() with g_return(_val)_if_fail(). + * src/folder.c: folder_init() + src/folderview.c: folderview_drag_motion_cb() + src/procmsg.c: procmsg_clean_trash() + src/summaryview.c: summary_start_drag() + src/imap.[ch]: integrated the IMAP4 move/remove function patch + from Suzuki Mio (thanks!). + +2001-03-08 + + * src/main.c: parse_cmd_opt(): made the --compose option realize + mailto: URI. + * src/utils.[ch]: execute_async(): supported quoted arguments + correctly. + strstr_with_skip_quote(), strsplit_with_quote(): quote-supported + version of g_strsplit(). + * src/mimeview.c: mimeview_view_file() + src/prefs_common.c: added single quotation mark around the file + name. + +2001-03-07 + + * configure.in + src/compose.c + src/prefs.c + src/procmime.c + src/summaryview.c + src/mbox.c + src/recv.c + src/utils.[ch]: applied the security fix patch from Dmitry V. + Levin with some modification (thanks!). Added my_tmpfile() to + utils.[ch]. + * src/main.c: added --receive-all command-line option. + +2001-03-06 + + * src/socket.c: sock_connect_thread(): fixed a bug that didn't + compile if both multithread and IPv6 are enabled (thanks to + Ishihara). + * src/utils.[ch] + src/compose.c: applied a patch from Jason McCarver that allows + FIFO for signature file (thanks!). + * src/textview.c: made some more refactoring. + * src/socket.c: sock_accept(): changed socklen_t to gint. + +2001-03-05 + + * src/main.c + src/textview.c: some code cleanups. + +2001-03-04 + + * src/compose.[ch] + src/main.c + src/textview.c: integrated the patch from Alfons Hoogervorst that + fixes some glitches in clickable URI and enables mail addresses + clickable, and enables the --compose command line option to + specify address (thanks!). + +2001-03-03 + + * src/esmtp.[ch] + src/smtp.[ch] + src/send.c + src/prefs_account.[ch] + src/Makefile.am: applied the SMTP AUTH patch from Martin Schaaf + and fixed its a few bugs (thanks!). + * src/textview.c: textview_key_pressed(): made it don't move focus + to summary view. + * src/main.c: parse_cmd_opt(): modified the help message. + * src/html.[ch]: added empty_line to HTMLParser and modified + the parser routines a bit. + +2001-03-01 + + * src/html.c: added eucjp_symbol_list, and added some characters + to ascii_symbol_list. + +2001-02-19 + + * src/codeconv.[ch]: added a member `charset' and `charset_str' + to CodeConverter. + * src/html.[ch]: added the symbol list for ISO-8859-1 codeset. + html_parser_new(): made it change the symbol hash table + according to the character set of the document. + html_parse_special(): made it recognize character code number. + +2001-02-17 + + * src/textview.c: added textview_show_html() that parses HTML and + display as a text. + textview_show_part(): made it call textview_show_html() if + the part is text/html. + * src/html.[ch]: implemented HTML parser. + +2001-02-15 + + * src/codeconv.[ch]: added CodeConverter, and its methods + (conv_code_converter_new(), conv_code_converter_destroy(), and + conv_convert()). + * src/textview.c: removed the branches by HAVE_LIBJCONV and + rewrote them using CodeConverter. + +2001-02-12 + + * src/mbox.c: proc_mbox(): workaround for duplicated From_ line. + +2001-02-11 + + * src/codeconv.c: some code cleanups. + +2001-02-05 + + * src/mainwindow.c: main_window_popup(): fixed a bug that didn't + popup the main window correctly. + * src/codeconv.h: fixed a bug that the definition of CS_EUC_CN and + CS_EUC_TW was reversed (thanks to Sakamoto). + +2001-02-04 + + * src/gtkutils.[ch] + src/main.c + src/mainwindow.[ch] + src/socket.[ch]: applied the patch from Hiramatu that enables + prohibition of multiple execution and remote control with + command line option (thanks!). + +2001-02-03 + + * src/summaryview.c: summary_button_pressed(), summary_selected(): + made it toggle the view if middle button is clicked while message + view is hidden. + summary_drag_data_get(): fixed a memory leaking. + * src/Makefile.am + src/compose.c: compose_write_headers(): modified so that it uses + host_alias for X-Mailer or X-Newsreader field. + +2001-02-03 + + * version 0.4.61 + + * src/folderview.c: fixed a bug that prevented a folder from being + created if there were already folders that have the same name + somewhere at another place. + +2001-02-02 + + * src/folderview.c: folderview_update_all(): fixed a bug that + caused segmentation fault when a folder was selected after + updating the folder tree. + * src/compose.c: compose_send(): fixed a locking bug. + compose_write_headers(): fixed a bug that referred to cur_account. + compose_convert_header(): made it check the arguments. + +2001-02-01 + + * src/main.c: some cleanups and added --help option. + +2001-01-31 + + * src/send.c: re-enabled user-defined domain name setting. + * src/utils.c: is_next_mbs(): changed the size of temporary + multibyte array to MB_CUR_MAX. + strdup_mbstowcs(): added error check to mbstowcs(). + strdup_wcstombs(): added error check to wcstombs(). + * src/addr_compl.c: get_address_from_edit(): made it check the + return value of strdup_mbstowcs(). + * src/codeconv.c: conv_encode_header(): added error checking + to strdup_mbstowcs(). + +2001-01-30 + + * src/utils.c: log_error(): changed g_error() to g_warning() so + that it doesn't abort. + Added iswalnum(). + * src/addr_compl.c: add_address(): fixed a bug that aborted the + program if the name or the address is empty. + get_address_from_edit(): supported multibyte characters. + * configure.in: fixed a typo. + * src/send.c: re-enabled user-defined SMTP port setting. + +2001-01-30 + + * version 0.4.60 + + * configure.in: added --enable-gpgme option, and disabled GPGME + by default. + * made GPGME related members in MimeInfo not used if disabled. + * src/rfc2015.c: some cleanups for warning. + * README + README.jp + INSTALL + INSTALL.jp: updated. + * Makefile.am: modified bzip2 option. + +2001-01-29 + + * src/procmime.[ch]: added MIME_APPLICATION_OCTET_STREAM to + MIME type. + * src/mimeview.c: mimeview_view_file(): made it do nothing if + the MIME type is application/octet-stream. + * src/folderview.c: folderview_update_all(): made it show modal + dialog while updating folders. + * src/folderview.c: folderview_update_all(): fixed a bug that + didn't remove the dialog. + +2001-01-28 + + * src/mimeinfo.c: merged the patch from John E.P. Hynes that + launches the attached file using metamail (thanks!). + * src/procmime.[ch]: added procmime_get_tmp_file_name(). + * src/compose.c + src/addr_compl.[ch]: merged the patch from Alfons Hoogervorst + that enables address completion in the address entry on the + composition window (thanks!). + * src/addr_compl.c: get_all_addresses(), read_address_book(): + modified so that it uses xml_free_tree() for freeing the address + tree. + +2001-01-27 + + * src/utils.c: remove_dir_recursive(): fixed a bug that failed to + remove the current directory (thanks to Maki). + * src/summary_search.c: added `Select all matched' option to the + search dialog (thanks to Takahashi). + * src/pixmaps/stock_mail_attach.xpm + src/pixmaps/tb_address_book.xpm + src/compose.c: added some toolbar icons contributed from + Leandro Pereira (thanks!). + +2001-01-25 + + * src/rfc2015.c: passphrase_cb(): *finally* fixed a bug that caused + segmentation fault when the passphrase dialog was cancelled. + Hided the passphrase in the debug message. + * src/about.c: about_create(): fixed a bug that failed to compile + when none of the features were used. + * src/foldersel.c: foldersel_set_tree(): made it display all + MH folders. + * src/inc.c: inc_start(): fixed a bug that showed password dialog + continuously if it was cancelled. + * src/summaryview.c: summary_write_cache(): put an assertion after + folder_item_get_cache_file() to prevent the crash. + * thanks to Maki for the above four fixes. + * src/utils.h: added #include . + +2001-01-24 + + * src/rfc2015.c: changed some g_message() used for error messages + to g_warning(). + +2001-01-23 + + * src/procmsg.[ch]: modified READ_CACHE_DATA() macro so that + it can handle a string data of which length >= BUFFSIZE. + * src/rfc2015.c: rfc2015_encrypt(): changed return to `goto failure'. + * src/pixmaps/stock_mail_receive_all.xpm + src/pixmaps/stock_mail_reply_to_all.xpm + src/Makefile.am + src/mainwindow.c: main_window_toolbar_create(): added new toolbar + icons contributed from David Mehrmann (thanks!). + * src/inc.[ch]: overhauled the architecture so that it don't create + and destroy progress dialog for each incorporation in `get all' + mode. + +2001-01-22 + + * src/mh.c: mh_scan_tree_recursive(): fixed a bug that mistook + sub folders named `inbox', etc. as special folders. + * src/rfc2015.c: rfc2015_encrypt(): fixed a bug that didn't quote + boundary correctly. + +2001-01-21 + + * applied the GnuPG patch from Werner Koch (thanks!). + * removed Mixmaster support. + * src/rfc2015.c: changed g_error() to g_warning() and modified some + messages. + * src/about.c: about_create(): modified compiled-in features list. + * README + README.jp + INSTALL + INSTALL.jp: updated. + * src/select-keys.c: create_dialog(): modified the layout. + * src/headerwindow.c + src/addressbook.c + src/logwindow.c: made it raise the window if the window is already + open. + * src/prefs_common.[ch]: added an option for immediate execution. + * src/summaryview.c: made it execute immediately when messages are + moved or deleted if immediate_exec option is turned on. + * src/summaryview.c: summary_delete(), summary_move_selected_to(): + moved summary_step() before summary_execute(). + * src/folderview.c: folderview_update_all(): made it scan folder + tree correctly. + * src/compose.c: compose_write_headers(): made it don't add + In-Reply-To header if to_list is empty. + +2001-01-09 Werner Koch + + * configure.in, acconfig.h: Check for GPGME. + * ac/: New directory for local autoconf macros. + * src/Makefile.am: Add support for GPGME + + * src/main.c (idle_function_for_gpgme): New. + (main): Register this function. + + * src/about.c: Add a note about GPGME. + + * src/rfc2015.c, rfc2015.h: New. + + * src/mimeview.c (mimeview_show_message): Check signature. + * src/procmime.c (procmime_scan_message): Ditto. + + * src/messageview.c (messageview_show): Add decryption stuff. + + * src/compose.c (compose_write_to_file): Encrypt the file if requested. + (compose_toggle_encrypt_cb): New + (compose_toggle_mixmaster_cb): New, just to be prepared for + Mixmaster support. + (compose_write_headers): Suppress some headers in mixmaster mode. + + * src/prefs_common.c (prefs_common_create): Add Privacy notebook sheet. + (prefs_privacy_create): New. Also some new structures etc. + * src/compose.c (compose_create): Set encrypt button to prefs default. + * src/compose.h (struct _Compose): Add use_encryption, use_mixmaster. + + * src/compose.c (compose_send): Add missing unlock before one return. + +2001-01-18 + + * src/gtksctree.[ch] + src/folderview.c + src/summaryview.[ch]: applied the patch from Hiramatu that enables + DnD from the summary view to the folder view and fixes some other + probrems (thanks!). + * src/mainwindow.c: scan_tree_func(): fixed a bug that caused + segmentation fault. + * src/imap.c: quoted user name in LOGIN and folder name in SELECT. + * src/gtksctree.c: gtk_sctree_button_press(): fixed a bug that + didn't toggle expansion of node. + +2001-01-17 + + * src/imap.c: applied the patch from Nishimura that updates the + message list more precisely and reads the message flags (thanks!). + * src/textview.c: textview_show_header(): made X-Newsreader field + be emphasized too. + * src/summaryview.c: summary_show(): made it flush events when + displaying summary. + +2001-01-15 + + * src/summaryview.c: applied the patch from Alfons that enabled + the horizontal scrollbar of summary view (thanks!). + +2001-01-13 + + * src/compose.c: compose_cb(): fixed a bug that didn't open the + composition window right after launching the program. + * src/setup.c: scan_tree_func(): fixed a bug that caused + segmentation fault. + +2001-01-13 + + * version 0.4.52 + + * src/textview.c: textview_set_font(): fixed a bug that caused + segmentation fault if the mode of the text widget was changed + between multibyte and singlebyte while the region was selected + (GTK+ bug?). + +2001-01-11 + + * src/mainwindow.c + src/summaryview.c: made it unable to delete or move messages when + in a news folder. + * src/prefs_common.c + src/news.c: added the option for maximum news article number. + +2001-01-10 + + * src/compose.c: compose_send(): changed the location of temporary + file. Made it use the default account if all of tried account + aren't mail one, and made it show alert dialog and abort when even + that failed. + * src/prefs_account.c: prefs_account_get_new_id(): made it preserve + last id number. + prefs_account_open(): made it fill in personal information + according to the default account when creating a new account. + * sylpheed.spec.in: added to autogenerate sylpheed.spec with the + proper version number (thanks to BONAIM). + * configure.in + Makefile.am: added entries for sylpheed.spec.in. + +2001-01-09 + + * src/compose.[ch]: modified so that it can change account + correctly. + * src/send.[ch]: modified so that it doesn't see cur_account. + * src/prefs_account.c: modified so that news setting doesn't + show SMTP server entry. + +2001-01-08 + + * src/folderview.c: fixed a bug that didn't sort special folders + correctly when a new folder is created or renamed. + +2001-01-07 + + * src/compose.[ch]: enabled to select account at composing window. + * src/folderview.c: made it display unread number next to folder + name. + * src/prefs_common.[ch]: added the option for unread number display. + +2001-01-06 + + * src/compose.[ch]: integrated news posting patch from DINH V. Hoà + and made many modifications (thanks!). + compose_write_headers(): made the spaces in newsgroups removed. + Supported Followup-To. + compose_destroy(): got the objects removed properly. + * src/news.c: merged news_post_to_group() and news_post() since + they doesn't have to do multiple posting. + * src/import.c: import_destsel_cb(): fixed a bug that failed to + import into the selected folder. + * src/prefs_account.c: modified the interfaces. + +2001-01-05 + + * src/codeconv.[ch] + prefs_common.c: changed "SHIFT-JIS" to "Shift_JIS" since the + string is registerd to IANA. + * src/nntp.[ch]: added nntp_post(). + * src/news.[ch]: added news_post() and news_post_to_group(). + +2001-01-04 + + * src/account.c: account_edit_open() + src/mainwindow.c: new_account_cb(): made it unable to edit + accounts if some composing windows are open. + +2001-01-03 + + * src/folder.[ch]: added folder_set_name(). + * src/account.c: made a folder name of IMAP4/NNTP become the same + as the name of account. + +2001-01-02 + + * src/summaryview.c: summary_filter_func(): fixed a bug that failed + to filter messages. + +2001-01-02 + + * version 0.4.51 + + * src/mbox.c: fixed a bug that didn't incorporate spool file + correctly. Modified so that it recognizes From_ line as separator + of messages even if the previous line isn't empty line. + * src/send.c: send_message_queue() + src/procmsg.c: procmsg_send_queue(): Fixed a bug that printed + warning when it tried to delete a sent message. + +2001-01-01 + + * version 0.4.50 + + * src/folder.[ch] + src/news.[ch]: modified so that it actually gets news articles. + * src/utils.[ch]: added make_dir_hier() that creates directory + hierarchy. + * src/folder.c: + folder_item_get_cache_file(), folder_item_get_mark_file(): + made it creates cache directory if it doesn't exist. + folder_add(): made it insert the added folder into the correct + position. + * src/imap.[ch]: modified so that it suits the new folder + architecture. Fixed a bug that caused segmentation fault + if authentication failed at imap_auth(). + * src/folderview.c: implemented IMAP4 folder handling routines. + +2000-12-31 + + * src/prefs_account.[ch]: added account ID and nntp_server + to PrefsAccount. And added the interface for NNTP server. + * src/folderview.c: modified news folder handling routines. + * src/folder.[ch]: removed cache_dir from RemoteFolder, and + modified folder_item_get_path(). + +2000-12-29 + + * src/folder.[ch]: added create_folder(), rename_folder(), + remove_folder() to Folder class. + * src/mh.[ch]: added mh_create_folder(), mh_rename_folder(), and + mh_remove_folder(). + Implemented mh_create_tree() that creates MH directory tree. + mh_rename_folder(): modified so that the paths of sub folders + are set properly. + * src/folderview.c: modified folderview_new_folder_cb(), + folderview_rename_folder_cb(), and folderview_delete_folder_cb() + so that they work properly. + Added folderview_remove_mailbox_cb() and the menu entry that + remove mailbox from folder tree. + * src/setup.[ch]: added for initial setup. + * src/alertpanel.c: modified the appearance of the dialog. + * src/compose.c: fixed compose_save_to_outbox() and + compose_queue() so that it sets flags correctly. + +2000-12-28 + + * src/mainwindow.c: modified the strings of toolbar labels. + +2000-12-27 + + * src/gtkutils.[ch]: added gtkut_ctree_node_move_if_on_the_edge(). + * src/summaryview.c: summary_display_msg(): made it scroll the + list if the message of the edge of that is displayed. + +2000-12-25 + + * src/folder.[ch] + src/mh.[ch]: added functions for moving messages. + * src/procmsg.[ch]: moved procmsg_move_messages_with_dest() + to folder.c and mh.c. Added procmsg_to_folder_hash_table(). + +2000-12-24 + + * src/utils.[ch]: added get_tmp_file(). + * src/pop.c + src/inc.c + src/folder.c: fixed a bug that failed to drop messages. + * src/mh.c: mh_scan_folder(): made it check new, unread, and total + number of the folder. + +2000-12-23 + + * src/folderview.c: added special folder setting routine. + * src/folder.[ch]: added a method is_msg_changed(). + Implemented folder_find_item_from_path(). + * src/summaryview.c: fixed some bugs that wrongly freed FolderItem's. + * autogen.sh: fixed so that the configure can take arguments. + +2000-12-22 + + * src/main.c + src/mainwindow.[ch]: added main_window_new_mailbox() that asks + the path of mailbox and create the one. + * src/folderview.c: made the folder tree and selected folder + expanded. + +2000-12-21 + + * src/mh.[ch] + src/folder.c: implemented mh_scan_tree() that scans the folder + recursively and create the tree. + +2000-12-19 + + * src/compose.c + src/defs.h + src/filter.[ch] + src/folder.[ch] + src/foldersel.[ch] + src/folderview.[ch] + src/imap.[ch] + src/import.c + src/inc.c + src/main.[ch] + src/mainwindow.c + src/mbox.[ch] + src/mh.[ch] + src/news.[ch] + src/prefs_common.c + src/procmsg.[ch] + src/summaryview.[ch] + src/xml.[ch] + src/Makefile.am: merged the development tree into the cvs tree. + Some functions are not unimplemented yet. + +2000-12-18 + + * version 0.4.9 + +2000-12-11 + + * src/xml.[ch]: supported omitted tag (). + * src/procmsg.c: procmsg_msg_exist(): fixed a memory leak bug. + * src/imap.c: imap_parse_atom(): fixed a bug that caused + segmentation fault if the subject was empty (thanks to Tsutsui). + * src/folder.[ch]: updated. + +2000-12-10 + + * src/xml.[ch]: added xml_parse_file() that parses the whole XML + file specified and returns the tree. + +2000-12-09 + + * po/pt_BR.po: fixed some typos that caused segmentation fault. + +2000-12-07 + + * version 0.4.8 + + * src/session.h: added. + * src/folder.[ch]: updated. + * src/compose.c: compose_write_to_file() + src/codeconv.c: conv_get_outgoing_charset_str(): fixed a bug + that put a garbage to charset if the outgoing character set was + specified and non-ascii characters were used in subject. + +2000-12-04 + + * src/statusbar.c: statusbar_puts(): fixed a bug that locked the + progress if the status bar was hidden. + +2000-12-03 + + * src/folder.[ch]: added for the more object-oriented folder + management. + +2000-12-02 + + * version 0.4.7 + + * src/mainwindow.c + src/prefs_common.[ch]: made the state of status bar get preserved. + * src/compose.c: compose_insert_sig(): modified so that it doesn't + put a separator if a signature file doesn't exist. + * src/prefs_account.[ch] + src/inc.c: added the option that toggles whether to receive + messages when getting from all accounts. + * README + README.jp: updated the description and added some usages. + +2000-12-01 + + * src/Makefile.am + src/gtkshruler.[ch] + src/compose.[ch]: applied the patches from Alfons Hoogervorst + that makes the ruler of composition window graphical (thanks!). + +2000-11-27 + + * src/codeconv.c + src/mainwindow.c + src/prefs_common.c: replaced CS_WINDOWS_1251 with CS_CP1251. + +2000-11-27 + + * version 0.4.6 + + * src/compose.c: turned the color of quoted messages black again. + +2000-11-26 + + * src/about.c: added a clickable URI to the Sylpheed home page, + and a list of compiled-in features. + * src/compose.c: made the color of quoted messages blue. + * src/summaryview.c: added `Show all header' to the context menu. + * src/prefs_common.c: removed the threading option from the dialog. + * src/compose.c: fixed a bug that didn't parse the quotation format + correctly. + +2000-11-25 + + * src/compose.c: compose_set_ext_editor_sensitive(): modified so + that it toggles linewrap menu item and tool button. + * src/prefs_common.c: modified the default of the signature + separator. + * src/compose.[ch]: added ruler to the compose window. + * src/prefs_common.[ch]: added a member for the state of ruler + display. + +2000-11-24 + + * src/headerview.[ch]: added the destroy function. + * src/messageview.c: messageview_destroy(): fixed a memory leak + bug that didn't freed the HeaderView object. + * src/prefs.c: prefs_write_open(): fixed a memory leak bug. + * src/xml.c: xml_close_file(): fixed a memory leak bug (thanks + to Alfons Hoogervorst for the above three memory leak bug fixes). + +2000-11-23 + + * version 0.4.5 + + * README + README.jp + INSTALL + INSTALL.jp: modified some descriptions. + +2000-11-22 + + * src/compose.c: implemented line-wrapping functions. + * src/prefs_common.[ch]: added the settings for line-wrapping. + * src/codeconv.[ch]: added Windows-1251 to the codesets. + conv_jistoeuc(): fixed a bug that caused segmentation fault + when some half-width kana characters appeared. + * src/summaryview.c: summary_select_all(): made it show message + on the status bar if the number of messages is large. + +2000-11-18 + + * src/compose.c: compose_reply(), compose_quote_parse_fmt(): + modified so that it parses the quotation mark too. + Added %I that means the initial of sender to the format. + * src/codeconv.[ch]: added GB2312 and Big5 to the codesets. + Fixed a bug that set the wrong outgoing codeset. + * src/mainwindow.c + src/prefs_common.c: modified the menu item of Chinese codeset. + +2000-11-17 + + * src/codeconv.[ch] + src/prefs_common.[ch]: modified so that outgoing charset is + saved as a string, not a number. + +2000-11-16 + + * src/textview.c: textview_set_font(): changed the scheme of + selecting between font and fontset. And changed the default + font of ISO-8859-1. + * src/headerview.c: headerview_show_xface(): made it ignore + invalid X-Face. + * src/codeconv.c: conv_codeset_strdup(), conv_get_code_conv_func(): + modified so that it consider the source codeset as ISO-2022-JP if + it is NULL and the current locale is Japanese. + +2000-11-14 + + * src/textview.c: textview_destroy(): fixed a bug that caused + segmentation fault if textview->msgfont is NULL (thanks to + Hiramatu). + * src/main.c + src/defs.h: applied the patch from Yanase that enables to + save the shortcuts of the menus (thanks!). + +2000-11-11 + + * src/mainwindow.[ch]: added main_window_set_menu_sensitive() that + toggles the sensitivity of menu items. + * src/summaryview.c: renamed summary_set_popup_sensitive() to + summary_set_menu_sensitive(), and made it set the sensitivity of + the main menu. + +2000-11-09 + + * src/textview.c: textview_init(): fixed a bug that didn't disable + the theme engine of GtkText (thanks to Hiramatu). + * src/compose.c: compose_quote_parse_fmt(): added %n and %N that + means the full name of sender and the first name. + * manual/ja/*.??ml: updated to the latest version. + +2000-11-07 + + * version 0.4.4 + + * src/defs.h: separated the definitions from main.h and applied the + patch from TOGAWA that sets DEFAULT_SPOOL_PATH and MAXPATHLEN + from the system headers (thanks!). + * src/codeconv.c: conv_get_current_charset(): fixes for lt_LT and + UTF-8 locale. + * src/textview.c: textview_set_font(): modified so that it sets + the correct font when the locale is multi-byte. + textview_destroy(): added proper codes for destruction. + textview_show_header(): fixed the coloration of X-Mailer. + +2000-11-06 + + * src/textview.[ch]: made TextView have single-byte and multi-byte + GtkText, and switch between them according to the given codeset. + * src/compose.c: compose_create(): modified the font setting + routine. + +2000-11-02 + + * src/textview.[ch]: moved the message font variable into TextView. + textview_set_font(): modified so that it uses gdk_font_load() + if the given codeset is US-ASCII or ISO-8859-*. + +2000-11-01 + + * src/codeconv.c + src/procmime.c + src/prefs_common.c + src/textview.c + src/compose.c: workaround for the 8bit code issue (used + gdk_font_load() instead of gdk_fontset_load() when the locale is + C, or not set). + +2000-11-01 + + * version 0.4.3 + + * src/compose.[ch]: added `Draft' tool button. + * src/imap.c: imap_parse_envelope(): fixed a parsing bug. + * README, README.jp: added the explanation of the locale setting. + +2000-10-31 + + * src/compose.c: made it overwrite the previous draft message when + reedited the draft and saved it again. + * src/procmsg.[ch]: added procmsg_msg_exist() that examine whether + the message really exists. + * src/folderview.[ch]: added folderview_scan_folder_a() and + folderview_scan_folder_foreach_a() that scan the specified + folders for each folderviews. + * src/mainwindow.[ch]: removed main_window_scan_folder() and + main_window_scan_folder_all(). + Added `Reedit' to the menu. + * src/import.[ch]: removed MainWindow from the argument of + import_mbox(). + * src/summaryview.c: removed the unnecessary items from the popup + menu. Changed summary_reedit_cb() to summary_reedit(), and made + it public. + +2000-10-30 + + * src/compose.h: added a member msginfo to Compose. + * src/procmsg.[ch]: added procmsg_msginfo_copy() that duplicates + the MsgInfo object. + +2000-10-25 + + * src/summaryview.c: made the the popup menu change the sensitivity + according to the context. Fixed a bug that showed the `clean trash' + dialog repeatedly if `D' key was pressed when the focus was on the + summary view. + * src/pixmaps/unread.xpm: changed the color of unread mark to blue. + +2000-10-22 + + * src/main.c: fixed g_thread initialization. + +2000-10-21 + + * src/codeconv.c: added pt_BR to locale_table. + * src/prefs_common.c: prefs_send_create(): added `US-ASCII', + `ISO-8859-1', and Japanese codeset to the option menu of outgoing + codeset when not using libjconv. + * src/compose.c: fixed the bug on saving draft again. + +2000-10-19 + + * src/compose.c: compose_write_headers(): fixed a bug that failed + to write headers if To: was empty when saving draft. + +2000-10-18 + + * src/procmime.[ch] + src/compose.c + src/headerwindow.[ch] + src/summaryview.c + src/messageview.[ch] + src/mimeview.c + src/textview.c + src/procmsg.[ch] + src/procheader.[ch]: modified so that they can handle queue folder + properly. + * src/compose.[ch] + src/summaryview.c: implemented draft-reediting function. + * src/mainwindow.c + src/summaryview.c + src/mimeview.c: replaced *(GtkWidget **) with the macro + GTK_WIDGET_PTR(). + +2000-10-17 + + * src/procmsg.[ch]: procmsg_msginfo_free(): fixed a memory leak bug. + Added MSG_QUEUED and MSG_DRAFT to MsgFlags, and made it set them + if the folder is QUEUE_DIR or DRAFT_DIR. + +2000-10-14 + + * version 0.4.2 + + * src/headerview.c + src/messageview.c: modified the border of the headerview. + * src/gtkutils.h: added the macro GTK_WIDGET_PTR() that casts + an Sylpheed object to GtkWidget. + * src/utils.c: remove_return(), remove_space(): fixed a bug that + possibly caused segmentation fault. + * src/compose.[ch] + src/mainwindow.c + src/summaryview.c: implemented `forward as an attachment'. + * src/utils.[ch]: open_uri(): brought on URI opening function from + textview.c and manual.c. + +2000-10-13 + + * src/mainwindow.c + src/summaryview.c + src/compose.[ch] + src/prefs_common.[ch]: removed `Reply with quote', and added + `Reply to all', and added the option that decides whether to + quote message on replying. + +2000-10-12 + + * src/folderview.c: modified so that it uses gtkut_wait_for_draw() + instead of GTK_EVENTS_FLUSH() for statusbar redraw. + * src/codeconv.[ch] + src/mainwindow.c + src/prefs_common.c: added Baltic (ISO-8859-4,13) to the code sets. + * src/compose.c: compose_send(): modified so that it shows error + dialog when failed to send a message. + +2000-10-11 + + * src/account.c: account_edit_close(): fixed a bug that didn't set + current account when creating an account for the first time. + * configure.in: added es to ALL_LINGUAS. + +2000-10-10 + + * src/codeconv.c: conv_codeset_strdup(): made it use libkcc if + possible. + conv_get_code_conv_func(): modified so that it doesn't convert + codeset if it is unknown. + * src/folderview.c: folderview_update_msg_num(): modified style + changing routine. + +2000-10-09 + + * src/codeconv.c: conv_codeset_strdup(): modified so that it sets + codesets automatically if the arguments are NULL. + * src/textview.c: textview_write_line(): made it output warning + message on the text view if conversion failed. + +2000-10-06 + + * README, README.jp: modified the author of the manual. + +2000-10-05 + + * src/headerview.[ch] + src/messageview.[ch]: modified so that it uses GtkLabel widget + instead of GtkText. + * src/codeconv.c: conv_unmime_header(): modified so that it deletes + unreadable codes if the current locale is EUC-JP and libjconv is + used. + +2000-10-04 + + * src/procmime.[ch] + src/messageview.c + src/mimeview.c + src/textview.c: modified so that it parses MIME message more + preferably. + * src/imap.c: imap_parse_address(): fixed a bug. + +2000-10-03 + + * src/procmsg.[ch]: added procmsg_get_message_file_path(). + * src/recv.c: recv_bytes_write(): added CR+LF -> LF conversion + routine. + * src/imap.[ch]: changed the name of the member `group' in + IMAPSession to `mbox'. + imap_gen_send(): modified so that it doesn't output the password + to the log. + Modified session destroying routine. + * src/folderview.c: folderview_write_cache(): made it preserve + the IMAP folder list. + * src/procmime.c: procmime_scan_multipart_message(): fixed a bug + that showed boundary at the end of an attached RFC822 part. + * src/prefs_common.c: changed the default of toolbar style to + both icon and text. + +2000-10-02 + + * src/imap.c: imap_get_uncached_messages(): modified so that it + doesn't get the cached envelopes. + imap_session_get_message_info(): made it read only the cache + if the session is not established. + * src/procmsg.c: procmsg_set_flags(): supported IMAP folder. + * src/news.c: news_get_article_info(): made it read only the cache + if the session is not established. + +2000-10-01 + + * src/textview.c: textview_write_line(): fixed a memory leak bug. + * src/folderview.[ch]: made it create IMAP4 folders from the + account information. + * src/imap.[ch]: imap_session_get(): modified so that it creates + IMAP4 session from the account information. + +2000-09-30 + + * src/imap.[ch]: added for IMAP4 support. + * src/summaryview.[ch] + src/procmsg.c + src/recv.[ch]: modified for IMAP4 support. + * src/folderview.c: more IMAP4 implementation. + * src/procmsg.[ch]: added procmsg_get_message_file() that retrieves + the specified message and return the file name. + * src/gtkutils.c: gtkut_widget_wait_for_draw(): fixed a bug that + locked up the process if the given widget was invisible. + +2000-09-28 + + * src/folderview.[ch]: added IMAP4-related code. + +2000-09-28 + + * version 0.4.1 + + * src/main.h: added IMAP_CACHE_DIR. + * src/utils.[ch]: added get_imap_cache_dir(). + * src/procmsg.h: added M_IMAP to MsgType, and MSG_IMAP to MsgFlags. + Added macro MSG_IS_IMAP(). + * src/codeconv.c: added `#include ' for setlocale(). + * sylpheed.spec: fixed %files section. + +2000-09-27 + + * version 0.4.0 + + * src/codeconv.c: conv_get_current_charset(): made it compare + string with strncasecmp(). + * src/compose.c: comopse_reply_parse_header(): workaround for + the malformed References: header generated by OE5 :( + +2000-09-26 + + * src/prefs_common.c + src/prefs_account.c: modified the layout of the widgets. + +2000-09-26 + + * version 0.3.99 + + * src/*.[ch]: added copyright notice to the top of the source files. + * src/compose.c: compose_write_attach(): modified filename encode + routine. + +2000-09-25 + + * src/mainwindow.c: fixed the menu entry of manual. + * src/compose.c + src/codeconv.[ch]: moved compose_encode_header() into codeconv.c, + and applied the libjconv patch. + * src/utils.c: strdup_mbstowcs(), strdup_wcstombs(): used g_realloc() + to reduce the alloc'd memory to the optimal size. + * src/prefs_common.[ch]: added outgoing codeset option menu. + * src/compose.c: compose_send(): added exclusive lock to prevent + multiple-sending. + * configure.in: made '--enable-ipv6=no' the default. + * src/compose.c: compose_write_attach(): made it encode the name + of the attached file. + * src/procmsg.c: procmsg_get_last_message_number(): fixed a bug that + didn't check the type of file. + procmsg_move_messages_with_dest(): fixed a bug that failed to + move message if a directory that had the same name existed. + * src/utils.c: is_ascii_str(): modified so that '\t', ' ', '\r', '\n' + are included as ASCII characters. + +2000-09-24 + + * src/compose.c + src/procmime.[ch]: modified so that it actually works when using + libjconv :) + * src/codeconv.[ch]: added conv_codeset_strdup() that converts + the codeset of string according to the codeset specified in + arguments. + * src/utils.[ch]: added is_ascii_str() that determines whether the + string is 7bit-ASCII or not. + * src/procmime.[ch] + src/codeconv.[ch]: moved the character set related functions + into codeconv.c. + * merged the patch and the manual written by BONAIM (thanks!). + +2000-09-23 + + * configure.in + src/compose.c + src/gtkutils.c + src/mainwindow.c + src/procmime.[ch] + src/textview.c + src/unmime.[ch]: applied the patch from Higuchi that utilizes + libjconv and enables to handle many locales, including UTF-8 + (Unicode) (thanks!). + * src/account.c: modified so that the account isn't changed when + another account is selected on account edit dialog. + +2000-09-20 + + * src/prefs_common.[ch] + src/textview.c: added an option that specifies whether to display + short headers on message view. + * src/codeconv.[ch]: added function conv_unmime_header() that + decodes MIME-encoded header and converts the character set. + And added conv_unreadable_latin(), and modified conv_latintodisp(). + * src/messageview.[ch]: made the window get closed when escape key + is pressed. + +2000-09-17 + + * src/imageview.c: fixed a bug that caused segmentation fault if + message view was in new window. + * src/prefs_common.c: added `xemacs %s' to the external editor + command line list. + +2000-09-16 + + * version 0.3.29 + + * src/summaryview.c: enabled to open a new message window with + double-clicking. + * src/prefs_common.[ch] + src/messageview.c: made it preserve the window size of message + window. + * src/prefs_account.c: added `None (local)' to the option menu of + protocol. + +2000-09-15 + + * Makefile.am: added autogen.sh to EXTRA_DIST. + +2000-09-09 + + * src/prefs_common.c: applied the patch from Paul Rolland that + enables font selection dialog (thanks!). + * src/compose.[ch] + src/utils.[ch]: moved tzoffset() and compose_get_date() of + compose.[ch] into utils.[ch]. + * src/main.[ch]: renamed the name of filter file to `filterrc'. + +2000-09-06 + + * src/compose.[ch] + src/utils.[ch]: modified address parsing routine so that it + parses quotes correctly. + * src/textview.c: textview_show_part(): modified so that it shows + the simplified headers if the part is text/plain. + +2000-09-03 + + * src/messageview.[ch] + src/summaryview.[ch] + src/mainwindow.c: enabled to open a message in new window. + * src/messageview.[ch] + src/mimeview.[ch] + src/textview.[ch] + src/imageview.[ch]: added destroy function, and modified the + key handling routines. + +2000-09-02 + + * src/socket.c: sock_connect_by_getaddrinfo(): fixed a bug that + caused segmentation fault (thanks to KUROSAWA). + * src/alertpanel.c: modified so that the focused button is + selectable. + * src/account.c + src/compose.c + src/folderview.c: modified so that the order of the buttons of + alert panel will be `Yes', `No'. + +2000-09-01 + + * src/utils.[ch]: added execute_async() and execute_command_line() + that execute command line using execvp(). + * src/textview.c + src/mimeview.c + src/procmsg.c: replaced system() with execute_command_line() + for security. + * src/procmsg.c: turn back to system(). + * src/utils.c: modified execute_command_line(). + +2000-08-31 + + * src/mainwindow.c: main_window_get_size(): modified so that it + doesn't update the height of SummaryView if MessageView is + toggled off. + * src/compose.[ch]: applied the patch from NAKAGAWA that fixes some + probrems of external editor handling (thanks!). + * src/uuencode.[ch] + src/procmime.[ch]: applied the patch from Hiramatu that make it + supports Content-Transfer-Encoding: x-uuencode (thanks!). + +2000-08-30 + + * src/compose.[ch] + src/prefs_common.[ch]: implemented the external editor faculty. + * src/compose.c: compose_attach_property(): fixed some bugs on + changing the property of attached file. + * src/compose.c: fixed some bugs of external editor functions. + +2000-08-29 + + * version 0.3.28 + + * src/mainwindow.c + src/prefs_common.[ch] + src/summaryview.c: applied the patch from Paul Rolland that + restores the size of widgets when restarting (thanks!). + * src/folderview.c + src/prefs_common.[ch] + src/summaryview.c: applied the patch from Paul Rolland that saves + the width of CTree columns (thanks!). + +2000-08-27 + + * src/headerview.c: modified the height of HeaderView. + * src/textview.c: textview_show_part(): made it process the message + as normal text if it is single-part RFC822 message. + * src/folderview.c + src/summaryview.c: some changes around the key handling. + * src/prefs_common.[ch]: substituted the word `assort' with `filter'. + +2000-08-26 + + * src/codeconv.[ch]: added conv_latintodisp() for ISO-8859-1 support. + * src/procheader.c: procheader_get_one_field(): fixed a bug that + caused segmentation fault if the first line of the file is space + or tab (thanks to Hiramatu). + * src/mimeview.c: mimeview_drag_data_get(): modified so that the + filename doesn't include G_DIR_SEPARATOR (thanks to Hiramatu). + * src/prefs_account.c + src/prefs_common.c: modified the dialog size. + * src/prefs.c: made the dialog window growable. + +2000-08-25 + + * version 0.3.27 + + * configure.in: removed unnecessary AC_CHECK_FUNC(gettext) that + caused the failure of the detection of libintl. + * src/filter.[ch] + src/prefs_common.c: implemented `not contain', and modified for + future enhancement. + * src/imageview.c: changed alertpanel_error() to g_warning() so that + it doesn't grab mouse events. + * src/compose.[ch]: added compose_list that holds the list of + Compose objects, and added the function compose_get_compose_list(). + * src/main.c + src/mainwindow.c + src/summaryview.c: made it confirm if composing message exists. + +2000-08-23 + + * src/compose.c: compose_reply_set_entry(): fixed a bug that caused + segmentation fault when trying to reply the message in the queue + folder (thanks to Kotobuki). + compose_attach_property(): modified the property dialog routine + so that it can handle input error. + * src/mimeview.c: applied the patch from Hiramatu that enables + the drag 'n drop from MimeView (thanks!). + * src/headerview.[ch] + src/procheader.c + src/procmsg.h: applied the patches for X-Face support from + HIROSHIMA (thanks!). + +2000-08-22 + + * src/compose.c: compose_attach_property(): modified so that the + property dialog can actually change the property of attached file. + +2000-08-21 + + * configure.in + src/Makefile.am: updated for gdk_imlib. + * added AUTHORS and NEWS. + * configure.in + acconfig.h + src/Makefile.am: modified so that configure auto-detects gdk-pixbuf + and gdk_imlib library. And fixed a bug on IPv6 detecting. + * src/imageview.c: supported gdk-pixbuf. + * README + README.jp + INSTALL + INSTALL.jp: added the mention about built-in image view. + * configure.in: modified so that configure can disable gdk-pixbuf + or/and gdk_imlib library. + +2000-08-20 + + * src/imageview.[ch] + src/main.c + src/messageview.[ch] + src/mimeview.[ch]: applied the patches from HIROSHIMA that enables + to display image (thanks!). + +2000-08-19 + + * version 0.3.26 + + * src/summaryview.c: summary_assort_func(): modified to avoid + `not receive' setting. + +2000-08-18 + + * src/filesel.c: applied the patch from HIROSHIMA that makes it + remember previous directory when opening the dialog (thanks!). + * src/summaryview.[ch]: added a function summary_redisplay_msg(). + * src/mainwindow.c: set_charset_cb(): made it redisplay the message + that is currently shown when the character set is changed. + * src/inc.c + src/pop.c + src/prefs_common.c + src/filter.h: applied the patch from Tanaka that enables not to + receive specified messages according to the sorting rule (thanks!). + +2000-08-15 + + * src/procmsg.[ch]: added MSG_MIME to the type MsgFlags. And modified + so that it handles MSG_MIME flag, and it scans uncached messages + when cache reading failed even if it is specified not to scan + new messages. + * src/procheader.c: procheader_parse(): added the determination of + multipart MIME message. + * src/main.h: increased CACHE_VERSION. + * src/summaryview.[ch]: added the `MIME' column that shows whether + a message is multipart or not. + * src/prefs_common.[ch]: added the `MIME' column to the setting of + displaying item. + * added src/pixmaps/clip.xpm. + * src/summaryview.c + src/procmsg.[ch]: modified so that it prompts the print command + before printing. + +2000-08-14 + + * src/folderview.c: folderview_create() + src/summaryview.c: summary_create(): + src/addressbook.c: addressbook_create(): set the expander style of + CTree to GTK_CTREE_EXPANDER_SQUARE. + * src/compose.c: modified the interface of property dialog. + +2000-08-13 + + * src/compose.c: added property dialog for attached file. + +2000-08-11 + + * src/procmsg.[ch]: added a function procmsg_print_message() that + prints the given message. + * src/summaryview.c: summary_print(): modified so that it prints + all selected messages. + * src/folderview.c: folderview_select_node(): fixed a bug that + didn't focus on folder tree if inbox was empty when incorporating. + +2000-08-10 + + * version 0.3.25 + + * src/prefs_commmon.[ch]: added `Other' tab and an option for + printing. And moved external browser option to there. + * src/mainwindow.c + src/summayview.[ch]: added print menu and implemented print + functions. + +2000-08-09 + + * src/prefs_account.c: made the default value of smtp_server to + NULL. + * src/folderview.c: folderview_update_msg_num(): modified so that + it doesn't emphasize trash folder even if it has new or unread + messages. + +2000-08-08 + + * src/filesel.c: filesel_select_file(): (perhaps) fixed a bug that + caused segmentation fault when file selection dialog was closed + and other dialog was open immediately. + +2000-08-05 + + * src/compose.c: compose_encode_header(): fixed a bug that caused + infinite loop if wctomb() failed. + +2000-08-04 + + * version 0.3.24 + + * src/mimeview.c: enabled to open an attached file with double click + and popup menu. And cleaned up the code. + * src/procmime.[ch]: added a function procmime_get_part() that + saves the part of multipart message. + +2000-08-03 + + * src/main.[ch] + src/mimeview.c + src/prefs_common.[ch] + src/procmime.[ch] + src/utils.[ch]: applied a patch that enables to launch attached + image, audio, and HTML file (thanks to Hashimoto). + * src/filter.c: filter_match_condition(): fixed a bug that caused + segmentation fault if the body of specified filter is NULL. And + made the filter considered as being matched on that case. + +2000-07-30 + + * src/summaryview.c: + summary_save_as(): fixed a bug that unabled to save news articles. + summary_display_msg(): added exclusive lock to prevent it from + reading another news article while it is already processing one. + * src/gtkutils.[ch]: added gtkut_widget_wait_for_draw() that waits + the draw signal to be emitted. + * src/mainwindow.c: + main_window_cursor_wait() + main_window_cursor_normal(): added gdk_flush() to change cursor + immediately. + * Makefile.am + libkcc/Makefile.am: added EXTRA_DIST for `make dist'. And added + a target `release' to Makefile.am. + +2000-07-28 + + * src/socket.c: supported IPv6. + * configure.in + acconfig.h: added checking for IPv6. + * prefs_common.c: changed the default of toolbar_style to icon only. + +2000-07-27 + + * initial cvs import. + * updated README and README.jp. + +2000-07-24 + + * version 0.3.23 + + * src/procmime.[ch]: modified the structure of MimeInfo so that it + can be handled as a node of tree. + Added procmime_mimeinfo_free_all() that frees all of the MimeInfo + recursively. + Added procmime_get_text_part() that scans a message and gets a text + part for quoting. + * src/mimeview.c: divided mimeview_scan_multipart_message() into + procmime_scan_multipart_message() and mimeview_set_multipart_tree(). + * src/compose.c: compose_quote(), compose_forward(): + made it quote the text part of multipart message properly. + Made it preserve the size of Compose window. + * src/prefs_common.[ch]: added compose_width and compose_height to + the members. + * src/textview.c: textview_show_part(): some code cleanups. + * src/codeconv.[ch]: added a function conv_get_code_conv_func(). + +2000-07-20 + + * version 0.3.22 + + * src/codeconv.[ch]: fixed a bug that showed garbage characters if + the return code of the message was CR+LF. And added + conv_sjistoeuc(). + * src/summaryview.c: summary_attract_by_subject(): made it move + the current view point to the selected row when executed. + * src/textview.c: textview_show_part(): modified the character set + determination routine. + * src/folderview.c: folderview_update_msg_num(): fixed a bug that + caused segmentation fault if boldfont was NULL. + * src/compose.c: compose_create(): made it sets itself as the target + of addressbook on window creation. + +2000-07-19 + + * src/compose.c: compose_send(): fixed a bug that didn't save + queued message to outbox when failed to send the message (thanks + to T. Yamamoto). + +2000-07-15 + + * src/inc.[ch]: modified so that it changes error message dialog + depending on the results. + +2000-07-14 + + * src/mainwindow.c: main_window_create(): set usize of account + button on the status bar to 1 so that it doesn't get expanded + more than necessary. + * src/account.[ch]: account_foreach(): made it abort the iteration + if the function returns nonzero. + * src/inc.[ch] + src/pop.c: modified so that it shows error message dialog if the + message processing is failed. + +2000-07-04 + + * version 0.3.21 + + * src/mainwindow.c: made it popup account selection menu when + account tool button or account status bar is pressed. + * src/folderview.c + src/prefs.c: suppressed the ENOENT perror messages. + * src/pop.c: made it fall back on LAST command if UIDL failed. + +2000-07-01 + + * src/procheader.c: procheader_parse(): fixed a bug that didn't + parse References: header correctly (thanks to YAMAGUCHI). + +2000-06-29 + + * version 0.3.20 + + * src/compose.c: compose_reply_set_entry(): fixed a bug that didn't + cc'd correctly when replying. + * src/mainwindow.c + src/summaryview.c: sorted out the main menu and the popup menu. + +2000-06-26 + + * version 0.3.19 + + * src/prefs_account.[ch] + src/compose.c: made it be able to set Cc:, Bcc:, and Reply-To: + automatically at composing (thanks to NAKAGAWA). + +2000-06-25 + + * src/prefs_common.[ch] + src/mainwindow.c + src/main.c: made it selectable whether to ask before cleaning + trash at the exit. + * src/prefs_common.c: cleaned up the code and the interface a bit. + * src/summaryview.c: modified the unthread functions for speeding + up. + +2000-06-24 + + * src/prefs_common.[ch] + src/summaryview.c: made it display recipient on the `From' column + if the address of the sender is the same as the current account + (thanks to NAKAGAWA). + * src/utils.[ch]: added a function extract_address() that extracts + the address from `From:' header string. + * src/mainwindow.c: allsel_cb(): fixed a bug that caused segmentation + fault if `Edit/Select all' was selected when the message view was + hidden (thanks to Tomita). + +2000-06-21 + + * src/summaryview.c: modified execution routine so that it only + unthreads nodes that are needed to be unthreaded. + +2000-06-19 + + * src/news.c: news_session_get(): implemented the reconnection on + being disconnected. + * src/nntp.[ch]: added nntp_mode(). + +2000-06-18 + + * src/mbox.c: fixed a bug that didn't close mbox FILE pointer. + And support assortment on processing mbox. + * src/inc.c: inc_drop_message(): modified so that it uses hash table + to store the last message number of folders. + * src/summaryview.c + src/addressbook.c: modified the behavior of CTree at right-click. + * src/pop.c: pop3_getrange_uidl_recv(): fixed a potential buffer + overflow bug (thanks to Nishiyama). + +2000-06-17 + + * version 0.3.18 + + * src/pop.[ch] + src/inc.[ch]: implemented management of read message on POP server + by UIDL. + * src/utils.[ch]: removed (s)list_remove_all() because it can be + replaced with g_(s)list_free(). + * src/summaryview.c: modified the arrangement of menu a bit. + * src/summaryview.c: summary_status_show(): made it doesn't display + server name but newsgroup. + * src/prefs_common.c + src/prefs_account.c: adjusted the calculation routine of dialog + size. + +2000-06-15 + + * version 0.3.17 + + * src/compose.c: compose_reply_set_entry(): modified so that it + cc's to the all addresses on To: and Cc: of the replied message. + And swapped the position of Subject: and To: entry. + +2000-06-14 + + * src/procheader.c: modified so that it can handle headers that + aren't separated by space. + * src/socket.c: sock_connect(): added a wait after connection to + prevent lockup (thanks to NINOMIYA). + +2000-06-13 + + * src/inc.c: + inc_mail() + inc_all_account_mail(): fixed a bug that caused segmentation + fault if no account exist. + * src/mainwindow.[ch]: made receive button unclickable when + no account exist. + * src/compose.c: compose_queue(): fixed a bug that didn't mark + queued message properly. + * src/utils.[ch]: separated code conversion functions into + src/codeconv.[ch]. + +2000-06-13 + + * version 0.3.16 + + * src/mimeview.c: mimeview_save_as() + src/summaryview.c: summary_save_as(): made it ask whether to + overwrite the existing file. + +2000-06-12 + + * src/utils.c + src/recv.c + src/prefs.c + src/prefs_common.c + src/prefs_account.c + src/addressbook.c + src/compose.c + src/mbox.c: fixed a bug that failed to check write error when + disk was full and caused the loss of the file. + +2000-06-11 + + * src/mainwindow.c: main_window_clean_trash(): made it move focus + to folder view when finished. + * src/utils.[ch]: added code conversion functions for display. + And added strncpy2() that doesn't do zero fill and does + null-termination, unlike original strncpy(). + * src/textview.c: modified so that it changes the code conversion + function according to charset. And supported charset=SHIFT_JIS. + * src/mainwindow.c + src/prefs_common.h + src/textview.c: made it possible to force character set of + a message. + * src/folderview.c: folderview_select_next_unread(): + made it search unread folder from begin if it isn't found. + +2000-06-11 + + * version 0.3.15 + + * src/mainwindow.c: fixed a probrem again that main window was + stretched to the width of the toolbar. + * src/mbox.c + src/utils.c: is_header_line(): modified so that it recognizes + a header which doesn't have a space after colon (thanks to Hotta). + * src/filter.c: added `#include '. + * src/smtp.c: replaced snprintf() with g_snprintf(). + * src/Makefile.am: added `-I$(top_srcdir)/intl' to INCLUDES for + included gettext. + * included sylpheed.spec. + +2000-06-10 + + * src/prefs_common.[ch]: enabled to set the pixels of line space + and decide whether to leave space on head of lines. + * src/summaryview.c: modified so that it clears message view + when displayed message is removed from the summary view. + * src/mimeview.c: fixed a bug that caused infinite loop if + terminal boundary of multipart message was not found (thanks to + Nishika). + * src/folderview.c: folderview_scan_mailbox(): made it ignore + dot directory. + * src/main.c: made it show warning dialog and exit if the file with + the same name already exists when creating directory. + +2000-06-09 + + * src/textview.c + src/prefs_common.[ch]: made it possible to leave space between + and on head of lines. + +2000-06-07 + + * src/compose.c + src/procmime.[ch]: made it scan /etc/mime.types and determine + the MIME type of the attached file. + * src/summaryview.c: made it clear message view if the summary + is unselected on the execution, and made it move focus to + folder view if the folder becomes empty. + * src/mainwindow.c: fixed a probrem that main window was stretched + to the width of the toolbar. + * src/inc.c: fixed a bug that caused multiple gtk_main() event loop + if `Check new mail on startup' was set. + +2000-06-06 + + * src/compose.c: fixed a probrem that had been unable to insert + a file to the current cursor position. + +2000-06-06 + + * version 0.3.14 + + * src/compose.[ch]: added `attach' button to the toolbar. And + replaced the icon of `insert' to the new one. + +2000-06-05 + + * src/mainwindow.[ch]: added `Execute' to the toolbar. And added + a function main_window_set_toolbar_sensitive() that sets the + sensitivity of the button of the toolbar. + * src/compose.c: fixed a bug that output wrong header if + a return code was included in the string of the text entry. + +2000-06-04 + + * src/mainwindow.[ch]: added `Delete' to the toolbar and the menu. + And added the same items in popup menu to the main menu. + * src/utils.[ch]: added functions for DnD support. + * src/compose.c: implemented file attachment and insertion with DnD + (thanks to Hiramatu). + +2000-06-04 + + * version 0.3.13 + + * src/summaryview.c: fixed a bug that passed null pointer to + is_dir_exist(). + +2000-06-03 + + * src/alertpanel.[ch]: added functions alertpanel_message(), + alertpanel_notice(), and alertpanel_error(), and cleaned up + the code. + * src/folderview.c + src/compose.c + src/addressbook.c + src/summaryview.c + src/summary_search.c + src/prefs_account.c + src/foldersel.c: made them use alertpanel_error(), + alertpanel_warning() or alertpanel_notice() for error message + dialog. + * src/summaryview.[ch]: enable sorting in reversed order. + * src/inc.c: made it show error message dialog when failed to + connect or authorize. + * src/utils.h: added a macro FILE_OP_ERROR() and replaced many + perror() with it. + +2000-06-03 + + * version 0.3.12 + + * src/compose.c: fixed a bug that didn't save a message to outbox + when queued. + * src/send.c: send_message_queue(): fixed a bug that included + headers for queueing in the parsed data. + * src/mainwindow.c: send_queue_cb(): made it pop statusbar message + and update queue folder when finished. + +2000-06-02 + + * version 0.3.11 + + * src/filter.c + src/inc.c + src/compose.c: suppressed the warning messages. + * src/mainwindow.[ch]: added next unread message button and menu + items. + * src/summaryview.[ch]: added a function summary_select_next_unread() + that selects and opens next unread message. + +2000-06-01 + + * src/prefs_common.[ch]: added a setting to decide whether to open + unread message on entering a folder. + * src/summaryview.c: made it open the first unread message only if + the preference is set. + * src/compose.c: fixed a bug that freed the string obtained from + GtkEntry. + +2000-05-31 + + * src/compose.c: added `Send later' to the menu and the toolbar + which queues the message to send it later. + +2000-05-30 + + * src/mainwindow.c: added an interface to resend the queued message. + * src/compose.c: made it show alert dialog when a message will be + queued. + +2000-05-29 + + * src/procmsg.[ch]: added function procmsg_send_queue() that calls + send_message_queue() for each queued messages. + +2000-05-28 + + * src/inc.c: inc_drop_message(): modified so that it drops a message + to the default inbox folder if destination folder doesn't exist. + * src/compose.[ch]: added imput compatible queueing header to the + queued message. + * src/send.[ch]: added function send_message_queue() that send + queued message. + +2000-05-27 + + * configure.in + acconfig.h: made it enabled to decide wheter to use multithread + or not on configure. + * src/summaryview.c: fixed a bug that made thread when executed + despite of the setting (thanks to Hiroshima). + * src/socket.[ch]: changed the return value of public + sock_connect_*() function to the pointer to SockInfo object. + * src/procmime.c: procmime_scan_mime_header(): + fixed a bug that returned NULL if the scanned part had no header + (thanks to shigeri). + * src/procmime.[ch]: + added function procmime_scan_content_disposition() that parses + Content-Disposition header field. + * src/mimeview.c: made it uses filename value in Content-Disposition + header. + * src/pop.c + * src/inc.c: modified so that password is prompted if the password + on preferences is empty and previous POP3 session has failed on + authorization. + +2000-05-23 + + * src/socket.[ch]: added non-blocking IO mode socket and + multithreaded connection support. + * src/inc.c: supported multithread connection. + +2000-05-22 + + * src/folderview.c: made the focus of SummaryView grabbed when + a folder is selected only if the messages exist. + +2000-05-20 + + * version 0.3.10 + + * po/ja.po: fixed a bug that head `/' of a menu label was missing + and caused segmentation fault when opened Compose window. + +2000-05-20 + + * version 0.3.9 + + * src/utils.c: get_domain_name(): modified so that it uses + gethostname(). + * src/mimeview.c: added key binds for `Save as' and + `Display as text'. + +2000-05-19 + + * src/recv.c: fixed a bug that failed to return error value + when fputs() failed and caused the loss of received mails when + disk space was not left (thanks to Tajiri). + * src/compose.c: supported Reply-To. + * src/mimeview.c: improved key operation interface. + +2000-05-18 + + * src/mimeview.[ch] + src/procmime.[ch] + src/textview.[ch]: supported nested multipart message and + clean up the codes. + Supported encapsulated RFC822 message. + +2000-05-16 + + * src/compose.[ch]: made it free the alloc'd memory for attach + information when the compose window is destroyed. + Placed the attachment list and the text widget onto the paned + widget. + Enabled cut/copy/paste/select all on all of the editable widgets. + Implemented removal of attached file and popup menu on attachment + list. + * src/prefs_common.[ch]: added signature separator setting. + * src/alertpanel.[ch]: added a function alertpanel_warning(). + +2000-05-14 + + * src/prefs_common.[ch] + src/textview.c: made open URI command customizable. + * src/compose.[ch]: implemented multipart MIME message composition + (attachment of file). + * src/textview.c + src/compose.c: fixed a bug that didn't turn off the GTK+ theme + engine again. + +2000-05-13 + + * version 0.3.8 + + * src/summaryview.c: added key binds for composing message + (w, a, A, f). Also added other key binds (y, D, Q). + * src/compose.c: made Cc entry take over the Cc of the replied + message. + * src/pixmaps/new.xpm + src/pixmaps/unread.xpm: replaced pixmap image. + * src/procheader.c: procheader_date_get_localtime(): + changed the single figures of year from four to two. + +2000-05-12 + + * src/inc.c: made it ask password if it is not specified on account + preferences. + * src/prefs_account.h: added member tmp_pass to struct PrefsAccount + that preserves the temporary password. + * src/inputdialog.[ch]: added function input_dialog_with_invisible() + that prompts input with the string hidden. + +2000-05-11 + + * src/compose.c: fixed a bug that didn't turn off the GTK+ theme + engine if message font wasn't specified. + +2000-05-10 + + * version 0.3.7a + + * src/summaryview.c: fixed a bug that stderr was forgotten on + fprintf(). + +2000-05-10 + + * version 0.3.7 + + * src/pop.c: fixed a problem that if some POP3 commands returned + error, the previous operations were all cancelled. + * src/compose.c + src/textview.c: made workaround to the slow down of GtkText widget + when using Pixmap theme or its derivatives. + +2000-05-08 + + * src/inc.c: fixed a bug that caused X IO error when exec'd + nonexistent program. + +2000-05-07 + + * src/folderview.[ch]: added the member `mtime' to the struct + FolderInfo. + * src/summaryview.c: made the mtime of the folder checked that is + going to open. + * src/procmsg.c: added filesystem unchecking mode. + +2000-05-05 + + * src/textview.[ch]: implemented clickable URI (thanks to BONAIM). + And made `X-Mailer:' header emphasized if it contains `Sylpheed'. + +2000-05-04 + + * src/summaryview.c: summary_write_cache(): permission fix of + cache file. + +2000-05-04 + + * version 0.3.6a + + * src/headerview.c: added headerview_clear() method. + * src/messageview.c: fixed a bug that didn't clear HeaderView + on messageview_clear(). + +2000-05-04 + + * version 0.3.6 + + * src/messageview.c + src/textview.c: added *_clear() method. + * src/summaryview.c: made it clear MessageView when new folder + is open. + +2000-05-03 + + * src/inc.c: fixed a bug that went to the inbox that was specified + by each account when incorporating from all accounts. + * src/compose.c: made it confirm whether to discard the message or + not when the window will be closed. + +2000-05-03 + + * version 0.3.5 + + * src/pop.[ch] + src/inc.[ch]: re-supported APOP authentication. + * src/prefs_account.c: fixed a bug that had't saved protocol type. + * src/socket.h + src/statusbar.h: attached G_GNUC_PRINTF() to printf() like + functions. + * src/progressdialog.[ch]: changed the name of class from Progress + to ProgressDialog. + +2000-05-02 + + * src/summaryview.c: fixed a bug that caused segmentation fault + a news folder was selected without using ja message catalog. + * src/utils.h: attached G_GNUC_PRINTF() to printf() like functions. + * src/Makefile.am: added `-DG_LOG_DOMAIN=\"Sylpheed\"' to + INCLUDES. + +2000-05-01 + + * src/automaton.[ch] + src/inc.[ch] + src/pop.[ch]: re-implemented POP3 fetching routines using + finite-state automaton model (thanks to Hiramatu). + * src/inc.c: fixed a bug that caused unwilled quitting of program + when connection to mail server failed. And fixed a memory leak bug. + * src/summaryview.c: made the focus move to FolderView when left + cursor key is pressed. + +2000-04-30 + + * src/textview.c: textview_write_line(): modified quotation + discerning routine a bit. + +2000-04-29 + + * version 0.3.4 + + * src/procmime.[ch]: moved MIME decorder from src/textview.c to + src/procmime.c. + * src/mimeview.[ch]: implemented saving of multipart message. And + supported MIME encoded file name. + * src/summaryview.c: implemented `Save as'. + +2000-04-28 + + * src/prefs_common.[ch]: implemented an interface for setting the + display item of SummaryView. + * src/addressbook.c + src/account.c: made the column titles of those don't take key + focus. + +2000-04-26 + + * src/textview.c: implemented BASE64 decoding and display. + +2000-04-25 + + * src/prefs_common.[ch]: added members which decide whether + each item of SummaryView is displayed or not. + * src/headerwindow.c + src/logwindow.c: made those windows closed when escape key is + pressed. + * src/headerview.c: disused ScrolledWindow. + * src/base64.c: from64tobits(): modified so that it recognize '\n' + as the last of line as well as '\r'. + +2000-04-24 + + * src/headerview.c: disabled word wrap and line wrap of the text + widget. + +2000-04-24 + + * version 0.3.3 + + * src/prefs_common.c: prefs_assort_create(): added some headers + to the default headers for assortment. + +2000-04-23 + + * src/procmsg.c: fixed a bug that caused segmentation fault if + the permission of a message was denied on parsing the header + (thanks to wakai@UEC univ.). + * src/mimeview.c: made it pass key press event to SummaryView. + +2000-04-21 + + * src/main.h + src/alertpanel.c: modified font specifications so that they match + to better fonts. + * src/utils.[ch]: added wide-character functions for FreeBSD support. + Added the existence check of . + * acconfig.h + configure.in: added wint_t and libxpg4 check for FreeBSD support. + * src/unmime.c: modified so that it checks the existence of + . + Above three are a contribution from Sasaki. Thanks! + +2000-04-18 + + * src/main.h: decreased default height of window. + +2000-04-17 + + * src/procmime.c: fixed a bug that eliminated the parenthesis in + attribute value that was double-quoted. + +2000-04-15 + + * version 0.3.2 + + * src/mimeview: implemented multipart message parser and display. + * src/procmime.c: procmime_scan_content_type(): + supported multiple elements. + * src/textview.c: supported multipart message and clean up the code. + +2000-04-14 + + * src/summaryview.c: added size column and sorting by size. + * src/mainwindow.c: added `Sort by size' to sort menu. + * src/procmime.c: fixed a bug that caused buffer overrun and + segmentation fault. + * src/procmime.c: generalized Content-Type parsing. + +2000-04-13 + + * version 0.3.1 + + * src/textview.c: supported MIME headers and + Content-Transfer-Encoding: quoted-printable. + +2000-04-12 + + * src/messageview.[ch] + src/textview.[ch]: separated MessageView into two classes. + * src/procmime.[ch]: added for MIME message handling. + +2000-04-11 + + * src/mimeview.[ch]: added for MIME message handling. + * configure.in: added wctype.h and wchar.h existence check. + +2000-04-10 + + * src/procmsg.[ch] + src/procheader.[ch]: some code cleanups. + * src/messageview.[ch]: integrated HeaderView. + +2000-04-09 + + * version 0.3.0 + +2000-04-08 + + * src/addressbook.c: Made the tree sorted when folder/group is + added or edited. + * src/xml.c: xml_compare_tag(): fixed a bug that caused segmentation + fault if the current tag was empty. + * src/mainwindow.c: made the state of MainWindow saved. + +2000-04-08 + + * version 0.3.0pre1 + + * src/addressbook.c: fully implemented address group editing. + Fixed a bug that wrongly confirmed deletion of address when + escape key was pressed on alert dialog. + +2000-04-07 + + * src/addressbook.c: added menu bar. And enabled hierarchical + folder. + * src/prefs_account.c: modified so that it allows not to specify + pop server. + * src/inc.c: inc_account_mail(): modified so that if receiving + server isn't specified, it does nothing. + +2000-04-05 + + * version 0.2.9 + + * src/addressbook.c: almost fully implemented addressbook functions. + +2000-04-04 + + * src/compose.c: fixed a bug that caused segmentation fault when + `File->Insert file' was selected more than twice. + +2000-04-03 + + * version 0.2.9pre4 + + * src/addressbook.[ch]: implemented creation of new folder and group, + and deletion of folder and group. And fully implemented + addressbook_delete_object() which deletes the specified object + recursively. + +2000-04-02 + + * src/addressbook.c: implemented registration of address and multiple + appending to Compose address entry. + * src/menu.[ch]: added a function menu_set_insensitive_all() that + turn all menu items insensitive. + * src/folderview.c: some code cleanup. + +2000-04-01 + + * src/account.c + src/prefs_common.c: fixed a bug on getting the number of CList + rows. + +2000-03-30 + + * version 0.2.9pre3 + + * src/folderview.c: fixed a bug that caused warnings when tree was + expanded/collapsed on the first operation. + +2000-03-29 + + * src/addressbook.c: addressbook_list_selected(): made it be able + to handle multiple address. + * src/compose.c: modified so that when Bcc: is toggled, corresponding + AddressBook also toggle it. + * src/mainwindow.c: + main_window_create(): moved gtk_widget_set_uposition() before + gtk_widget_show() so as not to cause window flickering. + main_window_get_position(): replaced gdk_window_get_position() + with gdk_window_get_root_origin() to acquire correct window + position (Thanks to shigeri for these modifications). + +2000-03-27 + + * src/filesel.c: made it selects home directory on the first time + it is called. + +2000-03-26 + + * src/utils.c: conv_mb_alnum(): modified so that it uses character + conversion table. + * src/foldersel.c: made the folder tree take focus when the dialog + is shown. + +2000-03-26 + + * version 0.2.9pre2 + + * src/addressbook.c: implemented addressbook_export_to_file() and + related functions. + +2000-03-25 + + * src/xml.[ch] + src/addressbook.c: fixed the variable name for attribute. + * src/prefs_common.[ch]: added a member `conv_mb_alnum'. + * src/utils.[ch]: added conv_mb_alnum() that converts multi-byte + alphabet and numeric into single-byte one. + * src/messageview.c: messageview_show(): made it pass conv_mb_alnum() + when conv_mb_alnum flag is on. + +2000-03-25 + + * version 0.2.9pre1 + + * src/compose.c: modified so that when Addressbook is open by a + Compose and it is closed, target of Addressbook is reset. + * src/addressbook.c: made it work with Compose. + +2000-03-24 + + * configure.in: AM_PATH_{GLIB, GTK}: raised the required version of + GTK+ and GLIB to 1.2.6. + * src/xml.[ch]: more implementation of XML parser. + * src/addressbook.c: implemented addressbook parsing and displaying + routine. + +2000-03-21 + + * src/folderview.c: folderview_scan_folder(): modified so that if + a folder's message number is zero, set new, unread and total number + to zero. + +2000-03-20 + + * src/xml.[ch]: added for XML handling used by addressbook. + * src/folderview.c: modified so that Trash folder is skipped + when an unread folder is selected automatically by space key. + +2000-03-18 + + * src/summaryview.c: fixed a bug that cursor was turned into watch + forever when a newsgroup was selected. + +2000-03-18 + + * version 0.2.8 + +2000-03-17 + + * src/mainwindow.[ch]: implemented counting on setting cursor + type. And modified the menu of `thread view' and `unthread view'. + * src/summaryview.c: enabled thread-toggling on opening folder. + * src/prefs_common.[ch]: added a member `enable_thread' to determine + whether summary view builds thread or not when a folder is open. + +2000-03-15 + + * src/summaryview.c: modified popup sensitivity function a bit. + +2000-03-13 + + * version 0.2.7 + + * src/addressbook.[ch]: more implementation of the interface of + addressbook. + * src/compose.c: connected to addressbook object. + * src/folderview.[ch]: folderview_compare_path(): + modified so that absolute path is correctly compared. + And added folderview_select_node(). + And modified folderview_scan_folder() so that it update the summary + when asked. + * src/import.c: made it update folder tree when imported mbox. + * src/summaryview.c: modified according to the changes of + folderview.c. And modified so that it display alert dialog if + source folder is identical to destination. + added summary_set_popup_sensitive() that set the sensitivity of + popup menu according to the context. And made all of the items of + popup menu insensitive when summary is cleared. + * src/procmsg.c: procmsg_move_messages_with_dest(): + modified so that if source folder is identical to destination, + abort its process. + * src/summary_search.c + src/manage_window.c: modified so as not to print warning to console + when alert dialog appeared twice. + * src/filesel.c: made file selection dialog transient. + +2000-03-11 + + * src/manage_window.[ch]: added callback function + manage_window_focus_out(). + * src/account.c + src/inputdialog.c + src/mainwindow.c + src/prefs_account.c + src/prefs_common.c + src/summary_search.c: added focus_out_event signal handler. + * src/addressbook.[ch]: added preliminary addressbook code. + +2000-03-06 + + * src/utils.h: added a macro Xalloca() that does alloca() and + handles the exception. + * src/import.c: made the import dialog transient window and enabled + cancelling by escape key. + +2000-03-04 + + * version 0.2.6 + + * src/compose.c: fixed a bug that caused memory leak when compose + window was closed. + +2000-03-03 + + * src/nntp.h: increased NNTP message buffer size for XOVER strings + which is too long. + +2000-02-28 + + * src/summaryview.c: binded step-forward and step-backward to each + Control-n and Control-p. + * src/filter.c: filter_read_str(): fixed a memory leak bug and + replaced g_malloc() for allocating the buffer with alloca(). + * src/procheader.c: procheader_get_fromname(), + procheader_date_get_localtime() + src/utils.c: conv_euctojis() + src/compose.c: compose_quote_parse_fmt() + src/prefs.c: prefs_set_data_from_text() + prefs_set_text(): replaced g_malloc() with alloca(). + +2000-02-26 + + * version 0.2.5 + + * src/logwindow.c: improved log_window_append() so that it shows + warning, error and normal message with different colors. + * src/utils.[ch]: added functions log_message(), log_warning(), and + log_error() that show normal message, warning, and error for each. + And modified many warning messages to use these. + * src/messageview.c: messageview_init(): made it set colors of + quotation and URI to black when failed to allocate colors. + * src/news.c: news_parse_xover(): replaced g_malloc() for allocating + the buffer with alloca(). + +2000-02-25 + + * src/folderview.c: fixed a bug that didn't put previously selected + folder name in text entry. In addition to that, made some + modifications. + +2000-02-24 + + * version 0.2.4 + + * src/logwindow.[ch]: added log window that displays protocol log. + * src/about.c: adjusted the size of dialog. + * src/folderview.c: made it select a folder when double-clicked. + +2000-02-23 + + * src/prefs_common.[ch]: added an item `translate_header' that + decides whether header name like `From:' or `Subject:' is + translated or not. + * src/compose.c: made it show alert dialog when receiptor isn't + entered. + * src/inc.c: some code cleanups. + +2000-02-22 + + * version 0.2.3 + + * src/compose.c: made header entries move those focus to next + entry or text widget when activated. And sorted out the menu items. + * src/mainwindow.[ch] + src/prefs_common.[ch] + src/main.c: made it save the sizes of widgets and the position of + window when quitting. + * src/prefs_common.c: set a14, k14 fontset as default message font. + * src/about.c: changed the appearance of about dialog using text + widget and so on. + * src/recv.c: modified recv_write() so that it converts an escaped + From_ line. + +2000-02-20 + + * version 0.2.2 + + * src/compose.[ch]: supported Bcc. + +2000-02-19 + + * version 0.2.1 + + * src/utils.[ch]: added function to_number() that examines string + and if that is a number string, return its value. + * src/procmsg.c: fixed a bug that caused malfunction when non-digit + character was included in file name. + +2000-02-18 + + * version 0.2.0 + + * src/folderview.c: fixed a bug that caused segmentation fault + when opened folder node was deleted (thanks to Hiramatu). + And implemented folderview_rm_server_cb() which removes news server. + * src/mbox.c: modified a warning message. + +2000-02-13 + + * version 0.2.0alpha-pre8 + + * src/mainwindow.c: inc_all_account_mail_cb(): made it select inbox + folder to prevent the probrem when current folder is updated. + * src/summaryview.c: summary_execute(): made it write to summary + cache when executed. + +2000-02-12 + + * version 0.2.0alpha-pre7 + + * src/utils.[ch]: added path_cmp() that compares two paths ignoring + trailing directory separator. + * src/folderview.[ch] + src/summaryview.[ch]: modified so that folder tree is updated + when messages are moved or deleted. + * src/inc.c: some code cleanup. + +2000-02-11 + + * version 0.2.0alpha-pre6 + + * src/utils.[ch]: added get_domain_name() that return domain + name as a static string. + * src/compose.c: compose_generate_msgid(): modified so that even + if current address doesn't contain '@', it generates a decent + message ID. + * src/send.c: some code cleanup. + +2000-02-10 + + * src/folderview.c: modified the behavior of folder tree when + the folder is right-clicked. + * src/compose.c: compose_encode_header(): added irresponsible + buffer overrun check. + +2000-02-09 + + * version 0.2.0alpha-pre5 + + * updated gettext and libtool. + * configure.in: modified localedir definition so that message + catalogs are installed into correct directories. + * src/folderview.c + src/mainwindow.c: modified them so that a folder can be reopen + even if it is currently open. + * src/prefs_common.[ch] + src/messageview.c: added an option that toggle the coloration of + message. + +2000-02-08 + + * version 0.2.0alpha-pre4 + + * src/mainwindow.c + src/messageview.c: fixed a bug that broke memory on allocating + colors. + +2000-02-07 + + * src/folderview.c: some bug fixes on selecting folder. + +2000-02-07 + + * version 0.2.0alpha-pre3 + + * src/folderview.c + * src/summaryview.[ch]: some code cleanups. + * src/messageview.c: fixed a color allocating bug (maybe). + +2000-02-06 + + * version 0.2.0alpha-pre2 + + * src/folderview.[ch]: made folder view not open selected folder + unless return or space key is pressed, or clicked by mouse + button 1 or 2. + * src/inc.c: some code cleanups. + * TODO.jp: added some items. + +2000-02-05 + + * version 0.2.0alpha-pre1 + + * src/summaryview.[ch]: fixed a bug that broke summary thread + when deleted duplicated messages (thanks to BONAIM). + And some code cleanup. + * src/procmsg.[ch]: renamed procmsg_move_messages() to + procmsg_move_messages_with_dest(), and replaced former with + new function which doesn't specify destination. + * src/prefs_common.c + src/gtkutils.c: some memory leak fixes of linked lists. + * src/utils.[ch]: added list_remove_all() to remove all elements + of doubly-linked list. + * src/inc.[ch]: added inc_all_account_mail() that incorporates + new messages of all accounts. + * src/account.[ch]: added account_foreach() to process each accounts. + * added TODO.jp + +2000-02-04 + + * version 0.1.23alpha + + * src/inc.c: made the folder tree update the message number + when incorporated new messages. + * src/folderview.[ch]: added a function folderview_scan_folder() + to scan one folder on the view, which is specified by folder name. + +2000-02-02 + + * version 0.1.22alpha + + * src/prefs_account.[ch]: added the setting of assorting on + receiving. + * src/inc.c: supported assorting on receiving. + * src/procmsg.c: cleaned up the code. + * src/news.c: fixed a bug that locked up when failed to get xover. + * src/compose.c: made a message unmark that is put into specific + folders. + +2000-02-01 + + * version 0.1.21alpha + + * src/folderview.c + src/summaryview.c: implemented the function 'go to next folder + when no unread message found.' + * src/summaryview.c: made connection state displayed on the + status bar when connecting to a news server. + * src/compose.c: changed X-Mailer: header field string a bit. + * src/prefs_common.c: implemented residual functions of assortment. + +2000-01-31 + + * version 0.1.20alpha + + * src/prefs_common.c: implemented reading/writing/register/deletion + of assortment setting. + * src/mainwindow.c: slightly modified the appearance of statusbar. + * src/account.c: account_delete(): fixed a bug that didn't assigned + the pointer to GList when an account was deleted. + +2000-01-29 + + * src/procmsg.c: procmsg_get_mark_sum(): fixed a bug that failed + to read mark file (thanks to BONAIM). + * src/prefs_common.c: added the interface of assortment setting. + +2000-01-28 + + * src/summaryview.c: fixed a bug that didn't redraw marking properly + when displaying an unread message with left-click (thanks to + shigeri). + +2000-01-27 + + * src/summaryview.[ch]: added functions for assortment. + * src/about.c: added a button to close window. + +2000-01-26 + + * src/procmsg.c: fixed a bug that didn't add news flag correctly. + * src/compose.c: fixed a bug that can't reply to a news article. + * src/filter.[ch]: added for message filtering. + * src/procheader.[ch]: added procheader_get_unfolded_line() + to process filtering. And added procheader_get_header_list() + that reads headers of a message and store them on the memory, + and procheader_header_list_destroy() that removes all headers + read by procheader_get_header_list(). + +2000-01-25 + + * version 0.1.19alpha + + * src/news.c: modified so that it retrieves only overview information + that is not yet cached. + * src/procmsg.[ch]: modified for news handling. + +2000-01-24 + + * src/news.c: supported xover. + * src/mbox.c: fixed a bug that didn't handle empty line correctly + (Thanks to shigeri). + +2000-01-23 + + * version 0.1.18alpha + + * src/procmsg.[ch]: modified some functions so that they can + handle news folder. + * src/news.c: added header cache routine. + * src/procheader.c: fixed a bug that caused memory leak when some + header was duplicated. + And added Newsgroups: in parsing headers. + * src/summaryview.c: added news article cache routine. + * src/compose.c: made it be able to reply/forward news article. + +2000-01-22 + + * src/compose.c: fixed a bug that failed to parse To: header + if a comma is included in double quotation (Thanks to shigeri). + * src/mbox.c: modified the code for processing mbox so that it + can handle unescaped From_ line correctly. + +2000-01-21 + + * version 0.1.17alpha + + * src/foldersel.c: fixed a bug that didn't display folder tree. + And added the register routine for news server and group setting. + +2000-01-20 + + * version 0.1.16alpha + + * src/statusbar.[ch]: added statusbar_puts_all(). + statusbar_puts(): made it truncate a string that is too long. + * src/folderview.[ch]: changed CTree's row data from string + to FolderInfo structure. + And implemented popup menu that registers news server and group. + * src/messageview.c: modified short header display routine. + +2000-01-19 + + * added src/news.[ch] for NetNews session management. + * src/summaryview.[ch]: added NetNews reading codes. + +2000-01-18 + + * src/mainwindow.c + src/prefs_common.[ch]: made them preserve toolbar style. + * src/main.c: made it save configuration before exiting. + * src/summaryview.c: modified summary status display routine. + * added src/nntp.[ch] for handling low level NNTP session. + +2000-01-17 + + * added src/progress.[ch] for displaying progress. + * src/inc.c: modified progress dialog routines to use + src/progress.[ch]. + * src/folderview.[ch]: added preliminary NetNews supporting code. + +2000-01-16 + + * version 0.1.15alpha + + * src/main.c + src/folderview.c: some permission fixes. + * src/folderview.c: implemented folder creation/renaming/removing. + * src/utils.[ch]: added remove_dir_recursive() that removes + a directory recursively. + +2000-01-15 + + * src/mainwindow.[ch]: added toolbar style selection. + * added src/inputdialog.[ch] to prompt user to enter a string. + * src/summaryview.[ch]: modified the behavior of view on + normal mode. + * src/mbox.c: fixed a bug that couldn't lock file when + lockf() was used (Thanks to shigeri). + +2000-01-14 + + * version 0.1.14alpha + + * src/mainwindow.[ch]: changed the appearance of toolbar. + And fixed window handling. + * src/summaryview.c: modified the messages displayed on status bar. + * src/compose.[ch]: added toolbar. + * src/*.xpm: borrowed some icons from gnome-libs (temporary). + +2000-01-13 + + * version 0.1.13alpha + + * src/summaryview.c: fixed a bug of threading. And some code + cleanups. And rewrote the routine of deleting duplicated messages + using hash table. + * src/mainwindow.[ch]: added toolbar. + +2000-01-12 + + * version 0.1.12alpha + + * src/summary_search.c: if the OS don't have wcsstr(), use wcswcs() + instead. + * src/summaryview.c: changed CTree creating routine as it creates + thread on the fly for speeding up. + * src/procmsg.c: rewrote message processing routines using hash + table for speeding up. It should be considerably faster than + before. + +2000-01-11 + + * version 0.1.11alpha + + * po/ja.po: modified msgstr for Solaris standard gettext. + * src/main.c: added config.h inclusion. + * src/compose.c: changed to add replied message's In-Reply-To + message id to References header if it don't have References header. + * src/summaryview.c: changed threading routine to use hash table + for speeding up. + +2000-01-11 + + * version 0.1.10alpha + + * po/ja.po: modified msgstr so as not to core dump on Solaris. + * src/main.c: added inclusion of locale.h. + (Thanks to Sato for above.) + * src/mbox.c + * src/socket.c: applied Solaris patch by shigeri with some + modification. (Thanks!) + +2000-01-10 + + * version 0.1.9alpha + + * src/compose.c: compose_encode_header(): fixed some bugs. + And modified header generating routines to support proper + References header, and supported Organization header. + * src/procmsg.[ch] + src/procheader.c: removed Cc: and Reply-To: from cache data. + * src/procheader.[ch]: renamed header list structure to HeaderEntry. + * src/summaryview.[ch]: summary_thread_func(): some optimization. + And added summary_pass_key_press_event() to pass key press event + from other widgets. + * src/messageview.c: messageview_key_pressed(): modified so that + key event is passed to summary view even if message view is + separated. (Thanks to wakai@UEC univ. for pointing this out.) + +2000-01-09 + + * version 0.1.8alpha + + * src/compose.c: implemented RFC1522, RFC2407 (loosely) compliant + header MIME encoding. + * src/procheader.c: some bug fixes of folded header line processing. + * src/headerview.c: headerview_show(): some bug fixes. + +2000-01-07 + + * version 0.1.7alpha + + * src/utils.c: conv_euctojis(): fixed a bug that didn't add + kanji-out sequence [ \033 ( B ] when input string was ended + with kanji. (Thanks to Nozomu Kobayashi for pointing this out.) + * src/compose.c: compose_encode_header(): changed as it outputs + encoded string to another buffer. + And implemented a faculty to save sent message to outbox and + to queue message that failed to send (preliminary). + And, finally implemented proper To: and Cc: processing :) + * src/folderview.c: added preliminary right-clicking popup menu + for operating folders. + * some permission fixes at creating or copying file. + +2000-01-07 + + * version 0.1.6alpha + + * src/procheader.c: fixed a bug that didn't null-terminate + header list and caused segmentation fault. + +2000-01-06 + + * version 0.1.5alpha + + * src/procheader.[ch]: added function procheader_get_one_field() + that gets one header field that matches the header list. + And removed procheader_get_unfolded_line(), which is less generic. + And rewrote procheader_get_header_fields() using + procheader_get_one_field(). + * src/summaryview.c: some bug fixes of key input scan routine. + * README, README.jp: modified documents a bit. + +2000-01-05 + + * src/menu.c: menu_set_sensitive(): fixed a bug that if a menu item + had a submenu, set sensitivity of the submenu, not the item. + +2000-01-05 + + * version 0.1.4alpha + + * src/summaryview.c: fixed a bug that caused segmentation fault + when empty summary view was center-clicked. + And fixed a bug that freed moving folder strings when marked + as unread. + If current folder is trash, don't delete message. + * src/summaryview.[ch] + * src/mainwindow.c + * src/procmsg.[ch]: added update-cache mode (discards previous cache). + +2000-01-04 + + * src/procheader.[ch]: more optimization of header processing + routine. And added a new function procheader_get_header_fields() + that receives an array of header name as a parameter and + set header bodies. + * src/utils.[ch]: added remove_return() for removing return code. + * src/unmime.c: added remove_return() on the last of UnMimeHeader(). + +2000-01-03 + + * src/compose.c: if message body is ascii only, set US-ASCII as + charset in Content-Type. + * src/main.[ch] + * src/prefs.c + * src/prefs_common.c + * src/prefs_account.c + * src/account.c: changed the location of rc files. + * src/account.c: enabled closing window when escape key is pressed. + +2000-01-02 + + * version 0.1.3alpha + + * src/compose.c: fixed a bug that caused segmentation fault + when sending failed. + And relocated header-generation routines from src/send.c. + * src/send.c: moved header-generation routines to src/compose.c. + * src/prefs.c: added '~' to home directory expansion. + * src/prefs_account.[ch]: added signature file path configuration. + * src/prefs_common.[ch]: added spool path configuration. + * src/inc.c: changed the method of user name acquisition to use + g_get_user_name(). + +2000-01-01 + + * version 0.1.2alpha + + * added ChangeLog (this file), ChangeLog.jp. + * some code cleanups. + * added manage_window.[ch] for transient window management. + * src/procheader.c: optimized header processing routine a bit. + * src/send.c: fixed exception handling on connection. + * src/inc.c: added exception handling on getting user name. + +2000-01-01 + + * version 0.1.1alpha + + * src/send.c: fixed a bug that didn't add Content-Type: header. + +2000-01-01 + + * version 0.1.0alpha + + * initial release. diff --git a/ChangeLog.jp b/ChangeLog.jp new file mode 100644 index 000000000..7fab23f65 --- /dev/null +++ b/ChangeLog.jp @@ -0,0 +1,3145 @@ +2001-04-19 + + * src/prefs_common.[ch]: ÀßÄê¹àÌܤòºÆ¹½À®¤·¡¢¥á¥Ã¥»¡¼¥¸¥¿¥Ö¤òÄɲᣠ+ * src/main.c: parse_cmd_opt(): ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó --version + ¤òÄɲᣠ+ * src/mh.c: ÆÃÊÌ¥Õ¥©¥ë¥À¤Ë°ÜÆ°/¥³¥Ô¡¼¤·¤¿¤È¤­¤Ï MSG_DELETED ¥Õ¥é¥° + ¤ò³°¤¹¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch] + src/headerview.[ch]: ¥Ø¥Ã¥À¥Ú¥¤¥ó¤ò¥È¥°¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch] + src/textview.c: ¥Ú¡¼¥¸¥¹¥¯¥í¡¼¥ëñ°Ì¤ò1¥Ú¡¼¥¸¤ÈȾ¥Ú¡¼¥¸¤ÇÀÚÂؤ¨ + ¤é¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/mbox.[ch]: ¥Õ¥©¥ë¥ÀÃæ¤ÎÁ´¥á¥Ã¥»¡¼¥¸¤òÆɤ߹þ¤ß¡¢¤½¤ì¤é¤ò°ì¤Ä¤Î + mbox ¥Õ¥¡¥¤¥ë¤ËÊݸ¤¹¤ë export_mbox() ¤òÄɲᣠ+ +2001-04-18 + + * src/prefs_filter.[ch]: ¿¶¤êʬ¤±ÀßÄê¤Î¥³¡¼¥É¤ò prefs_common.c + ¤«¤éʬΥ¤·¡¢Ê̸ĤΥÀ¥¤¥¢¥í¥°¤Ë¤·¤¿¡£ + +2001-04-17 + + * version 0.4.64 + + * src/automaton.[ch] + src/inc.c: ¿·Ãå¥á¡¼¥ë¤Î¼õ¿®Ãæ¤Ë¥­¥ã¥ó¥»¥ë¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤·¤¿ + ¤È¤­¤Ë Sylpheed ¤¬¥¯¥é¥Ã¥·¥å¤¹¤ë¥Ð¥°¤ò½¤Àµ(Sergey Vlasov ¤µ¤ó + thanks)¡£ + * src/xml.c: xml_build_tree() + src/addressbook.c: ÉÔÀµ¤Ê XML ¥Õ¥¡¥¤¥ë¤¬Í¿¤¨¤é¤ì¤¿¤È¤­¤Ë̵¸Â + ¥ë¡¼¥×¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2001-04-16 + + * src/summaryview.c + src/inc.c: ¡Ö¿·Ãå¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¸å¼õ¿®È¢¤Ë°ÜÆ°¤¹¤ë¡×¥ª¥×¥·¥ç¥ó + ¤¬¥ª¥Õ¤Ë¤Ê¤Ã¤Æ¤¤¤¿¾ì¹ç¤ÎÌäÂê¤ò½¤Àµ¤¹¤ë Sergey Vlasov ¤µ¤ó¤«¤é¤Î + ¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + +2001-04-15 + + * src/xml.[ch]: ¥¨¥¹¥±¡¼¥×¤µ¤ì¤ëɬÍפΤ¢¤ë¥­¥ã¥é¥¯¥¿¤È¡¢Ê£¿ô¹Ô¤Ë + ¤ï¤¿¤ë¥¿¥°¤ËÂбþ¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/folder.c + src/addressbook.c: '<', '>', '&', ''', '"' ¤Î¤è¤¦¤Ê¥­¥ã¥é¥¯¥¿¤ò + ¥¨¥¹¥±¡¼¥×¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2001-04-10 + + * version 0.4.63 + + * src/folder.[ch] + src/mainwindow.c + src/mh.[ch] + src/procmsg.[ch] + src/summaryview.[ch]: MH ¥Õ¥©¥ë¥À¤Ë¥á¥Ã¥»¡¼¥¸¤Î¥³¥Ô¡¼¤ÎÁàºî¤ò + Äɲ乤ë Darko Koruga ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + * src/imap.c: ¥¹¥é¥Ã¥·¥å¤«¤é¥É¥Ã¥È¤Ø¤ÎÊÑ´¹¤ò̵¸ú¤Ë¤·¤¿¡£ + * src/imageview.c: ²èÁü¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤¿¤È¤­¸Å¤¤²èÁü¤òɽ¼¨ + ¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ(Darko Koruga ¤µ¤ó thanks)¡£ + +2001-04-09 + + * src/procmsg.c: procmsg_read_cache(): ¥­¥ã¥Ã¥·¥å¤ÎÆɤ߹þ¤ß®ÅÙ¤ò + ¾å¤²¤ë¤¿¤á¤Ë setvbuf() ¤òÄɲÃ(Sergey Vlasov ¤µ¤ó thanks)¡£ + * src/inc.c + src/summaryview.[ch] + prefs_common.[ch]: ¿·Ãå¥á¡¼¥ë¤ò¼õ¤±¼è¤Ã¤¿¤È¤­¤ËƱ¤¸¥Õ¥©¥ë¥À¤ò + ÊݤĥѥåÁ¤òŬÍÑ(Sergey Vlasov ¤µ¤ó thanks)¡£ + * src/textview.c + src/utils.[ch]: get_quote_level() ¤ò utils.c ¤Ë°ÜÆ°¡£ + +2001-04-08 + + * ac/Makefile.am: Äɲᣠ+ * Makefile.am + configure.in: ac ¥Ç¥£¥ì¥¯¥È¥ê¤òÄɲᣠ+ +2001-04-07 + + * src/summaryview.c: summary_filter(): immediate_exec ¥ª¥×¥·¥ç¥ó¤¬ + »ØÄꤵ¤ì¤Æ¤¤¤¿¤é¥á¥Ã¥»¡¼¥¸¤ò¨ºÂ¤Ë°ÜÆ°¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch] + src/textview.[ch] + src/gtkutils.[ch]: Stephen Anthony ¤µ¤ó¤Î¥á¥Ã¥»¡¼¥¸¿§¥Ñ¥Ã¥Á¤ò + ¤¤¤¯¤é¤«½¤Àµ¤·¤ÆŬÍÑ(thanks!)¡£ + * src/gtksctree.c + src/mimeview.c: MimeView ¤ÎµóÆ°¤ò½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + +2001-04-06 + + * src/utils.c: copy_file() + src/mh.c: ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¤Þ¤¿¤¤¤Ç¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤Ç¤­¤ë¤è¤¦¤Ë + ¤¹¤ë Darko Koruga ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(¤·¤Æ½¤Àµ)(thanks!)¡£ + * src/procheader.c + src/utils.[ch]: ¥á¥Ã¥»¡¼¥¸¤ÎÆüÉÕ¤ò¥í¡¼¥«¥ë»þ´Ö¤ËÊÑ´¹¤¹¤ë + Jorge Van Hemelryck ¤µ¤ó¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + * src/utils.c: remote_tzoffset_sec(): °ìʸ»ú¤Î¥¿¥¤¥à¥¾¡¼¥ó¤ÎÉä¹æ + ¤¬µÕ¤Ë¤Ê¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/folder.c: folder_item_add_msg(): add_msg() ¥á¥½¥Ã¥É¤Ë + assertion ¤òÄɲÃ(¤¿¤«¤Î¤µ¤ó thanks)¡£ + +2001-04-05 + + * src/procmime.c: procmime_decode_content(): quoted-printable ¤Ç + ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤¬ `=00' ¤ò´Þ¤ó¤Ç¤¤¤¿¾ì¹ç¤½¤ì¤ò²õ¤·¤Æ + ¤¤¤¿¥Ð¥°¤ò½¤Àµ(¤È¤ß¤¿¤Þ¤µ¤Ò¤í¤µ¤ó thanks)¡£ + * src/gtksctree.c + src/mimeview.c + src/summaryview.c: MIME ¥Ó¥å¡¼¤Î DnD ¤ÎµóÆ°¤ò½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + +2001-04-04 + + * src/about.c: about ¥À¥¤¥¢¥í¥°¤Î³°´Ñ¤ò½¤Àµ¤¹¤ë Sergey Vlasov ¤µ¤ó + ¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + * src/prefs_common.[ch] + src/rfc2015.[ch] + src/mimeview.c + src/procmime.[ch] + src/compose.[ch] + src/passphrase.c + src/textview.[ch]: sylpheed-win32 branch ¤«¤é port ¤µ¤ì¤¿ GnuPG + Âбþ¥Ñ¥Ã¥Á¤òŬÍÑ(Sergey Vlasov ¤µ¤ó thanks)¡£ + * INSTALL, INSTALL.jp: GnuPG ¤Ë¤Ä¤¤¤Æ¤ÎÀâÌÀ¤ò¹¹¿·¡£ + +2001-04-03 + + * src/utils.[ch]: References ¥Ø¥Ã¥À¤ò¥Ñ¡¼¥¹¤·¡¢¤½¤ì¤òʸ»úÎó¤Î¥ê¥¹¥È + ¤Ë¤¹¤ë references_list_append() ¤òÄɲᣠ+ * src/compose.c: Ť¹¤®¤ë References ¥Ø¥Ã¥À¤òÀÚ¤êµÍ¤á¡¢¥´¥ßʸ»ú¤ò + ºï½ü¤·¡¢¥Ø¥Ã¥À¤òÀ°Íý¤¹¤ë¤è¤¦¤Ë½¤Àµ(Matthias Intemann ¤µ¤ó thanks)¡£ + +2001-04-02 + + * src/addr_compl.c: Alfons Hoogervorst ¤µ¤ó¤Î¥¢¥É¥ì¥¹Êä´°¥Ð¥°½¤Àµ + ¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + +2001-04-01 + + * src/gtksctree.c: tree_select_row ¥·¥°¥Ê¥ë¤¬¼ÂºÝ¤Ë¥«¥é¥à¿ô¤òÅϤ¹ + ¤è¤¦¤Ë½¤Àµ¡£ + * src/summaryview.c: summary_selected(): ÈÆÍÑ¥Þ¡¼¥¯¤È̤ÆÉ¥Þ¡¼¥¯¤ò + ¥«¥é¥à¤Î¥¯¥ê¥Ã¥¯¤Ç¥È¥°¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + summary_mark_row_as_read() ¤È summary_mark_row_as_unread() ¤òÄɲᣠ+ * src/prefs_common.c: Sergey Vlasov ¤µ¤ó¤Î¥ì¥¤¥¢¥¦¥È½¤Àµ¥Ñ¥Ã¥Á¤òŬÍÑ + ¤·¡¢¤¤¤¯¤Ä¤«¤Î GtkEntry ¥¦¥£¥¸¥§¥Ã¥È¤ÎÉý¤òÄ´À°¤·¤¿¡£ + * src/prefs.c: prefs_dialog_create(): ¥Î¡¼¥È¥Ö¥Ã¥¯¤¬¥Õ¥©¡¼¥«¥¹¤ò + ÆÀ¤é¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.c: inc_start(): ǧ¾Ú¥À¥¤¥¢¥í¥°¤Ç¥µ¡¼¥Ð̾¤âɽ¼¨¤µ¤ì¤ë¤è¤¦¤Ë + ½¤Àµ(Sergey Vlasov ¤µ¤ó thanks)¡£ + +2001-03-31 + + * src/mimeview.c: mimeview_key_pressed(): °Û¾ï¤Ê¥Þ¥ë¥Á¥Ñ¡¼¥È + ¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤¿¤È¤­¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò + ½¤Àµ(Sergey Vlasov ¤µ¤ó thanks)¡£ + * src/summaryview.c: summary_display_msg(): MIME ¥ê¥¹¥È¤¬¶õ¤Î¾ì¹ç¤Ï + ¥µ¥Þ¥ê¥Ó¥å¡¼¤Ë¥Õ¥©¡¼¥«¥¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2001-03-30 + + * src/pixmaps/deleted.xpm + src/pixmaps/mark.xpm + src/summaryview.c: ºï½ü¤È¥Þ¡¼¥¯¥¢¥¤¥³¥ó¤òÄɲᣠ+ * src/gtkutils.c: gtkut_widget_init(): gtk_widget_destroy() ¤ò + gtk_widget_unref() ¤ËÊѹ¹¡£ + * src/addr_compl.c: start_address_completion(): ¥¢¥É¥ì¥¹Ä¢¤¬¶õ¤Î + ¤È¤­¤Ë·Ù¹ð¤¬É½¼¨¤µ¤ì¤ë¥Ð¥°¤ò½¤Àµ(Chideok Hwang ¤µ¤ó thanks)¡£ + +2001-03-29 + + * src/summaryview.c: summary_show(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ + (ChiDeok Hwang ¤µ¤ó thanks)¡£ + * src/pixmaps/forwarded.xpm + src/pixmaps/replied.xpm + src/pixmaps/new.xpm + src/pixmaps/unread.xpm + src/compose.c + src/mainwindow.c + src/prefs_common.c + src/procmsg.h + src/summaryview.[ch]: ÊÖ¿®¡¦Å¾Á÷¥Þ¡¼¥¯¤òÊÖ¿®¤Þ¤¿¤ÏžÁ÷¤¹¤ë + ¥á¥Ã¥»¡¼¥¸¤ËÉÕ¤±¤ë Harc Hoper ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + ¤½¤·¤Æ¿·Ã塦̤ÆÉ¥Þ¡¼¥¯¤Ï David Mehrmann ¤µ¤ó¤ÎºîÀ®¤·¤¿¥¢¥¤¥³¥ó + ¤ÇÃÖ¤­´¹¤¨¤é¤ì¤¿(thanks!)¡£ + * src/summaryview.c: ̤ÆÉ¤È MIME ¤ÎÎó¤ÎÉý¤ò¸ÇÄê¤Ë¤·¤¿¡£ + * src/prefs.c: prefs_config_parse_one_line(): '=' ¥»¥Ñ¥ì¡¼¥¿¤ò + ¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿(Sergey Vlasov ¤µ¤ó thanks)¡£ + +2001-03-26 + + * src/prefs_common.[ch]: ¥¹¥à¡¼¥º¥¹¥¯¥í¡¼¥ë¤Î¥ª¥×¥·¥ç¥ó¤ò¥¤¥ó¥¿ + ¥Õ¥§¡¼¥¹¥¿¥Ö¤Ë°ÜÆ°¡£ + * src/textview.c: °ì¹Ô¥¹¥¯¥í¡¼¥ë¤â¥¹¥à¡¼¥º¥¹¥¯¥í¡¼¥ë¤ò¹Ô¤¦¤è¤¦¤Ë + ¤·¤¿¡£ + +2001-03-25 + + * src/prefs_common.[ch] + src/textview.c: À¥Æ£¤µ¤ó¤ÈÆóÇ·µÜ¤µ¤ó¤«¤é¤Î¥¹¥à¡¼¥º¥¹¥¯¥í¡¼¥ë + ¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + +2001-03-24 + + * src/summaryview.c: summary_attract_by_subject(): ¹â®²½¤Î¤¿¤á¤Ë + ¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤Æ½ñ¤­´¹¤¨¤¿¡£ + * src/prefs_account.c: filter_on_receive ¤ò¥Ç¥Õ¥©¥ë¥È¤Ç TRUE ¤Ë¤·¤¿¡£ + * src/mainwindow.c: ¥á¥Ë¥å¡¼¤Î¹àÌܤòʤٴ¹¤¨¤¿¡£ + +2001-03-23 + + * src/gtkutils.c: gtkut_clist_bindings_add(): ¥¢¥É¥ì¥¹Êä´°¤¬¥¹¥Ú¡¼¥¹ + ¥­¡¼¤È¥¨¥ó¥¿¡¼¥­¡¼¤ò¼õ¤±ÉÕ¤±¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + +2001-03-22 + + * src/utils.[ch] + src/codeconv.c: Èó ASCII ¥­¥ã¥é¥¯¥¿¤òÀµ¤·¤¯¥¨¥ó¥³¡¼¥É¤·¤Ê¤«¤Ã¤¿ + ¥Ð¥°¤ò½¤Àµ¡£ + * src/compose.c: ÊÖ¿®¤Þ¤¿¤ÏÁð¹Æ¤ÎºÆÊÔ½¸»þ¤Ë´ö¤Ä¤«¤Î¥Ø¥Ã¥À¤òÀµ¤·¤¯ + ¥Ç¥³¡¼¥É¤·¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ(Sergey Vlasov ¤µ¤ó thanks)¡£ + +2001-03-21 + + * src/gtkutils.[ch]: ¤¤¤¯¤Ä¤«¤Î¥¯¥é¥¹¤Î¿¶¤ëÉñ¤¤¤òÊѹ¹¤¹¤ë + gtkut_widget_init() ¤òÄɲᣠ+ * src/main.c: main(): gtkut_widget_init() ¤òÀè¤Ë¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: summary_create(): ¥­¡¼¥Ð¥¤¥ó¥É¤Î¥³¡¼¥É¤òºï½ü¡£ + +2001-03-19 + + * src/procmsg.[ch]: ²ÄÆÉÀ­¤Î¤¿¤á¤Ë½¤Àµ¡£ + +2001-03-18 + + * src/mainwindow.c: "Clean trash" ¤ò "Empty trash" ¤ËÊѹ¹¡£ + ¥Õ¥©¥ë¥ÀÁàºî¤Î¤¿¤á¤Î¥á¥Ë¥å¡¼¹àÌܤòÄɲᣠ+ allsel_cb(): ¥¤¥ó¥×¥Ã¥È¥Õ¥©¡¼¥«¥¹¤Ë½¾¤Ã¤Æ¥µ¥Þ¥ê¥Ó¥å¡¼¤È¥á¥Ã¥»¡¼¥¸ + ¥Ó¥å¡¼¤È¤Î´Ö¤Ç¥¿¡¼¥²¥Ã¥È¤òÀÚ¤êÂؤ¨¤ë¤è¤¦¤Ë¤·¤¿¡£ + ¥µ¥Þ¥ê¥µ¥Ö¥á¥Ë¥å¡¼¤«¤é¡ÖÁ´¤ÆÁªÂò¡×¤òºï½ü¡£ + * src/folderview.[ch]: ¥Õ¥©¥ë¥À¤òºîÀ®/̾¾ÎÊѹ¹/ºï½ü¤¹¤ë¤¿¤á¤Î´Ø¿ô¤ò + Äɲᣠ+ * src/procmsg.[ch]: ¡Ö¥Þ¡¼¥¯¡×¤È¡Öºï½ü¡×¥Õ¥é¥°¤ò±Ê³¤¹¤ë¤è¤¦¤Ë¤·¡¢ + ¡Ö½ÅÍסץե饰¤òºï½ü¡£ + * src/summaryview.c: ¥Õ¥é¥°¤Ë½¾¤Ã¤Æ¹Ô¤Î¥¹¥¿¥¤¥ë¤òÀßÄꤹ¤ë + summary_set_row_marks() ¤òÄɲä·¡¢¤¤¤¯¤Ä¤«¤Î´Ø¿ô¤¬¤½¤ì¤ò»ÈÍѤ¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/mainwindow.c: allsel_cb(): ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤òÈóɽ¼¨¤Ë¤·¤Æ¤¤¤ë + ¾ì¹ç¤âÀµ¤·¤¯ÁªÂò¤µ¤ì¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2001-03-17 + + * src/socket.c: sock_connect_by_getaddrinfo(): ¥½¥±¥Ã¥È¤Î¥ê¥½¡¼¥¹ + ¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¤·¡¢¥ë¡¼¥Á¥ó¤ò½ñ¤­Ä¾¤·¤¿¡£ + * src/inc.c: inc_mail(), inc_all_account_mail(): ¥Õ¥©¥ë¥À¤¬³«¤«¤ì + ¤Æ¤¤¤Æ¡¢¤½¤Î¥Õ¥©¥ë¥À¤Ë¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬ÅþÃ夷¤¿¾ì¹ç¤Ë¥Õ¥©¥ë¥À¥Ä¥ê¡¼ + ¤Ë´Ö°ã¤Ã¤¿Ì¤ÆÉ¿ô¤òɽ¼¨¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/socket.c: sock_connect_by_getaddrinfo(): ¥Ð¥°¤òºÆÅÙ½¤Àµ¡£ + +2001-03-15 + + * src/mh.c: mh_move_msg(), mh_move_msgs_with_dest(): °ÜÆ°Àè¤Î + ¥Õ¥¡¥¤¥ë¤Î¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/procmsg.c: procmsg_set_flags(): ¥á¥Ã¥»¡¼¥¸¥ê¥¹¥È¤ÎºÇ¸å¤Î + ÈÖ¹æ¤ò¥«¥¦¥ó¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿(¤½¤·¤Æ¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬³«¤±¤Ê¤¤ + ¥Ð¥°¤ò½¤Àµ)¡£ + +2001-03-13 + + * src/prefs_common.c: prefs_send_create(): Á÷¿®¥³¡¼¥É¥»¥Ã¥È¤«¤é + EUC-JP ¤È Shift_JIS ¤òºï½ü¡£ + +2001-03-12 + + * version 0.4.62 + +2001-03-11 + + * src/send.c: send_message_queue(): Á÷¿®ÂÔ¤Á¥á¥Ã¥»¡¼¥¸¤Î `From' + ¤È¥µ¡¼¥Ð̾¤«¤é¥¢¥«¥¦¥ó¥È¤ò¸¡º÷¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/account.[ch]: »ØÄꤵ¤ì¤¿¥¢¥É¥ì¥¹¤È SMTP ¥µ¡¼¥Ð¤«¤é¥¢¥«¥¦¥ó¥È + ¤ò¸«¤Ä¤±¤ë account_find_from_smtp_server() ¤òÄɲᣠ+ * src/Makefile.am + src/mainwindow.c + src/summaryview.[ch] + src/sourcewindow.[ch]: DINH V. Hoa ¤µ¤ó¤«¤é¤Î¥½¡¼¥¹É½¼¨¥Ñ¥Ã¥Á¤ò + Åý¹ç(thanks!)¡£ + +2001-03-10 + + * src/addr_compl.[ch] + src/addressbook.c + src/compose.c: Alfons Hoogervorst ¤µ¤ó¤«¤é¤Îµ¡Ç½¶¯²½¤µ¤ì¤¿ + ¥¢¥É¥ì¥¹Êä´°¥Ñ¥Ã¥Á¤òŬÍÑ(thanks!)¡£ + * src/addr_compl.c: g_assert() ¤ò g_return(_val)_if_fail() ¤ÇÃÖ¤­ + ´¹¤¨¤¿¡£ + * src/folder.c: folder_init() + src/folderview.c: folderview_drag_motion_cb() + src/procmsg.c: procmsg_clean_trash() + src/summaryview.c: summary_start_drag() + src/imap.[ch]: ÎëÌṲ́±û¤µ¤ó¤«¤é¤Î IMAP4 °ÜÆ°/ºï½üµ¡Ç½¥Ñ¥Ã¥Á¤ò + Åý¹ç(thanks!)¡£ + +2001-03-08 + + * src/main.c: parse_cmd_opt(): --compose ¥ª¥×¥·¥ç¥ó¤¬ mailto: ¤Î + URI ¤òǧ¼±¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/utils.[ch]: execute_async(): °úÍÑÉä¤Ç°Ï¤Þ¤ì¤¿°ú¿ô¤òÀµ¤·¤¯ + ½èÍý¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + strstr_with_skip_quote(), strsplit_with_quote(): °úÍÑÉäÂбþÈǤΠ+ g_strsplit(). + * src/mimeview.c: mimeview_view_file() + src/prefs_common.c: ¥Õ¥¡¥¤¥ë̾¤Î¼þ¤ê¤Ë¥·¥ó¥°¥ë¥¯¥©¡¼¥Æ¡¼¥·¥ç¥ó + ¥Þ¡¼¥¯¤òÄɲᣠ+ +2001-03-07 + + * configure.in + src/compose.c + src/prefs.c + src/procmime.c + src/summaryview.c + src/mbox.c + src/recv.c + src/utils.[ch]: Dmitry V. Levin ¤µ¤ó¤«¤é¤Î¥»¥­¥å¥ê¥Æ¥£½¤Àµ¥Ñ¥Ã¥Á + ¤ò¤¤¤¯¤é¤«½¤Àµ¤·¤ÆŬÍÑ(´¶¼Õ!)¡£ utils.[ch] ¤Ë my_tmpfile() ¤ò + Äɲᣠ+ * src/main.c: --receive-all ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ +2001-03-06 + + * src/socket.c: sock_connect_thread(): ¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤È IPv6 ¤Î + ξÊý¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤¿¤é¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ + (À趤µ¤ó thanks)¡£ + * src/utils.[ch] + src/compose.c: ½ð̾¥Õ¥¡¥¤¥ë¤Ç FIFO ¤¬»È¤¨¤ë¤è¤¦¤Ë¤¹¤ë Jason + McCarver ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/textview.c: ¤µ¤é¤Ë¾¯¤·¥ê¥Õ¥¡¥¯¥¿¥ê¥ó¥°¤ò¹Ô¤Ã¤¿¡£ + * src/socket.c: sock_accept(): socklen_t ¤ò gint ¤ËÊѹ¹¡£ + +2001-03-05 + + * src/main.c + * src/textview.c: ¥³¡¼¥É¤ò¾¯¤·À°Íý¡£ + +2001-03-04 + + * src/compose.[ch] + src/main.c + src/textview.c: ¥¯¥ê¥Ã¥«¥Ö¥ë URI ¤ÎÉÔ¶ñ¹ç¤ò½¤Àµ¤·¥á¡¼¥ë¥¢¥É¥ì¥¹ + ¤ò¥¯¥ê¥Ã¥«¥Ö¥ë¤Ë¤·¡¢¤½¤·¤Æ --compose ¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ç + ¥¢¥É¥ì¥¹¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë Alfons Hoogervorst ¤µ¤ó¤«¤é¤Î + ¥Ñ¥Ã¥Á¤òÅý¹ç(´¶¼Õ!)¡£ + +2001-03-03 + + * src/esmtp.[ch] + src/smtp.[ch] + src/send.c + src/prefs_account.[ch] + src/Makefile.am: Martin Schaaf ¤µ¤ó¤Î SMTP AUTH ¥Ñ¥Ã¥Á¤òŬÍѤ·¡¢ + ¤½¤Î¥Ð¥°¤ò¤¤¤¯¤Ä¤«½¤Àµ(´¶¼Õ!)¡£ + * src/textview.c: textview_key_pressed(): ¥Õ¥©¡¼¥«¥¹¤ò¥µ¥Þ¥ê¥Ó¥å¡¼ + ¤Ë°ÜÆ°¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/main.c: parse_cmd_opt(): ¥Ø¥ë¥×¥á¥Ã¥»¡¼¥¸¤ò½¤Àµ¡£ + * src/html.[ch]: HTMLParser ¤Ë empty_line ¤òÄɲä·¡¢¥Ñ¡¼¥µ¤Î + ¥ë¡¼¥Á¥ó¤ò¾¯¤·½¤Àµ¡£ + +2001-03-01 + + * src/html.c: eucjp_symbol_list ¤òÄɲä·¡¢¤¤¤¯¤Ä¤«¤Îʸ»ú¤ò + ascii_symbol_list ¤ËÄɲᣠ+ +2001-02-19 + + * src/codeconv.[ch]: CodeConverter ¤Ë¥á¥ó¥Ð `charset' ¤È + `charset_str' ¤òÄɲᣠ+ * src/html.[ch]: ISO-8859-1 ¥³¡¼¥É¥»¥Ã¥È¤Î¤¿¤á¤Î¥·¥ó¥Ü¥ë¥ê¥¹¥È¤ò + Äɲᣠ+ html_parser_new(): ¥É¥­¥å¥á¥ó¥È¤Î¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤Ë±þ¤¸¤Æ + ¥·¥ó¥Ü¥ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤òÊѹ¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + html_parse_special(): ʸ»ú¥³¡¼¥ÉÈÖ¹æ¤òǧ¼±¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2001-02-17 + + * src/textview.c: HTML ¤ò¥Ñ¡¼¥¹¤·¡¢¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¤¹¤ë + textview_show_html() ¤òÄɲᣠ+ textview_show_part(): ¥Ñ¡¼¥È¤¬ text/html ¤Ê¤é textview_show_html() + ¤ò¸Æ¤Ö¤è¤¦¤Ë¤·¤¿¡£ + * src/html.[ch]: HTML ¥Ñ¡¼¥µ¤ò¼ÂÁõ¡£ + +2001-02-15 + + * src/codeconv.[ch]: CodeConverter ¤È¡¢¤½¤Î¥á¥½¥Ã¥É¤òÄɲà + (conv_code_converter_new(), conv_code_converter_destroy(), ¤½¤·¤Æ + conv_convert())¡£ + * src/textview.c: HAVE_LIBJCONV ¤Ë¤è¤ëʬ´ô¤òºï½ü¤·¡¢ CodeConverter + ¤òÍѤ¤¤Æ½ñ¤­Ä¾¤·¤¿¡£ + +2001-02-12 + + * src/mbox.c: proc_mbox(): ½ÅÊ£¤¹¤ë From_ ¹Ô¤ËÂФ¹¤ëÂн衣 + +2001-02-11 + + * src/codeconv.c: ¾¯¤·¥³¡¼¥É¤ÎÀ°Íý¡£ + +2001-02-05 + + * src/mainwindow.c: main_window_popup(): ¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤òÀµ¤·¤¯ + ¥Ý¥Ã¥×¥¢¥Ã¥×¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + * src/codeconv.h: CS_EUC_CN ¤È CS_EUC_TW ¤ÎÄêµÁ¤¬µÕ¤Ë¤Ê¤Ã¤Æ¤¤¤¿ + ¥Ð¥°¤ò½¤Àµ(ºäËܤµ¤ó thanks)¡£ + +2001-02-04 + + * src/gtkutils.[ch] + src/main.c + src/mainwindow.[ch] + src/socket.[ch]: ¿½Åµ¯Æ°¤òÍÞÀ©¤·¡¢¥³¥Þ¥ó¥É¥é¥¤¥ó¥ª¥×¥·¥ç¥ó¤Ë¤è¤ë + ¥ê¥â¡¼¥È¥³¥ó¥È¥í¡¼¥ë¤ò²Äǽ¤Ë¤¹¤ëÊ¿¾¾¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ + (thanks!)¡£ + +2001-02-03 + + * src/summaryview.c: summary_button_pressed(), summary_selected(): + ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤¬±£¤ì¤Æ¤¤¤ë¤È¤­¤ËÃæ±û¥Ü¥¿¥ó¤¬¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤é + ¥Ó¥å¡¼¤òÀÚ¤êÂؤ¨¤ë¤è¤¦¤Ë¤·¤¿¡£ + summary_drag_data_get(): ¥á¥â¥ê¥ê¡¼¥¯¤ò½¤Àµ¡£ + * src/Makefile.am + src/compose.c: compose_write_headers(): X-Mailer ¤Þ¤¿¤Ï + X-Newsreader ¥Õ¥£¡¼¥ë¥É¤Ë host_alias ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2001-02-03 + + * version 0.4.61 + + * src/folderview.c: ¤É¤³¤«Ê̤ξì½ê¤ËƱ̾¤Î¥Õ¥©¥ë¥À¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Ë + ¥Õ¥©¥ë¥À¤òºîÀ®¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + +2001-02-02 + + * src/folderview.c: folderview_update_all(): ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿· + ¤·¤¿¸å¤Ë¥Õ¥©¥ë¥À¤¬ÁªÂò¤µ¤ì¤ë¤È segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò + ½¤Àµ¡£ + * src/compose.c: compose_send(): ¥í¥Ã¥¯»þ¤Î¥Ð¥°¤ò½¤Àµ¡£ + compose_write_headers(): cur_account ¤ò»²¾È¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + compose_convert_header(): °ú¿ô¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2001-02-01 + + * src/main.c: ¥³¡¼¥É¤ÎÀ°Íý¤È¡¢ --help ¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ +2001-01-31 + + * src/send.c: ¥æ¡¼¥¶ÄêµÁ¤Î¥É¥á¥¤¥ó̾¤ÎÀßÄê¤òºÆ¤ÓÍ­¸ú¤Ë¤·¤¿¡£ + * src/utils.c: is_next_mbs(): °ì»þŪ¥Þ¥ë¥Á¥Ð¥¤¥ÈÇÛÎó¤Î¥µ¥¤¥º¤ò + MB_CUR_MAX ¤ËÊѹ¹¡£ + strdup_mbstowcs(): mbstowcs() ¤Ë¥¨¥é¡¼¥Á¥§¥Ã¥¯¤òÄɲᣠ+ strdup_wcstombs(): wcstombs() ¤Ë¥¨¥é¡¼¥Á¥§¥Ã¥¯¤òÄɲᣠ+ * src/addr_compl.c: get_address_from_edit(): strdup_mbstowcs() ¤Î + Ìá¤êÃͤò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/codeconv.c: conv_encode_header(): strdup_mbstowcs() ¤Ë + ¥¨¥é¡¼¥Á¥§¥Ã¥¯¤òÄɲᣠ+ +2001-01-30 + + * src/utils.c: log_error(): abort ¤·¤Ê¤¤¤è¤¦¤Ë g_error() ¤ò + g_warning() ¤ËÊѹ¹¡£ + iswalnum() ¤òÄɲᣠ+ * src/addr_compl.c: add_address(): ̾Á°¤¢¤ë¤¤¤Ï¥¢¥É¥ì¥¹¤¬¶õ¤Î + ¾ì¹ç¤Ë¥×¥í¥°¥é¥à¤ò abort ¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + get_address_from_edit(): ¥Þ¥ë¥Á¥Ð¥¤¥Èʸ»ú¤ËÂбþ¡£ + * configure.in: ¥¿¥¤¥×¥ß¥¹¤ò½¤Àµ¡£ + * src/send.c: ¥æ¡¼¥¶ÄêµÁ¤Î SMTP ¥Ý¡¼¥È¤ÎÀßÄê¤òºÆ¤ÓÍ­¸ú¤Ë¤·¤¿¡£ + +2001-01-30 + + * version 0.4.60 + + * configure.in: --enable-gpgme ¥ª¥×¥·¥ç¥ó¤òÄɲä·¡¢¥Ç¥Õ¥©¥ë¥È¤Ç + GPGME ¤ò̵¸ú¤Ë¤·¤¿¡£ + * ̵¸ú¤Î¾ì¹ç¡¢ MimeInfo Ãæ¤Î GPGME ´ØÏ¢¤Î¥á¥ó¥Ð¤¬»ÈÍѤµ¤ì¤Ê¤¤¤è¤¦¤Ë + ¤·¤¿¡£ + * src/rfc2015.c: ·Ù¹ð¤Î¤¿¤á¤ÎÀ°Íý¡£ + * README + README.jp + INSTALL + INSTALL.jp: ¹¹¿·¡£ + * Makefile.am: bzip2 ¤Î¥ª¥×¥·¥ç¥ó¤ò½¤Àµ¡£ + +2001-01-29 + + * src/procmime.[ch]: MIME ¥¿¥¤¥×¤Ë MIME_APPLICATION_OCTET_STREAM ¤ò + Äɲᣠ+ * src/mimeview.c: mimeview_view_file(): MIME ¥¿¥¤¥×¤¬ + application/octet-stream ¤Î¾ì¹ç¤Ï²¿¤â¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.c: folderview_update_all(): ¥Õ¥©¥ë¥À¤Î¥¢¥Ã¥×¥Ç¡¼¥È + Ãæ¤Ï¥â¡¼¥À¥ë¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.c: folderview_update_all(): ¥À¥¤¥¢¥í¥°¤òºï½ü¤Ç¤­¤Ê¤¤ + ¥Ð¥°¤ò½¤Àµ¡£ + +2001-01-28 + + * src/mimeinfo.c: źÉÕ¥Õ¥¡¥¤¥ë¤ò metamail ¤ò»È¤Ã¤Æ³«¤¯ John E.P. + Hynes ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤ò¥Þ¡¼¥¸(´¶¼Õ!)¡£ + * src/procmime.[ch]: procmime_get_tmp_file_name() ¤òÄɲᣠ+ * src/compose.c + src/addr_compl.[ch]: ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤Î¥¢¥É¥ì¥¹¥¨¥ó¥È¥ê + ¤Ç¥¢¥É¥ì¥¹Êä´°¤ò²Äǽ¤Ë¤¹¤ë Alfons Hoogervorst ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á + ¤ò¥Þ¡¼¥¸(´¶¼Õ!)¡£ + * src/addr_compl.c: get_all_addresses(), read_address_book(): + ¥¢¥É¥ì¥¹¥Ä¥ê¡¼¤ò²òÊü¤¹¤ë¤Î¤Ë xml_free_tree() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2001-01-27 + + * src/utils.c: remove_dir_recursive(): ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ò¾Ã¤½¤¦ + ¤È¤·¤Æ¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ(ËÒ¤µ¤ó thanks)¡£ + * src/summary_search.c: ¸¡º÷¥À¥¤¥¢¥í¥°¤Ë `°ì³ç¸¡º÷' ¥ª¥×¥·¥ç¥ó¤ò + ÄɲÃ(¹â¶¶¤µ¤ó thanks)¡£ + * src/pixmaps/stock_mail_attach.xpm + src/pixmaps/tb_address_book.xpm + src/compose.c: Leandro Pereira ¤µ¤ó¤«¤é´ó£¤·¤Æ¤¤¤¿¤À¤¤¤¿¥Ä¡¼¥ë + ¥Ð¡¼¥¢¥¤¥³¥ó¤ò¤¤¤¯¤Ä¤«ÄɲÃ(´¶¼Õ!)¡£ + +2001-01-25 + + * src/rfc2015.c: passphrase_cb(): ¥Ñ¥¹¥Õ¥ì¡¼¥º¥À¥¤¥¢¥í¥°¤ò¥­¥ã¥ó¥»¥ë + ¤·¤¿¤È¤­¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò *¤Ä¤¤¤Ë* ½¤Àµ¡£ + ¥Ç¥Ð¥Ã¥°¥á¥Ã¥»¡¼¥¸Ãæ¤Î¥Ñ¥¹¥Õ¥ì¡¼¥º¤ò±£¤·¤¿¡£ + * src/about.c: about_create(): ¤É¤Îµ¡Ç½¤â»ÈÍѤµ¤ì¤Ê¤«¤Ã¤¿¤È¤­¤Ë + ¥³¥ó¥Ñ¥¤¥ë¤Ë¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ + * src/foldersel.c: foldersel_set_tree(): Á´¤Æ¤Î MH ¥Õ¥©¥ë¥À¤òɽ¼¨ + ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.c: inc_start(): ¥Ñ¥¹¥ï¡¼¥É¥À¥¤¥¢¥í¥°¤ò¥­¥ã¥ó¥»¥ë¤·¤Æ¤â + ²¿ÅÙ¤âɽ¼¨¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/summaryview.c: summary_write_cache(): ¥¯¥é¥Ã¥·¥å¤òËɤ°¤¿¤á¤Ë + folder_item_get_cache_file() ¤Î¸å¤Ë¥¢¥µ¡¼¥·¥ç¥ó¤òÃÖ¤¤¤¿¡£ + * ¾åµ­¤Î4¤Ä¤Î½¤Àµ¤Ë´Ø¤·¤ÆËÒ¤µ¤ó¤Ë´¶¼Õ¡£ + * src/utils.h: #include ¤òÄɲᣠ+ +2001-01-24 + + * src/rfc2015.c: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Ë»ÈÍѤµ¤ì¤Æ¤¤¤ë¤¤¤¯¤Ä¤«¤Î + g_messages() ¤ò g_warning() ¤ËÊѹ¹¡£ + +2001-01-23 + + * src/procmsg.[ch]: Ťµ >= BUFFSIZE ¤Îʸ»úÎó¥Ç¡¼¥¿¤ò°·¤¨¤ë¤è¤¦¤Ë + ¥Þ¥¯¥í READ_CACHE_DATA() ¤ò½¤Àµ¡£ + * src/rfc2015.c: rfc2015_encrypt(): return ¤ò `goto failure' ¤ËÊѹ¹¡£ + * src/pixmaps/stock_mail_receive_all.xpm + src/pixmaps/stock_mail_reply_to_all.xpm + src/Makefile.am + src/mainwindow.c: main_window_toolbar_create(): David Mehrmann + ¤µ¤ó¤«¤é´ó£¤·¤Æ¤¤¤¿¤À¤¤¤¿¿·¤·¤¤¥Ä¡¼¥ë¥Ð¡¼¥¢¥¤¥³¥ó¤òÄɲÃ(´¶¼Õ!)¡£ + * src/inc.[ch]: ¡ÖÁ´¼õ¿®¡×¥â¡¼¥É¤Ç¡¢¼õ¿®¤´¤È¤Ë¿ÊĽ¥À¥¤¥¢¥í¥°¤ò + ºîÀ®¤·¤Æºï½ü¤¹¤ë¤³¤È¤¬¤Ê¤¤¤è¤¦¤Ë¹½Â¤¤òÂçÉý¤Ë¸«Ä¾¤·¤¿¡£ + +2001-01-22 + + * src/mh.c: mh_scan_tree_recursive(): `inbox' Åù¤Î̾Á°¤Î¥µ¥Ö¥Õ¥©¥ë¥À + ¤òÆÃÊ̤ʥե©¥ë¥À¤È¸í¤Ã¤Æǧ¼±¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ + * src/rfc2015.c: rfc2015_encrypt(): boundary ¤òÀµ¤·¤¯°úÍÑÉä¤Ç³ç¤Ã¤Æ + ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2001-01-21 + + * Werner Koch ¤µ¤ó¤«¤é¤Î GnuPG ¥Ñ¥Ã¥Á¤òŬÍÑ (´¶¼Õ!)¡£ + * Mixmaster ¤Î¥µ¥Ý¡¼¥È¤òºï½ü¡£ + * src/rfc2015.c: g_error() ¤ò g_warning() ¤ËÊѹ¹¤·¡¢¤¤¤¯¤Ä¤«¤Î + ¥á¥Ã¥»¡¼¥¸¤ò½¤Àµ¡£ + * src/about.c: about_create(): ¥³¥ó¥Ñ¥¤¥ëºÑµ¡Ç½¥ê¥¹¥È¤ò½¤Àµ¡£ + * README + README.jp + INSTALL + INSTALL.jp: ¹¹¿·¡£ + * src/select-keys.c: create_dialog(): ¥ì¥¤¥¢¥¦¥È¤ò½¤Àµ¡£ + * src/headerwindow.c + src/addressbook.c + src/logwindow.c: ¥¦¥£¥ó¥É¥¦¤¬´û¤Ë³«¤¤¤Æ¤¤¤ì¤Ð¥¦¥£¥ó¥É¥¦¤òÁ°ÌÌ¤Ë + ½Ð¤¹¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch]: ¨ºÂ¤Ë¼Â¹Ô¤¹¤ëÁªÂò»è¤òÄɲᣠ+ * src/summaryview.c: immediate_exec ¥ª¥×¥·¥ç¥ó¤¬Í­¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ì¤Ð¡¢ + ¥á¥Ã¥»¡¼¥¸¤¬°ÜÆ°¤Þ¤¿¤Ïºï½ü¤µ¤ì¤¿¤È¤­¤Ë¨ºÂ¤Ë¼Â¹Ô¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: summary_delete(), summary_move_selected_to(): + summary_step() ¤ò summary_execute() ¤ÎÁ°¤Ë°ÜÆ°¡£ + * src/folderview.c: folderview_update_all(): ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤òÀµ¤·¤¯ + ¥¹¥­¥ã¥ó¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: compose_write_headers(): to_list ¤¬¶õ¤Î¾ì¹ç¡¢ + In-Reply-To ¥Ø¥Ã¥À¤òÉÕ¤±¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + +2001-01-09 Werner Koch + + * configure.in, acconfig.h: GPGME ¤Î¥Á¥§¥Ã¥¯¡£ + * ac/: ¥í¡¼¥«¥ë¤Ê autoconf ¥Þ¥¯¥í¤Î¤¿¤á¤Î¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê¡£ + * src/Makefile.am: GPGME Âбþ¤ÎÄɲᣠ+ + * src/main.c (idle_function_for_gpgme): ¿·µ¬¡£ + (main): ¤³¤Î´Ø¿ô¤òÅÐÏ¿¡£ + + * src/about.c: GPGME ¤Ë¤Ä¤¤¤Æ¤Îɽµ­¤òÄɲᣠ+ + * src/rfc2015.c, rfc2015.h: ¿·µ¬¡£ + + * src/mimeview.c (mimeview_show_message): ½ð̾¤Î¥Á¥§¥Ã¥¯¡£ + * src/procmime.c (procmime_scan_message): Ʊ¾å¡£ + + * src/messageview.c (messageview_show): Éü¹æ²½´Ø·¸¤òÄɲᣠ+ + * src/compose.c (compose_write_to_file): Í׵ᤵ¤ì¤ì¤Ð¥Õ¥¡¥¤¥ë¤ò°Å¹æ²½¡£ + (compose_toggle_encrypt_cb): ¿·µ¬ + (compose_toggle_mixmaster_cb): ¿·µ¬¡¢Ã±¤Ë Mixmaster Âбþ¤Î¤¿¤á¤Î½àÈ÷¡£ + (compose_write_headers): mixmaster ¥â¡¼¥É¤Ç¤¤¤¯¤Ä¤«¤Î¥Ø¥Ã¥À¤òÍÞÀ©¡£ + + * src/prefs_common.c (prefs_common_create): ¡Ö¥×¥é¥¤¥Ð¥·¡¼¡× + ¥Î¡¼¥È¥Ö¥Ã¥¯¥·¡¼¥È¤òÄɲᣠ+ (prefs_privacy_create): ¿·µ¬¡£¸å¤¤¤¯¤Ä¤«¤Î¿·µ¬¹½Â¤ÂÎÅù¡£ + * src/compose.c (compose_create): °Å¹æ²½¥Ü¥¿¥ó¤ò¥Ç¥Õ¥©¥ë¥È¤Ë»ØÄê + ¤µ¤ì¤¿¾õÂÖ¤ËÀßÄê¡£ + * src/compose.h (struct _Compose): use_encryption ¤È use_mixmaster + ¤òÄɲᣠ+ + * src/compose.c (compose_send): return ¤ÎÁ°¤Ë¥í¥Ã¥¯²ò½ü¤¬È´¤±¤Æ¤¤¤ë + ¤Î¤òÄɲᣠ+ +2001-01-18 + + * src/gtksctree.[ch] + src/folderview.c + src/summaryview.[ch]: ¥µ¥Þ¥ê¥Ó¥å¡¼¤«¤é¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ø¤Î DnD ¤ò + ²Äǽ¤Ë¤·¡¢¤½¤Î¾¤ÎÌäÂê¤ò²ò·è¤¹¤ëÊ¿¾¾¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/mainwindow.c: scan_tree_func(): segmentation fault ¤òµ¯¤³¤¹ + ¥Ð¥°¤ò½¤Àµ¡£ + * src/imap.c: LOGIN ¤Î¥æ¡¼¥¶Ì¾¤È SELECT ¤Î¥Õ¥©¥ë¥À̾¤ò°úÍÑÉä¤Ç + ³ç¤Ã¤¿¡£ + * src/gtksctree.c: gtk_sctree_button_press(): ¥Î¡¼¥É¤ÎŸ³«¾õÂÖ¤ò + ¥È¥°¥ë¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + +2001-01-17 + + * src/imap.c: ¥á¥Ã¥»¡¼¥¸¤Î¥ê¥¹¥È¤ò¤è¤êÀµ³Î¤Ë¹¹¿·¤·¡¢¥á¥Ã¥»¡¼¥¸¤Î + ¥Õ¥é¥°¤òÆɤ߼è¤ëÀ¾Â¼¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/textview.c: textview_show_header(): X-Newsreader ¥Õ¥£¡¼¥ë¥É + ¤â¶¯Ä´¤µ¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: summary_show(): ¥µ¥Þ¥ê¤òɽ¼¨¤¹¤ë¤È¤­¤Ë + ¥¤¥Ù¥ó¥È¤ò¥Õ¥é¥Ã¥·¥å¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2001-01-15 + + * src/summaryview.c: ¥µ¥Þ¥ê¥Ó¥å¡¼¤Î¿åÊ¿¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤òÍ­¸ú¤Ë¤¹¤ë + Alfons ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + +2001-01-13 + + * src/compose.c: compose_cb(): ¥×¥í¥°¥é¥à¤òµ¯Æ°¤·¤¿Ä¾¸å¤Ë¥á¥Ã¥»¡¼ + ¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤ò³«¤±¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/setup.c: scan_tree_func(): segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò + ½¤Àµ¡£ + +2001-01-13 + + * version 0.4.52 + + * src/textview.c: textview_set_font(): Îΰ褬ÁªÂò¤µ¤ì¤Æ¤¤¤ë»þ¤Ë + ¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Î¥Þ¥ë¥Á¥Ð¥¤¥È¤È¥·¥ó¥°¥ë¥Ð¥¤¥È¥â¡¼¥É¤¬ + ÀÚ¤êÂؤï¤Ã¤¿¾ì¹ç¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ(GTK+ + ¤Î¥Ð¥°?)¡£ + +2001-01-11 + + * src/mainwindow.c + src/summaryview.c: ¥Ë¥å¡¼¥¹¥Õ¥©¥ë¥À¤Ë¤¤¤ë¤È¤­¤Ï¥á¥Ã¥»¡¼¥¸¤òºï½ü + ¤Þ¤¿¤Ï°ÜÆ°¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.c + src/news.c: ºÇÂç¤Î¥Ë¥å¡¼¥¹µ­»ö¿ô¤Î¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ +2001-01-10 + + * src/compose.c: compose_send(): °ì»þ¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤òÊѹ¹¡£ + »î¤·¤¿¥¢¥«¥¦¥ó¥È¤¬Á´¤Æ¥á¡¼¥ë¥¢¥«¥¦¥ó¥È¤Ç¤Ê¤¤¾ì¹ç¤Ï¥Ç¥Õ¥©¥ë¥È¤Î + ¥¢¥«¥¦¥ó¥È¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£¤½¤ì¤â¼ºÇÔ¤·¤¿¤È¤­¤Ï·Ù¹ð + ¥À¥¤¥¢¥í¥°¤òɽ¼¨¤·¤ÆÃæÃǤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_account.c: prefs_account_get_new_id(): ºÇ¸å¤Î id + ÈÖ¹æ¤òÊÝ»ý¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + prefs_account_open(): ¿·¤¿¤Ê¥¢¥«¥¦¥ó¥È¤òºîÀ®¤¹¤ë¤È¤­¡¢¥Ç¥Õ¥©¥ë¥È + ¤Î¥¢¥«¥¦¥ó¥È¤Ë½¾¤Ã¤Æ¸Ä¿Í¾ðÊó¤òËä¤á¤ë¤è¤¦¤Ë¤·¤¿¡£ + * sylpheed.spec.in: ŬÀڤʥС¼¥¸¥ç¥óÈÖ¹æ¤Î sylpheed.spec ¤ò¼«Æ° + À¸À®¤¹¤ë¤¿¤á¤ËÄɲÃ(BONAIM ¤µ¤ó thanks)¡£ + * configure.in + Makefile.am: sylpheed.spec.in ¤Î¤¿¤á¤Î¥¨¥ó¥È¥ê¤òÄɲᣠ+ +2001-01-09 + + * src/compose.[ch]: ¥¢¥«¥¦¥ó¥È¤òÀµ¤·¤¯Êѹ¹¤Ç¤­¤ë¤è¤¦½¤Àµ¡£ + * src/send.[ch]: cur_account ¤ò¸«¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + * src/prefs_account.c: ¥Ë¥å¡¼¥¹¤ÎÀßÄê¤Ç SMTP ¥µ¡¼¥Ð¤Î¥¨¥ó¥È¥ê¤ò + ɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + +2001-01-08 + + * src/folderview.c: ¿·µ¬¥Õ¥©¥ë¥À¤¬ºîÀ®¤µ¤ì¤¿¤ê̾Á°¤¬Êѹ¹¤µ¤ì¤¿¤ê + ¤·¤¿¤È¤­¤ËÆÃÊ̤ʥե©¥ë¥À¤òÀµ¤·¤¯¥½¡¼¥È¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2001-01-07 + + * src/compose.[ch]: ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤Ç¥¢¥«¥¦¥ó¥È¤òÁªÂò + ¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.c: ¥Õ¥©¥ë¥À̾¤Î²£¤Ë̤ÆÉ¿ô¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch]: ̤ÆÉ¿ôɽ¼¨¤Î¤¿¤á¤Î¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ +2001-01-06 + + * src/compose.[ch]: DINH V. Hoa ¤µ¤ó¤«¤é¤Î¥Ë¥å¡¼¥¹Åê¹Æ¥Ñ¥Ã¥Á¤ò + Åý¹ç¤·¡¢Â¿¤¯¤Î½¤Àµ¤ò²Ã¤¨¤¿(´¶¼Õ!)¡£ + compose_write_headers(): ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¶õÇò¤òºï½ü¤¹¤ë¤è¤¦¤Ë + ¤·¤¿¡£ + Followup-To ¤ËÂбþ¡£ + compose_destroy(): Àµ¤·¤¯¥ª¥Ö¥¸¥§¥¯¥È¤òºï½ü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/news.c: news_post_to_group() ¤È news_post() ¤ò¤Þ¤È¤á¤¿ + (Ê£¿ô²ó¤ÎÅê¹Æ¤ò¤¹¤ëɬÍפ¬¤Ê¤¤¤¿¤á)¡£ + * src/import.c: import_destsel_cb(): ÁªÂò¤·¤¿¥Õ¥©¥ë¥À¤Ø¤Î¥¤¥ó¥Ý¡¼¥È + ¤Ë¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ + * src/prefs_account.c: ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò½¤Àµ¡£ + +2001-01-05 + + * src/codeconv.[ch] + prefs_common.c: "SHIFT-JIS" ¤ò "Shift_JIS" ¤ËÊѹ¹(IANA¤ËÅÐÏ¿¤µ¤ì + ¤Æ¤¤¤ë¤¿¤á)¡£ + * src/nntp.[ch]: nntp_post() ¤òÄɲᣠ+ * src/news.[ch]: news_post() ¤È news_post_to_group() ¤òÄɲᣠ+ +2001-01-04 + + * src/account.c: account_edit_open() + src/mainwindow.c: new_account_cb(): ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤¬ + ³«¤¤¤Æ¤¤¤¿¤é¥¢¥«¥¦¥ó¥È¤òÊÔ½¸¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + +2001-01-03 + + * src/folder.[ch]: folder_set_name() ¤òÄɲᣠ+ * src/account.c: IMAP4/NNTP ¤Î¥Õ¥©¥ë¥À̾¤¬¥¢¥«¥¦¥ó¥È̾¤ÈƱ¤¸¤Ë + ¤Ê¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2001-01-02 + + * src/summaryview.c: summary_filter_func(): ¥á¥Ã¥»¡¼¥¸¤Î¿¶¤êʬ¤±¤Ë + ¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ + +2001-01-02 + + * version 0.4.51 + + * src/mbox.c: ¥¹¥×¡¼¥ë¥Õ¥¡¥¤¥ë¤òÀµ¤·¤¯¼è¤ê¤³¤á¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + From_ ¹Ô¤ÎÁ°¤Ë¶õ¹Ô¤¬¤Ê¤¯¤Æ¤â¥á¥Ã¥»¡¼¥¸¤Î¶èÀÚ¤ê¤È¤ß¤Ê¤¹¤è¤¦¤Ë½¤Àµ¡£ + * src/send.c: send_message_queue() + src/procmsg.c: procmsg_send_queue(): Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òºï½ü + ¤·¤è¤¦¤È¤·¤Æ·Ù¹ð¤ò½Ð¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2001-01-01 + + * version 0.4.50 + + * src/folder.[ch] + src/news.[ch]: ¼ÂºÝ¤Ë¥Ë¥å¡¼¥¹µ­»ö¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/utils.[ch]: ¥Ç¥£¥ì¥¯¥È¥ê³¬ÁؤòºîÀ®¤¹¤ë make_dir_hier() ¤òÄɲᣠ+ * src/folder.c + folder_item_get_cache_file(), folder_item_get_mark_file(): + ¥­¥ã¥Ã¥·¥å¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤Ê¤±¤ì¤ÐºîÀ®¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + folder_add(): Äɲ䵤ì¤ë¥Õ¥©¥ë¥À¤òÀµ¤·¤¤¾ì½ê¤ËÁÞÆþ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/imap.[ch]: ¿·¤·¤¤¥Õ¥©¥ë¥À¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤Ë¹ç¤¦¤è¤¦¤Ë½¤Àµ¡£ + imap_auth() ¤Çǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¾ì¹ç segmentation fault ¤òµ¯¤³¤¹¥Ð¥° + ¤ò½¤Àµ¡£ + * src/folderview.c: IMAP4 ¥Õ¥©¥ë¥ÀÁàºî¥ë¡¼¥Á¥ó¤ò¼ÂÁõ¡£ + +2000-12-31 + + * src/prefs_account.[ch]: PrefsAccount ¤Ë¥¢¥«¥¦¥ó¥È ID ¤È + nntp_server ¤òÄɲá£NNTP ¥µ¡¼¥Ð¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òÄɲᣠ+ * src/folderview.c: ¥Ë¥å¡¼¥¹¥Õ¥©¥ë¥ÀÁàºî¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + * src/folder.[ch]: RemoteFolder ¤«¤é cache_dir ¤òºï½ü¤·¡¢ + folder_item_get_path() ¤ò½¤Àµ¡£ + +2000-12-29 + + * src/folder.[ch]: create_folder(), rename_folder(), remove_folder() + ¤ò Folder ¥¯¥é¥¹¤ËÄɲᣠ+ * src/mh.[ch]: mh_create_folder(), mh_rename_folder(), ¤½¤·¤Æ + mh_remove_folder() ¤òÄɲᣠ+ MH ¥Ç¥£¥ì¥¯¥È¥ê¥Ä¥ê¡¼¤òºîÀ®¤¹¤ë mh_create_tree() ¤ò¼ÂÁõ¡£ + mh_rename_folder(): ¥µ¥Ö¥Õ¥©¥ë¥À¤Î¥Ñ¥¹¤¬Àµ¤·¤¯ÀßÄꤵ¤ì¤ë¤è¤¦¤Ë + ½¤Àµ¡£ + * src/folderview.c: folderview_new_folder_cb(), + folderview_rename_folder_cb(), folderview_delete_folder_cb() + ¤òÀµ¤·¤¯Æ°ºî¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤«¤é¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºï½ü¤¹¤ë + folderview_remove_mailbox_cb() ¤È ¥á¥Ë¥å¡¼¥¨¥ó¥È¥ê¤òÄɲᣠ+ * src/setup.[ch]: ½é´ü¤Î¥»¥Ã¥È¥¢¥Ã¥×¤Î¤¿¤á¤ËÄɲᣠ+ * src/alertpanel.c: ¥À¥¤¥¢¥í¥°¤Î³°´Ñ¤òÊѹ¹¡£ + * src/compose.c: ¥Õ¥é¥°¤òÀµ¤·¤¯¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë + compose_save_to_outbox() ¤È compose_queue() ¤ò½¤Àµ¡£ + +2000-12-28 + + * src/mainwindow.c: ¥Ä¡¼¥ë¥Ð¡¼¤Î¥é¥Ù¥ë¤Îʸ»úÎó¤ò½¤Àµ¡£ + +2000-12-27 + + * src/gtkutils.[ch]: gtkut_ctree_node_move_if_on_the_edge() ¤òÄɲᣠ+ * src/summaryview.c: summary_display_msg(): ¥ê¥¹¥È¤Îü¤Î¥á¥Ã¥»¡¼¥¸ + ¤¬É½¼¨¤µ¤ì¤¿¤é¥¹¥¯¥í¡¼¥ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-12-25 + + * src/folder.[ch] + src/mh.[ch]: ¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤¹¤ë´Ø¿ô¤òÄɲᣠ+ * src/procmsg.[ch]: procmsg_move_messages_with_dest() ¤ò folder.c + ¤È mh.c ¤Ë°ÜÆ°¡£ procmsg_to_folder_hash_table() ¤òÄɲᣠ+ +2000-12-24 + + * src/utils.[ch]: get_tmp_file() ¤òÄɲᣠ+ * src/pop.c + src/inc.c + src/folder.c: ¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë¤Î¤Ë¼ºÇÔ¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/mh.c: mh_scan_folder(): ¥Õ¥©¥ë¥À¤Î¿·Ã塢̤ÆÉ¡¢Áí¿ô¤òÄ´¤Ù¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + +2000-12-23 + + * src/folderview.c: ÆÃÊ̤ʥե©¥ë¥À¤òÀßÄꤹ¤ë¥ë¡¼¥Á¥ó¤òÄɲᣠ+ * src/folder.[ch]: ¥á¥½¥Ã¥É is_msg_changed() ¤òÄɲᣠ+ folder_find_item_from_path() ¤ò¼ÂÁõ¡£ + * src/summaryview.c: ´Ö°ã¤Ã¤Æ FolderItem ¤ò²òÊü¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * autogen.sh: configure ¤¬°ú¿ô¤ò¼è¤ì¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-12-22 + + * src/main.c + src/mainwindow.[ch]: ¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î¥Ñ¥¹¤ò¿Ö¤Í¡¢ºîÀ®¤¹¤ë + main_window_new_mailbox() ¤òÄɲᣠ+ * src/folderview.c: ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ÈÁªÂò¤µ¤ì¤¿¥Õ¥©¥ë¥À¤òŸ³«¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + +2000-12-21 + + * src/mh.[ch] + src/folder.c: ¥Õ¥©¥ë¥À¤òºÆµ¢Åª¤Ë¥¹¥­¥ã¥ó¤·¡¢¥Ä¥ê¡¼¤òÀ¸À®¤¹¤ë + mh_scan_tree() ¤ò¼ÂÁõ¡£ + +2000-12-19 + + * src/compose.c + src/defs.h + src/filter.[ch] + src/folder.[ch] + src/foldersel.[ch] + src/folderview.[ch] + src/imap.[ch] + src/import.c + src/inc.c + src/main.[ch] + src/mainwindow.c + src/mbox.[ch] + src/mh.[ch] + src/news.[ch] + src/prefs_common.c + src/procmsg.[ch] + src/summaryview.[ch] + src/xml.[ch] + src/Makefile.am: ³«È¯Èǥĥ꡼¤ò cvs ¥Ä¥ê¡¼¤Ë¥Þ¡¼¥¸¡£¤¤¤¯¤Ä¤«¤Î + ´Ø¿ô¤Ï¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£ + +2000-12-18 + + * version 0.4.9 + +2000-12-11 + + * src/xml.[ch]: ¥¿¥°¤Î¾Êά·Á () ¤ËÂбþ¡£ + * src/procmsg.c: procmsg_msg_exist(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ + * src/imap.c: imap_parse_atom(): subject ¤¬¶õ¤Î¾ì¹ç segmentation + fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ(Åû°æ¤µ¤ó thanks)¡£ + * src/folder.[ch]: ¹¹¿·¡£ + +2000-12-10 + + * src/xml.[ch]: »ØÄꤵ¤ì¤¿ XML ¥Õ¥¡¥¤¥ëÁ´ÂΤò²òÀϤ·¡¢ÌÚ¹½Â¤¤òÊÖ¤¹ + xml_parse_file() ¤òÄɲᣠ+ +2000-12-09 + + * po/pt_BR.po: segmentation fault ¤òµ¯¤³¤¹´ö¤Ä¤«¤Î typo ¤ò½¤Àµ¡£ + +2000-12-07 + + * version 0.4.8 + + * src/session.h: Äɲᣠ+ * src/folder.[ch]: ¹¹¿·¡£ + * src/compose.c: compose_write_to_file() + src/codeconv.c: conv_get_outgoing_charset_str(): Á÷¿®¥­¥ã¥é¥¯¥¿ + ¥»¥Ã¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Æ¡¢Èó ASCII ¤Ê¥­¥ã¥é¥¯¥¿¤¬ subject ¤Ë»ÈÍÑ + ¤µ¤ì¤Æ¤¤¤ë¤È charset ¤Ë¥´¥ß¤ò½ÐÎϤ·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-12-04 + + * src/statusbar.c: statusbar_puts(): ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤¬Èóɽ¼¨¤Î¾ì¹ç¤Ë + ½èÍý¤ò¥í¥Ã¥¯¤·¤Æ¤·¤Þ¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-12-03 + + * src/folder.[ch]: ¤è¤ê¥ª¥Ö¥¸¥§¥¯¥È»Ø¸þ¤Ê¥Õ¥©¥ë¥À´ÉÍý¤Î¤¿¤á¤ËÄɲᣠ+ +2000-12-02 + + * version 0.4.7 + + * src/mainwindow.c + src/prefs_common.[ch]: ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Î¾õÂÖ¤¬Êݸ¤µ¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: compose_insert_sig(): ½ð̾¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤ + ¤È¤­¤Ï¶èÀÚ¤ê¤òɽ¼¨¤·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + * src/prefs_account.[ch] + src/inc.c: Á´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®¤¹¤ë¤È¤­¤Ë¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë¤« + ¤É¤¦¤«¤òÀÚ¤êÂؤ¨¤é¤ì¤ëÁªÂò»è¤òÄɲᣠ+ * README + README.jp: ÀâÌÀ¤ò¹¹¿·¤·¡¢»ÈÍÑÊýË¡¤ò¤¤¤¯¤Ä¤«Äɲä·¤¿¡£ + +2000-12-01 + + * src/Makefile.am + src/gtkshruler.[ch] + src/compose.[ch]: ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤Î¥ë¡¼¥é¤ò¥°¥é¥Õ¥£¥«¥ë + ¤Ë¤¹¤ë Alfons Hoogervorst ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + +2000-11-27 + + * src/codeconv.c + src/mainwindow.c + src/prefs_common.c: CS_WINDOWS_1251 ¤ò CS_CP1251 ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + +2000-11-27 + + * version 0.4.6 + + * src/compose.c: °úÍÑ¥á¥Ã¥»¡¼¥¸¤Î¿§¤òºÆ¤Ó¹õ¤ËÌᤷ¤¿¡£ + +2000-11-26 + + * src/about.c: Sylpheed ¥Û¡¼¥à¥Ú¡¼¥¸¤Ø¤Î¥¯¥ê¥Ã¥«¥Ö¥ë URI ¤È¡¢ + ¥³¥ó¥Ñ¥¤¥ë»þ¤ËÁȤ߹þ¤Þ¤ì¤¿µ¡Ç½¤Î¥ê¥¹¥È¤òÄɲᣠ+ * src/compose.c: °úÍѤµ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤Î¿§¤òÀĤˤ·¤¿¡£ + * src/summaryview.c: ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤Ë¡ÖÁ´¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨¡× + ¤òÄɲᣠ+ * src/prefs_common.c: ¥À¥¤¥¢¥í¥°¤«¤é¥¹¥ì¥Ã¥Éɽ¼¨¤Î¥ª¥×¥·¥ç¥ó¤òºï½ü¡£ + * src/compose.c: °úÍÑ¥Õ¥©¡¼¥Þ¥Ã¥È¤òÀµ¤·¤¯¥Ñ¡¼¥¹¤·¤Æ¤¤¤Ê¤¤¥Ð¥°¤ò + ½¤Àµ¡£ + +2000-11-25 + + * src/compose.c: compose_set_ext_editor_sensitive(): ¹ÔÀÞ¤êÊÖ¤·¤Î + ¥á¥Ë¥å¡¼¹àÌܤȥġ¼¥ë¥Ü¥¿¥ó¤òÀÚ¤êÂؤ¨¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/prefs_common.c: ½ð̾¤Î¶èÀÚ¤ê¤Î¥Ç¥Õ¥©¥ë¥È¤ò½¤Àµ¡£ + * src/compose.[ch]: ºîÀ®¥¦¥£¥ó¥É¥¦¤Ë¥ë¡¼¥é¤òÄɲᣠ+ * src/prefs_common.[ch]: ¥ë¡¼¥éɽ¼¨¾õÂ֤Υá¥ó¥Ð¤òÄɲᣠ+ +2000-11-24 + + * src/headerview.[ch]: destroy ÍÑ´Ø¿ô¤òÄɲᣠ+ * src/messageview.c: messageview_destroy(): HeaderView ¥ª¥Ö¥¸¥§¥¯¥È + ¤ò²òÊü¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ + * src/prefs.c: prefs_write_open(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ + * src/xml.c: xml_close_file(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ(¾åµ­3¤Ä¤Î + ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°½¤Àµ¤Ë´Ø¤·¤Æ Alfons Hoogervorst ¤µ¤ó¤Ë´¶¼Õ)¡£ + +2000-11-23 + + * version 0.4.5 + + * README + README.jp + INSTALL + INSTALL.jp: µ­½Ò¤ò¤¤¤¯¤Ä¤«½¤Àµ¡£ + +2000-11-22 + + * src/compose.c: ¼«Æ°²þ¹Ôµ¡Ç½¤ò¼ÂÁõ¡£ + * src/prefs_common.[ch]: ¼«Æ°²þ¹ÔÍѤÎÀßÄê¤òÄɲᣠ+ * src/codeconv.[ch]: ¥³¡¼¥É¥»¥Ã¥È¤Ë Windows-1251 ¤òÄɲᣠ+ conv_jistoeuc(): ¤¢¤ëȾ³Ñ¥«¥Êʸ»ú¤¬½Ð¸½¤·¤¿¤È¤­¤Ë segmentation + fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + * src/summaryview.c: summary_select_all(): ¥á¥Ã¥»¡¼¥¸¿ô¤¬Â¿¤¤ + ¾ì¹ç¤Ï¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Ë¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-11-18 + + * src/compose.c: compose_reply(), compose_quote_parse_fmt(): + °úÍÑÉä¤â¥Ñ¡¼¥¹¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ë¥¤¥Ë¥·¥ã¥ë¤ò°ÕÌ£¤¹¤ë %I ¤òÄɲᣠ+ * src/codeconv.[ch]: ¥³¡¼¥É¥»¥Ã¥È¤Ë GB2312 ¤È Big5 ¤òÄɲᣠ+ ÉÔÀµ¤ÊÁ÷¿®¥³¡¼¥É¥»¥Ã¥È¤òÀßÄꤷ¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/mainwindow.c + src/prefs_common.c: Ãæ¹ñ¸ì¤Î¥³¡¼¥É¥»¥Ã¥È¤Î¥á¥Ë¥å¡¼¹àÌܤò½¤Àµ¡£ + +2000-11-17 + + * src/codeconv.[ch] + src/prefs_common.[ch]: Á÷¿®¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤¬(¿ôÃͤǤʤ¯) + ʸ»úÎó¤ÇÊݸ¤µ¤ì¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-11-16 + + * src/textview.c: textview_set_font(): font ¤È fontset ¤òÁªÂò¤¹¤ë + ÊýË¡¤òÊѹ¹¡£¤½¤·¤Æ ISO-8859-1 ¤Î¥Ç¥Õ¥©¥ë¥È¤Î¥Õ¥©¥ó¥È¤òÊѹ¹¡£ + * src/headerview.c: headerview_show_xface(): ̵¸ú¤Ê X-Face ¤ò + ̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/codeconv.c: conv_codeset_strdup(), conv_get_code_conv_func(): + ÊÑ´¹¸µ¤Î¥³¡¼¥É¥»¥Ã¥È¤¬ NULL ¤Ç¸½ºß¤Î¥í¥«¡¼¥ë¤¬ÆüËܸì¤Î¾ì¹ç¡¢ + ÊÑ´¹¸µ¤Î¥³¡¼¥É¥»¥Ã¥È¤ò ISO-2022-JP ¤È¤ß¤Ê¤¹¤è¤¦¤Ë½¤Àµ¡£ + +2000-11-14 + + * src/textview.c: textview_destroy(): textview->msgfont ¤¬ NULL + ¤Î¾ì¹ç¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + * src/main.c + src/defs.h: ¥á¥Ë¥å¡¼¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¤òÊݸ¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë + ÌøÀ¥¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + +2000-11-11 + + * src/mainwindow.[ch]: ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤Î¥»¥ó¥·¥Æ¥£¥Ó¥Æ¥£¤òÀÚ¤êÂØ + ¤¨¤ë main_window_set_menu_sensitive() ¤òÄɲᣠ+ * src/summaryview.c: summary_set_popup_sensitive() ¤ò + summary_set_menu_sensitive() ¤Ë̾¾ÎÊѹ¹¤·¡¢¥á¥¤¥ó¥á¥Ë¥å¡¼¤Î + ¥»¥ó¥·¥Æ¥£¥Ó¥Æ¥£¤òÀßÄꤹ¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-11-09 + + * src/textview.c: textview_init(): GtkText ¤Î¥Æ¡¼¥Þ¥¨¥ó¥¸¥ó¤ò + ÀڤäƤ¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + * src/compose.c: compose_quote_parse_fmt(): º¹½Ð¿Í¤Î¥Õ¥ë¥Í¡¼¥à¤È + ¥Õ¥¡¡¼¥¹¥È¥Í¡¼¥à¤ò°ÕÌ£¤¹¤ë %n ¤È %N ¤òÄɲᣠ+ * manual/ja/*.??ml: ºÇ¿·ÈǤ˹¹¿·¡£ + +2000-11-07 + + * version 0.4.4 + + * src/defs.h: main.h ¤«¤éÄêµÁ¤òʬΥ¤·¡¢ DEFAULT_SPOOL_PATH ¤È + MAXPATHLEN ¤ò¥·¥¹¥Æ¥à¤Î¥Ø¥Ã¥À¤«¤éÀßÄꤹ¤ë¸ÍÀ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á + ¤òŬÍÑ(´¶¼Õ!)¡£ + * src/codeconv.c: conv_get_current_charset(): lt_LT ¤È UTF-8 + ¥í¥«¡¼¥ë¤Î¤¿¤á¤Î½¤Àµ¡£ + * src/textview.c: textview_set_font(): ¥í¥«¡¼¥ë¤¬¥Þ¥ë¥Á¥Ð¥¤¥È¤Î + ¾ì¹ç¤ËÀµ¤·¤¤¥Õ¥©¥ó¥È¤òÀßÄꤹ¤ë¤è¤¦¤Ë½¤Àµ¡£ + textview_destroy(): Ç˲õ¤Î¤¿¤á¤ÎŬÀڤʥ³¡¼¥É¤òÄɲᣠ+ textview_show_header(): X-Mailer ¤Î¿§ÉÕ¤±¤ò½¤Àµ¡£ + +2000-11-06 + + * src/textview.[ch]: TextView ¤¬¥·¥ó¥°¥ë¥Ð¥¤¥È¤È¥Þ¥ë¥Á¥Ð¥¤¥È¤Î + GtkText ¤ò»ý¤Ä¤è¤¦¤Ë¤·¡¢Í¿¤¨¤é¤ì¤¿¥³¡¼¥É¥»¥Ã¥È¤Ë½¾¤Ã¤Æ¤½¤ì¤é¤ò + ÀÚ¤êÂؤ¨¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: compose_create(): ¥Õ¥©¥ó¥ÈÀßÄê¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + +2000-11-02 + + * src/textview.[ch]: ¥á¥Ã¥»¡¼¥¸¥Õ¥©¥ó¥È¤ÎÊÑ¿ô¤ò TextView ¤Ë°ÜÆ°¡£ + textview_set_font(): Í¿¤¨¤é¤ì¤¿¥³¡¼¥É¥»¥Ã¥È¤¬ US-ASCII ¤Þ¤¿¤Ï + ISO-8859-* ¤Ê¤é gdk_font_load() ¤ò»È¤¦¤è¤¦¤Ë½¤Àµ¡£ + +2000-11-01 + + * src/codeconv.c + src/procmime.c + src/prefs_common.c + src/textview.c + src/compose.c: 8bit ¥³¡¼¥ÉÌäÂê¤Ø¤ÎÂнè(locale ¤¬ C ¡¢¤¢¤ë¤¤¤Ï + ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¤È¤­¤Ï gdk_fontset_load() ¤ÎÂå¤ï¤ê¤Ë + gdk_font_load() ¤ò»ÈÍÑ)¡£ + +2000-11-01 + + * version 0.4.3 + + * src/compose.[ch]: `Áð¹Æ' ¥Ä¡¼¥ë¥Ü¥¿¥ó¤òÄɲᣠ+ * src/imap.c: imap_parse_envelope(): ¥Ñ¡¼¥¹»þ¤Î¥Ð¥°¤ò½¤Àµ¡£ + * README, README.jp: locale ¤ÎÀßÄê¤ÎÀâÌÀ¤òÄɲᣠ+ +2000-10-31 + + * src/compose.c: Áð¹Æ¤òºÆÊÔ½¸¤·¤Æ¤â¤¦°ìÅÙÊݸ¤·¤¿¾ì¹ç¡¢°ÊÁ°¤ÎÁð¹Æ¤ò + ¾å½ñ¤­¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/procmsg.[ch]: ¥á¥Ã¥»¡¼¥¸¤¬¼ÂºÝ¤Ë¸ºß¤¹¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤ë + procmsg_msg_exist() ¤òÄɲᣠ+ * src/folderview.[ch]: ¸Ä¡¹¤Î¥Õ¥©¥ë¥À¥Ó¥å¡¼¤ËÂФ·¤Æ»ØÄꤷ¤¿¥Õ¥©¥ë¥À¤ò + Áöºº¤¹¤ë folderview_scan_folder_a() ¤È + folderview_scan_folder_foreach_a() ¤òÄɲᣠ+ * src/mainwindow.[ch]: main_window_scan_folder() ¤È + main_window_scan_folder_all() ¤òºï½ü¡£ + ¥á¥Ë¥å¡¼¤Ë `ºÆÊÔ½¸' ¤òÄɲᣠ+ * src/import.[ch]: import_mbox() ¤Î°ú¿ô¤«¤é MainWindow ¤òºï½ü¡£ + * src/summaryview.c: ¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤«¤éÉÔÍפʹàÌܤòºï½ü¡£ + summary_reedit_cb() ¤ò summary_reedit() ¤ËÊѹ¹¤·¡¢public ¤Ë¤·¤¿¡£ + +2000-10-30 + + * src/compose.h: ¥á¥ó¥Ð msginfo ¤ò Compose ¤ËÄɲᣠ+ * src/procmsg.[ch]: MsgInfo ¥ª¥Ö¥¸¥§¥¯¥È¤òÊ£À½¤¹¤ë + procmsg_msginfo_copy() ¤òÄɲᣠ+ +2000-10-25 + + * src/summaryview.c: ¾õ¶·¤Ë±þ¤¸¤Æ¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤Î¥»¥ó¥· + ¥Æ¥£¥Ó¥Æ¥£¤òÊѹ¹¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£¥Õ¥©¡¼¥«¥¹¤¬¥µ¥Þ¥ê¥Ó¥å¡¼¤Ë¤¢¤Ã¤¿ + ¤È¤­¤Ë `D' ¥­¡¼¤¬²¡¤µ¤ì¤¿¾ì¹ç¡¢ `¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë' ¥À¥¤¥¢¥í¥°¤ò + ·«¤êÊÖ¤·É½¼¨¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/pixmaps/unread.xpm: ̤ÆÉ¥Þ¡¼¥¯¤Î¿§¤òÀĤËÊѹ¹¡£ + +2000-10-22 + + * src/main.c: g_thread ¤Î½é´ü²½¤ò½¤Àµ¡£ + +2000-10-21 + + * src/codeconv.c: locale_table ¤Ë pt_BR ¤òÄɲᣠ+ * src/prefs_common.c: prefs_send_create(): libjconv ¤ò»ÈÍѤ·¤Ê¤¤ + ¾ì¹ç¤Ë `US-ASCII'¡¢`ISO-8859-1'¡¢¤½¤·¤ÆÆüËܸ쥳¡¼¥É¥»¥Ã¥È¤ò + Á÷¿®¥³¡¼¥É¥»¥Ã¥È¤Î¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤ËÄɲᣠ+ * src/compose.c: Áð¹ÆÊݸ»þ¤Î¥Ð¥°¤òºÆÅÙ½¤Àµ¡£ + +2000-10-19 + + * src/compose.c: compose_write_headers(): Áð¹Æ¤òÊݸ¤¹¤ë¤È¤­¤Ë + To: ¤¬¶õ¤Î¾ì¹ç¤Ë¥Ø¥Ã¥À¤Î½ñ¹þ¤ß¤Ë¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ + +2000-10-18 + + * src/procmime.[ch] + src/compose.c + src/headerwindow.[ch] + src/summaryview.c + src/messageview.[ch] + src/mimeview.c + src/textview.c + src/procmsg.[ch] + src/procheader.[ch]: Á÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤òŬÀڤ˰·¤¨¤ë¤è¤¦½¤Àµ¡£ + * src/compose.[ch] + src/summaryview.c: Áð¹Æ¤ÎºÆÊÔ½¸µ¡Ç½¤ò¼ÂÁõ¡£ + * src/mainwindow.c + src/summaryview.c + src/mimeview.c: *(GtkWidget **) ¤ò¥Þ¥¯¥í GTK_WIDGET_PTR() ¤ÇÃÖ¤­ + ´¹¤¨¤¿¡£ + +2000-10-17 + + * src/procmsg.[ch]: procmsg_msginfo_free(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ + MsgFlags ¤Ë MSG_QUEUED ¤È MSG_DRAFT ¤òÄɲä·¡¢¥Õ¥©¥ë¥À¤¬ QUEUE_DIR + ¤Þ¤¿¤Ï DRAFT_DIR ¤Î¾ì¹ç¤Ë¤½¤ì¤é¤ò¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-10-14 + + * version 0.4.2 + + * src/headerview.c + src/messageview.c: ¥Ø¥Ã¥À¥Ó¥å¡¼¤Î±ï¤ò½¤Àµ¡£ + * src/gtkutils.h: Sylpheed ¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ò GtkWidget ¤Ë¥­¥ã¥¹¥È¤¹¤ë + ¥Þ¥¯¥í GTK_WIDGET_PTR() ¤òÄɲᣠ+ * src/utils.c: remove_return(), remove_space(): segmentation fault + ¤òµ¯¤³¤¹²ÄǽÀ­¤Î¤¢¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/compose.[ch] + src/mainwindow.c + src/summaryview.c: `źÉդȤ·¤ÆžÁ÷' ¤ò¼ÂÁõ¡£ + * src/utils.[ch]: open_uri(): textview.c ¤È manual.c ¤«¤é URI ¤ò + ³«¤¯´Ø¿ô¤ò°ÜÆ°¡£ + +2000-10-13 + + * src/mainwindow.c + src/summaryview.c + src/compose.[ch] + src/prefs_common.[ch]: `°úÍѤ·¤ÆÊÖ¿®' ¤òºï½ü¤·¡¢`Á´°÷¤ËÊÖ¿®' ¤ò + Äɲá£ÊÖ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò°úÍѤ¹¤ë¤«¤É¤¦¤«¤òÁªÂò¤Ç¤­¤ë¥ª¥×¥·¥ç¥ó + ¤òÄɲᣠ+ +2000-10-12 + + * src/folderview.c: ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤ÎºÆÉÁ²è¤Ë GTK_EVENTS_FLUSH() + ¤ÎÂå¤ï¤ê¤Ë gtkut_wait_for_draw() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/codeconv.[ch] + src/mainwindow.c + src/prefs_common.c: ¥³¡¼¥É¥»¥Ã¥È¤Ë¥Ð¥ë¥È½ô¹ñ (ISO-8859-4,13) + ¤òÄɲᣠ+ * src/compose.c: compose_send(): ¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ë + ¥¨¥é¡¼¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-10-11 + + * src/account.c: account_edit_close(): ºÇ½é¤Ë¥¢¥«¥¦¥ó¥È¤òºîÀ®¤·¤¿ + ¤È¤­¤Ë¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÀßÄꤷ¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + * configure.in: es ¤ò ALL_LINGUAS ¤ËÄɲᣠ+ +2000-10-10 + + * src/codeconv.c: conv_codeset_strdup(): ²Äǽ¤Ê¤é libkcc ¤ò»ÈÍѤ¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + conv_get_code_conv_func(): ÉÔÌÀ¤Ê¥³¡¼¥É¥»¥Ã¥È¤òÊÑ´¹¤·¤Ê¤¤¤è¤¦¤Ë + ¤·¤¿¡£ + * src/folderview.c: folderview_update_msg_num(): ¥¹¥¿¥¤¥ëÊѹ¹ + ¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + +2000-10-09 + + * src/codeconv.c: conv_codeset_strdup(): °ú¿ô¤¬ NULL ¤Î¾ì¹ç¡¢ + ¥³¡¼¥É¥»¥Ã¥È¤ò¼«Æ°Åª¤Ë»ØÄꤹ¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/textview.c: textview_write_line(): ÊÑ´¹¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï + ¥Æ¥­¥¹¥È¥Ó¥å¡¼¤Ë·Ù¹ð¥á¥Ã¥»¡¼¥¸¤ò½ÐÎϤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-10-06 + + * README, README.jp: ¥Þ¥Ë¥å¥¢¥ë¤ÎÃø¼Ô̾¤ò½¤Àµ¡£ + +2000-10-05 + + * src/headerview.[ch] + src/messageview.[ch]: GtkText ¥¦¥£¥¸¥§¥Ã¥È¤ÎÂå¤ï¤ê¤Ë GtkLabel ¤ò + »È¤¦¤è¤¦¤Ë½¤Àµ¡£ + * src/codeconv.c: conv_unmime_header(): ¸½ºß¤Î locale ¤¬ EUC-JP ¤Ç + ¤«¤Ä libjconv ¤¬»ÈÍѤµ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ëɽ¼¨ÉÔǽ¤Ê¥³¡¼¥É¤òºï½ü¤¹¤ë + ¤è¤¦¤Ë½¤Àµ¡£ + +2000-10-04 + + * src/procmime.[ch] + src/messageview.c + src/mimeview.c + src/textview.c: MIME ¥á¥Ã¥»¡¼¥¸¤ò¤è¤ê˾¤Þ¤·¤¤·Á¤Ç²òÀϤ¹¤ë¤è¤¦¤Ë + ½¤Àµ¡£ + * src/imap.c: imap_parse_address(): ¥Ð¥°¤ò½¤Àµ¡£ + +2000-10-03 + + * src/procmsg.[ch]: procmsg_get_message_file_path() ¤òÄɲᣠ+ * src/recv.c: recv_bytes_write(): CR+LF -> LF ÊÑ´¹¥ë¡¼¥Á¥ó¤òÄɲᣠ+ * src/imap.[ch]: IMAPSession Ãæ¤Î¥á¥ó¥Ð `group' ¤Î̾Á°¤ò `mbox' + ¤ËÊѹ¹¡£ + imap_gen_send(): ¥Ñ¥¹¥ï¡¼¥É¤ò¥í¥°¤Ë½ÐÎϤ·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + ¥»¥Ã¥·¥ç¥óÇË´þ¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + * src/folderview.c: folderview_write_cache(): IMAP ¥Õ¥©¥ë¥À¥ê¥¹¥È¤ò + Êݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/procmime.c: procmime_scan_multipart_message(): źÉÕ¤µ¤ì¤¿ + RFC822 ¤Î¥Ñ¡¼¥È¤Ç½ªÃ¼¤Î¶­³¦¤¬É½¼¨¤µ¤ì¤Æ¤·¤Þ¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/prefs_common.c: ¥Ç¥Õ¥©¥ë¥È¤Î¥Ä¡¼¥ë¥Ð¡¼¤Î¥¹¥¿¥¤¥ë¤ò¥¢¥¤¥³¥ó¤È + ¥Æ¥­¥¹¥È¤ÎξÊý¤ËÊѹ¹¡£ + +2000-10-02 + + * src/imap.c: imap_get_uncached_messages(): ¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿¥¨¥ó¥Ù + ¥í¡¼¥×¤ò¼èÆÀ¤·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + imap_session_get_message_info(): ¥»¥Ã¥·¥ç¥ó¤¬³ÎΩ¤µ¤ì¤Æ¤¤¤Ê¤¤ + ¾ì¹ç¤Ï¥­¥ã¥Ã¥·¥å¤Î¤ß¤òÆɤ߹þ¤à¤è¤¦¤Ë¤·¤¿¡£ + * src/procmsg.c: procmsg_set_flags(): IMAP ¥Õ¥©¥ë¥À¤ËÂбþ¡£ + *src/news.c: news_get_article_info(): ¥»¥Ã¥·¥ç¥ó¤¬³ÎΩ¤µ¤ì¤Æ¤¤¤Ê¤¤ + ¾ì¹ç¤Ï¥­¥ã¥Ã¥·¥å¤Î¤ß¤òÆɤ߹þ¤à¤è¤¦¤Ë¤·¤¿¡£ + +2000-10-01 + + * src/textview.c: textview_write_line(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ + * src/folderview.[ch]: ¥¢¥«¥¦¥ó¥È¾ðÊ󤫤é IMAP4 ¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/imap.[ch]: imap_session_get(): ¥¢¥«¥¦¥ó¥È¾ðÊ󤫤é IMAP4 + ¥»¥Ã¥·¥ç¥ó¤òÀ¸À®¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-09-30 + + * src/imap.[ch]: IMAP4 Âбþ¤Î¤¿¤á¤ËÄɲᣠ+ * src/summaryview.[ch] + src/procmsg.c + src/recv.[ch]: IMAP4 Âбþ¤Î¤¿¤á¤Ë½¤Àµ¡£ + * src/folderview.c: ¤µ¤é¤Ë IMAP4 ¤ò¼ÂÁõ¡£ + * src/procmsg.[ch]: »ØÄꤵ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò¼èÆÀ¤·¤Æ¤½¤Î¥Õ¥¡¥¤¥ë̾¤ò + ÊÖ¤¹ procmsg_get_message_file() ¤òÄɲᣠ+ * src/gtkutils.c: gtkut_widget_wait_for_draw(): Í¿¤¨¤é¤ì¤¿ + ¥¦¥£¥¸¥§¥Ã¥È¤¬ÉԲĻë¾õÂ֤ξì¹ç¤Ë½èÍý¤ò¥í¥Ã¥¯¤·¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ + +2000-09-28 + + * src/folderview.[ch]: IMAP4 ´Ø·¸¤Î¥³¡¼¥É¤òÄɲᣠ+ +2000-09-28 + + * version 0.4.1 + + * src/main.h: IMAP_CACHE_DIR ¤òÄɲᣠ+ * src/utils.[ch]: get_imap_cache_dir() ¤òÄɲᣠ+ * src/procmsg.h: M_IMAP ¤ò MsgType ¤ËÄɲä·¡¢ MSG_IMAP ¤ò MsgFlags + ¤ËÄɲᣥޥ¯¥í MSG_IS_IMAP() ¤òÄɲᣠ+ * src/codeconv.c: setlocale() ¤Î¤¿¤á¤Ë `#include ' ¤òÄɲᣠ+ * sylpheed.spec: %files ¥»¥¯¥·¥ç¥ó¤ò½¤Àµ¡£ + +2000-09-27 + + * version 0.4.0 + + * src/codeconv.c: conv_get_current_charset(): ʸ»úÎó¤ò strncasecmp() + ¤ÇÈæ³Ó¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: comopse_reply_parse_header(): OE5 ¤Ë¤è¤Ã¤ÆÀ¸À® + ¤µ¤ì¤ë°Û¾ï¤Ê References: ¥Ø¥Ã¥À¤ÎÌäÂê¤ò²óÈò :( + +2000-09-26 + + * src/prefs_common.c + src/prefs_account.c: ¥¦¥£¥¸¥§¥Ã¥È¤ÎÇÛÃÖ¤ò½¤Àµ¡£ + +2000-09-26 + + * version 0.3.99 + + * src/*.[ch]: ¥½¡¼¥¹¥Õ¥¡¥¤¥ë¤ÎÀèƬ¤ËÃøºî¸¢É½¼¨¤òÄɲᣠ+ * src/compose.c: compose_write_attach(): ¥Õ¥¡¥¤¥ë̾¥¨¥ó¥³¡¼¥É + ¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + +2000-09-25 + + * src/mainwindow.c: ¥Þ¥Ë¥å¥¢¥ë¤Î¥á¥Ë¥å¡¼¥¨¥ó¥È¥ê¤ò½¤Àµ¡£ + * src/compose.c + src/codeconv.[ch]: compose_encode_header() ¤ò codeconv.c ¤Ë°ÜÆ°¤·¡¢ + libjconv ¥Ñ¥Ã¥Á¤òŬÍÑ¡£ + * src/utils.c: strdup_mbstowcs(), strdup_wcstombs(): ³ÎÊݤµ¤ì¤¿ + ¥á¥â¥ê¤òºÇŬ¤Ê¥µ¥¤¥º¤Ë½Ì¤á¤ë¤¿¤á¤Ë g_realloc() ¤ò»ÈÍÑ¡£ + * src/prefs_common.[ch]: Á÷¿®¥³¡¼¥É¥»¥Ã¥È¤Î¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤òÄɲᣠ+ * src/compose.c: compose_send(): ¿½ÅÁ÷¿®¤òÈò¤±¤ë¤¿¤á¤ËÇÓ¾¥í¥Ã¥¯¤ò + Äɲᣠ+ * configure.in: '--enable-ipv6=no' ¤ò¥Ç¥Õ¥©¥ë¥È¤Ë¤·¤¿¡£ + * src/compose.c: compose_write_attach(): źÉÕ¥Õ¥¡¥¤¥ë̾¤ò + ¥¨¥ó¥³¡¼¥É¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/procmsg.c: procmsg_get_last_message_number(): ¥Õ¥¡¥¤¥ë¥¿¥¤¥×¤ò + ¥Á¥§¥Ã¥¯¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + procmsg_move_messages_with_dest(): Ʊ̾¤Î¥Ç¥£¥ì¥¯¥È¥ê¤¬Â¸ºß¤·¤¿ + ¾ì¹ç¤Ë¥á¥Ã¥»¡¼¥¸¤Î°ÜÆ°¤Ë¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ¡£ + * src/utils.c: is_ascii_str(): '\t', ' ', '\r', '\n' ¤¬ ASCII ʸ»ú + ¤Ë´Þ¤Þ¤ì¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-09-24 + + * src/compose.c + src/procmime.[ch]: libjconv »ÈÍÑ»þ¤Ë¼ÂºÝ¤ËÆ°ºî¤¹¤ë¤è¤¦¤Ë½¤Àµ :) + * src/codeconv.[ch]: °ú¿ô¤Ç»ØÄꤵ¤ì¤¿¥³¡¼¥É¥»¥Ã¥È¤Ë½¾¤Ã¤Æʸ»úÎó¤Î + ¥³¡¼¥É¥»¥Ã¥È¤òÊÑ´¹¤¹¤ë conv_codeset_strdup() ¤òÄɲᣠ+ * src/utils.[ch]: ʸ»úÎó¤¬ 7bit ASCII ¤«¤É¤¦¤«¤òȽÊ̤¹¤ë + is_ascii_str() ¤òÄɲᣠ+ * src/procmime.[ch] + src/codeconv.[ch]: ʸ»ú½¸¹ç´ØÏ¢¤Î´Ø¿ô¤ò codeconv.c ¤Ë°ÜÆ°¡£ + * BONAIM ¤µ¤óºî¤Î¥Ñ¥Ã¥Á¤È¥Þ¥Ë¥å¥¢¥ë¤òÅý¹ç(´¶¼Õ!)¡£ + +2000-09-23 + + * configure.in + src/compose.c + src/gtkutils.c + src/mainwindow.c + src/procmime.[ch] + src/textview.c + src/unmime.[ch]: libjconv ¤ò»ÈÍѤ·¡¢UTF-8 (Unicode) ¤ò´Þ¤à¿¿ô¤Î + locale ¤ò°·¤¨¤ë¤è¤¦¤Ë¤¹¤ëÈõ¸ý¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/account.c: ¥¢¥«¥¦¥ó¥ÈÊÔ½¸¥À¥¤¥¢¥í¥°¤ÇÊ̤Υ¢¥«¥¦¥ó¥È¤¬ÁªÂò¤µ¤ì + ¤¿¤È¤­¤Ë¥¢¥«¥¦¥ó¥È¤òÀÚ¤êÂؤ¨¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + +2000-09-20 + + * src/prefs_common.[ch] + src/textview.c: ´Êά¥Ø¥Ã¥À¤ò¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ëɽ¼¨¤¹¤ë¤«¤É¤¦¤«¤ò + »ØÄꤹ¤ë¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ * src/codeconv.[ch]: MIME ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Ø¥Ã¥À¤ò¥Ç¥³¡¼¥É¤·¡¢ + ¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤òÊÑ´¹¤¹¤ë´Ø¿ô conv_unmime_header() ¤òÄɲᣠ+ conv_unreadable_latin() ¤òÄɲä·¡¢ conv_latintodisp() ¤ò½¤Àµ¡£ + * src/messageview.[ch]: ¥¨¥¹¥±¡¼¥×¥­¡¼¤¬²¡¤µ¤ì¤¿¤È¤­¤Ë¥¦¥£¥ó¥É¥¦¤ò + ÊĤ¸¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-09-17 + + * src/imageview.c: ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤¬¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Î¾õÂ֤ΤȤ­ + segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + * src/prefs_common.c: ³°Éô¥¨¥Ç¥£¥¿¥³¥Þ¥ó¥É¥é¥¤¥ó¤Î¥ê¥¹¥È¤Ë + `xemacs %s' ¤òÄɲᣠ+ +2000-09-16 + + * version 0.3.29 + + * src/summaryview.c: ¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤Ç¿·µ¬¥á¥Ã¥»¡¼¥¸¥¦¥£¥ó¥É¥¦¤ò + ³«¤±¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch] + src/messageview.c: ¥á¥Ã¥»¡¼¥¸¥¦¥£¥ó¥É¥¦¤Î¥¦¥£¥ó¥É¥¦¥µ¥¤¥º¤ò + Êݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_account.c: ¥×¥í¥È¥³¥ë¤Î¥ª¥×¥·¥ç¥ó¥á¥Ë¥å¡¼¤Ë + `¤Ê¤· (¥í¡¼¥«¥ë)' ¤òÄɲᣠ+ +2000-09-15 + + * Makefile.am: EXTRA_DIST ¤Ë autogen.sh ¤òÄɲᣠ+ +2000-09-09 + + * src/prefs_common.c: ¥Õ¥©¥ó¥ÈÁªÂò¥À¥¤¥¢¥í¥°¤òÍ­¸ú¤Ë¤¹¤ë + Paul Rolland ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/compose.[ch] + src/utils.[ch]: compose.[ch] ¤Î tzoffset() ¤È compose_get_date() + ¤ò utils.[ch] ¤Ë°ÜÆ°¡£ + * src/main.[ch]: ¥Õ¥£¥ë¥¿¥Õ¥¡¥¤¥ë¤Î̾Á°¤ò `filterrc' ¤ËÊѹ¹¡£ + +2000-09-06 + + * src/compose.[ch] + src/utils.[ch]: °úÍÑÉô¤òÀµ¤·¤¯²òÀϤ¹¤ë¤è¤¦¤Ë¥¢¥É¥ì¥¹¤Î²òÀÏ + ¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + * src/textview.c: textview_show_part(): ¥Ñ¡¼¥È¤¬ text/plain ¤Î + ¾ì¹ç¤Ï´Êά¥Ø¥Ã¥À¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-09-03 + + * src/messageview.[ch] + src/summaryview.[ch] + src/mainwindow.c: ¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç¥á¥Ã¥»¡¼¥¸¤ò³«¤±¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/messageview.[ch] + src/mimeview.[ch] + src/textview.[ch] + src/imageview.[ch]: destroy ´Ø¿ô¤òÄɲä·¡¢¥­¡¼½èÍý¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + +2000-09-02 + + * src/socket.c: sock_connect_by_getaddrinfo(): segmentation fault + ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ(¹õÂô¤µ¤ó thanks)¡£ + * src/alertpanel.c: ¥Õ¥©¡¼¥«¥¹¤µ¤ì¤ë¥Ü¥¿¥ó¤¬ÁªÂò²Äǽ¤Ê¤è¤¦¤Ë½¤Àµ¡£ + * src/account.c + src/compose.c + src/folderview.c: ·Ù¹ð¥Ñ¥Í¥ë¤Î¥Ü¥¿¥ó¤Î½ç½ø¤¬ `¤Ï¤¤', `¤¤¤¤¤¨' ¤Ë + ¤Ê¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-09-01 + + * src/utils.[ch]: ¥³¥Þ¥ó¥É¥é¥¤¥ó¤ò execvp() ¤ò»È¤Ã¤Æ¼Â¹Ô¤¹¤ë + execute_async() ¤È execute_command_line() ¤òÄɲᣠ+ * src/textview.c + src/mimeview.c + src/procmsg.c: ¥»¥­¥å¥ê¥Æ¥£¤Î¤¿¤á¤Ë system() ¤ò + execute_command_line() ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + * src/procmsg.c: system() ¤ËÌᤷ¤¿¡£ + * src/utils.c: execute_command_line() ¤ò½¤Àµ¡£ + +2000-08-31 + + * src/mainwindow.c: main_window_get_size(): MessageView ¤¬Èóɽ¼¨ + ¤Î¾ì¹ç¤Ï SummaryView ¤Î¹â¤µ¤ò¹¹¿·¤·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + * src/compose.[ch]: ³°Éô¥¨¥Ç¥£¥¿½èÍý¤Î¤¤¤¯¤Ä¤«¤ÎÌäÂê¤ò½¤Àµ¤¹¤ë + ¤Ê¤«¤¬¤ï¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/uuencode.[ch] + src/procmime.[ch]: Content-Transfer-Encoding: x-uuencode ¤ËÂбþ + ¤¹¤ëÊ¿¾¾¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + +2000-08-30 + + * src/compose.[ch] + src/prefs_common.[ch]: ³°Éô¥¨¥Ç¥£¥¿µ¡Ç½¤ò¼ÂÁõ¡£ + * src/compose.c: compose_attach_property(): źÉÕ¥Õ¥¡¥¤¥ë¤Î°À­¤ò + Êѹ¹¤¹¤ë¤È¤­¤Î¥Ð¥°¤ò¤¤¤¯¤Ä¤«½¤Àµ¡£ + * src/compose.c: ³°Éô¥¨¥Ç¥£¥¿´Ø¿ô¤Î¥Ð¥°¤ò¤¤¤¯¤Ä¤«½¤Àµ¡£ + +2000-08-29 + + * version 0.3.28 + + * src/mainwindow.c + src/prefs_common.[ch] + src/summaryview.c: ºÆµ¯Æ°»þ¤Ë¥¦¥£¥¸¥§¥Ã¥È¤Î¥µ¥¤¥º¤òÉü¸µ¤¹¤ë + Paul Rolland ¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/folderview.c + src/prefs_common.[ch] + src/summaryview.c: CTree ¤Î¥«¥é¥àÉý¤òÊݸ¤¹¤ë Paul Rolland ¤µ¤ó + ¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + +2000-08-27 + + * src/headerview.c: HeaderView ¤Î¹â¤µ¤ò½¤Àµ¡£ + * src/textview.c: textview_show_part(): ¤â¤·¥á¥Ã¥»¡¼¥¸¤¬¥·¥ó¥°¥ë + ¥Ñ¡¼¥È¤Î RFC822 ¥á¥Ã¥»¡¼¥¸¤Ê¤é¡¢Ä̾ï¤Î¥Æ¥­¥¹¥È¤È¤·¤Æ½èÍý¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.c + src/summaryview.c: ¥­¡¼Áàºî¼þ¤ê¤ò¤¤¤¯¤Ä¤«Êѹ¹¡£ + * src/prefs_common.[ch]: `assort' ¤È¤¤¤¦Ã±¸ì¤ò `filter' ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + +2000-08-26 + + * src/codeconv.[ch]: ISO-8859-1 ¤ËÂбþ¤¹¤ë¤¿¤á¤Ë conv_latintodisp() + ¤òÄɲᣠ+ * src/procheader.c: procheader_get_one_field(): ¥Õ¥¡¥¤¥ë¤ÎºÇ½é¤Î¹Ô + ¤¬¥¹¥Ú¡¼¥¹¤Þ¤¿¤Ï¥¿¥Ö¤Î¾ì¹ç¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò + ½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + * src/mimeview.c: mimeview_drag_data_get(): ¥Õ¥¡¥¤¥ë̾¤¬ + G_DIR_SEPARATOR ¤ò´Þ¤Þ¤Ê¤¤¤è¤¦¤Ë½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + * src/prefs_account.c + src/prefs_common.c: ¥À¥¤¥¢¥í¥°¥µ¥¤¥º¤ò½¤Àµ¡£ + * src/prefs.c: ¥À¥¤¥¢¥í¥°¥¦¥£¥ó¥É¥¦¤ò¹­¤²¤é¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-08-25 + + * version 0.3.27 + + * configure.in: libintl ¤Î¸¡½Ð¤ò¼ºÇÔ¤µ¤»¤ëÉÔÍ×¤Ê + AC_CHECK_FUNC(gettext) ¤òºï½ü¡£ + * src/filter.[ch] + src/prefs_common.c: `not contain' ¤ò¼ÂÁõ¡£¤½¤·¤Æ¾­Íè¤Î³ÈÄ¥¤Î¤¿¤á¤Ë + ½¤Àµ¡£ + * src/imageview.c: ¥Þ¥¦¥¹¥¤¥Ù¥ó¥È¤òÄϤޤʤ¤¤è¤¦¤Ë alertpanel_error() + ¤ò g_warning() ¤ËÊѹ¹¡£ + * src/compose.[ch]: Compose ¥ª¥Ö¥¸¥§¥¯¥È¤Î¥ê¥¹¥È¤òÊÝ»ý¤¹¤ë + compose_list ¤òÄɲᢤ½¤·¤Æ´Ø¿ô compose_get_compose_list() ¤òÄɲᣠ+ * src/main.c + src/mainwindow.c + src/summaryview.c: ºîÀ®Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤¹¤ì¤Ð³Îǧ¤¹¤ë¤è¤¦¤Ë + ¤·¤¿¡£ + +2000-08-23 + + * src/compose.c: compose_reply_set_entry(): Á÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤Î + ¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ë segmentation fault ¤òµ¯¤³¤¹ + ¥Ð¥°¤ò½¤Àµ(¤³¤È¤Ö¤­¤µ¤ó thanks)¡£ + compose_attach_property(): ÆþÎÏ¥¨¥é¡¼¤ò½èÍý¤Ç¤­¤ë¤è¤¦¤Ë¥×¥í¥Ñ¥Æ¥£ + ¥À¥¤¥¢¥í¥°¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + * src/mimeview.c: MimeView ¤«¤é¤Î¥É¥é¥Ã¥°&¥É¥í¥Ã¥×¤ò²Äǽ¤Ë¤¹¤ë + Ê¿¾¾¤µ¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/headerview.[ch] + src/procheader.c + src/procmsg.h: ×¢Å礵¤ó¤«¤é¤Î X-Face Âбþ¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + +2000-08-22 + + * src/compose.c: compose_attach_property(): ¥×¥í¥Ñ¥Æ¥£¥À¥¤¥¢¥í¥°¤Ç + ¼ÂºÝ¤ËźÉÕ¥Õ¥¡¥¤¥ë¤Î°À­¤òÊѹ¹¤Ç¤­¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-08-21 + + * configure.in + src/Makefile.am: gdk_imlib ¤Î¤¿¤á¤Ë¹¹¿·¡£ + * AUTHORS ¤È NEWS ¤òÄɲᣠ+ * configure.in + acconfig.h + src/Makefile.am: configure ¤¬ gdk-pixbuf ¤È gdk_imlib ¥é¥¤¥Ö¥é¥ê¤ò + ¼«Æ°¸¡½Ð¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£IPv6 ¸¡½Ð¤Î¥Ð¥°¤ò½¤Àµ¡£ + * src/imageview.c: gdk-pixbuf ¤ËÂбþ¡£ + * README + README.jp + INSTALL + INSTALL.jp: Æ⢲èÁüɽ¼¨µ¡Ç½¤Ë¤Ä¤¤¤Æ¤Î¸ÀµÚ¤òÄɲᣠ+ * configure.in: configure ¤¬ gdk-pixbuf ¤È gdk_imlib ¥é¥¤¥Ö¥é¥ê¤ò + ̵¸ú¤Ë¤Ç¤­¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-08-20 + + * src/imageview.[ch] + src/main.c + src/messageview.[ch] + src/mimeview.[ch]: ²èÁü¤òɽ¼¨²Äǽ¤Ë¤¹¤ë×¢Å礵¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ + (´¶¼Õ!)¡£ + +2000-08-19 + + * version 0.3.26 + + * src/summaryview.c: summary_assort_func(): `¼õ¿®¤·¤Ê¤¤' ÀßÄê¤ò + Èò¤±¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-08-18 + + * src/filesel.c: ¥À¥¤¥¢¥í¥°¤ò³«¤¤¤¿¤È¤­¤Ë°ÊÁ°¤Î¥Ç¥£¥ì¥¯¥È¥ê¤òµ­²± + ¤·¤Æ¤ª¤¯¤è¤¦¤Ë¤¹¤ë×¢Å礵¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!)¡£ + * src/summaryview.[ch]: ´Ø¿ô summary_redisplay_msg() ¤òÄɲᣠ+ * src/mainwindow.c: set_charset_cb(): ʸ»ú¥³¡¼¥É¥»¥Ã¥È¤¬Êѹ¹¤µ¤ì¤¿ + ¤È¤­¤Ë¸½ºßɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸¤òºÆɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.c + src/pop.c + src/prefs_common.c + src/filter.h: ¿¶¤êʬ¤±¥ë¡¼¥ë¤Ë¤è¤Ã¤ÆÆÃÄê¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤·¤Ê¤¤ + ¤è¤¦¤Ë¤Ç¤­¤ëÅÄÃ椵¤ó¤«¤é¤Î¥Ñ¥Ã¥Á¤òŬÍÑ(´¶¼Õ!) + +2000-08-15 + + * src/procmsg.[ch]: MsgFlags ·¿¤Ë MSG_MIME ¤òÄɲá£MSG_MIME ¥Õ¥é¥°¤ò + ½èÍý¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£¿·¤·¤¤¥á¥Ã¥»¡¼¥¸¤òÄ´¤Ù¤Ê¤¤¤è¤¦¤Ë»ØÄꤵ¤ì¤Æ¤¤¤Æ + ¤â¡¢¥­¥ã¥Ã¥·¥å¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ¤·¤¿¤é¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼ + ¥¸¤òÄ´¤Ù¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/procheader.c: procheader_parse(): ¥Þ¥ë¥Á¥Ñ¡¼¥È MIME ¥á¥Ã¥»¡¼¥¸ + ¤ÎȽÊ̤òÄɲᣠ+ * src/main.h: CACHE_VERSION ¤òÁý²Ã¡£ + * src/summaryview.[ch]: ¥á¥Ã¥»¡¼¥¸¤¬¥Þ¥ë¥Á¥Ñ¡¼¥È¤«¤É¤¦¤«¤òɽ¼¨¤¹¤ë + `MIME' ¥«¥é¥à¤òÄɲᣠ+ * src/prefs_common.[ch]: ɽ¼¨¹àÌܤÎÀßÄê¤Ë `MIME' ¥«¥é¥à¤òÄɲᣠ+ * src/pixmaps/clip.xpm ¤òÄɲᣠ+ * src/summaryview.c + src/procmsg.[ch]: °õºþÁ°¤Ë°õºþ¥³¥Þ¥ó¥É¤ÎÆþÎϤòÂ¥¤¹¤è¤¦¤Ë½¤Àµ¡£ + +2000-08-14 + + * src/folderview.c: folderview_create() + src/summaryview.c: summary_create(): + src/addressbook.c: addressbook_create(): CTree ¤Î¥¨¥­¥¹¥Ñ¥ó¥À¤Î + ¥¹¥¿¥¤¥ë¤ò GTK_CTREE_EXPANDER_SQUARE ¤Ë»ØÄê¡£ + * src/compose.c: ¥×¥í¥Ñ¥Æ¥£¥À¥¤¥¢¥í¥°¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò½¤Àµ¡£ + +2000-08-13 + + * src/compose.c: źÉÕ¥Õ¥¡¥¤¥ë¤Î¥×¥í¥Ñ¥Æ¥£¥À¥¤¥¢¥í¥°¤òÄɲᣠ+ +2000-08-11 + + * src/procmsg.[ch]: Í¿¤¨¤é¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò°õºþ¤¹¤ë´Ø¿ô + procmsg_print_message() ¤òÄɲᣠ+ * src/summaryview.c: summary_print(): ÁªÂò¤µ¤ì¤¿Á´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ò + °õºþ¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/folderview.c: folderview_select_node(): ¼õ¿®È¢¤¬¶õ¤Î¾ì¹ç¡¢ + ¼è¹þ»þ¤Ë¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤Ë¥Õ¥©¡¼¥«¥¹¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + +2000-08-10 + + * version 0.3.25 + + * src/prefs_commmon.[ch]: `¤½¤Î¾' ¥¿¥Ö¤È¡¢°õºþ¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ ¤Þ¤¿³°Éô¥Ö¥é¥¦¥¶¥ª¥×¥·¥ç¥ó¤ò¤½¤³¤Ø°ÜÆ°¡£ + * src/mainwindow.c + src/summayview.[ch]: °õºþ¥á¥Ë¥å¡¼¤òÄɲä·¡¢°õºþÍÑ´Ø¿ô¤ò¼ÂÁõ¡£ + +2000-08-09 + + * src/prefs_account.c: smtp_server ¤ÎÃͤΥǥե©¥ë¥È¤ò NULL ¤Ë¤·¤¿¡£ + * src/folderview.c: folderview_update_msg_num(): ¥´¥ßÈ¢¥Õ¥©¥ë¥À¤Ë + ¿·Ã塢̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤Ã¤¿¾ì¹ç¤Ç¤â¶¯Ä´¤·¤Ê¤¤¤è¤¦¤ËÊѹ¹¡£ + +2000-08-08 + + * src/filesel.c: filesel_select_file(): ¥Õ¥¡¥¤¥ëÁªÂò¥À¥¤¥¢¥í¥°¤ò + ÊĤ¸¤¿Ä¾¸å¤Ë¾¤Î¥À¥¤¥¢¥í¥°³«¤«¤ì¤¿¾ì¹ç¤Ë segmentation fault ¤ò + µ¯¤³¤¹¥Ð¥°¤ò(¿ʬ)½¤Àµ¡£ + +2000-08-05 + + * src/compose.c: compose_encode_header(): wctomb() ¤¬¼ºÇÔ¤·¤¿¤È¤­¤Ë + ̵¸Â¥ë¡¼¥×¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-08-04 + + * version 0.3.24 + + * src/mimeview.c: ¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤È¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤ÇźÉÕ + ¥Õ¥¡¥¤¥ë¤ò³«¤±¤ë¤è¤¦¤Ë¤·¤¿¡£¥³¡¼¥É¤òÀ°Íý¡£ + * src/procmime.[ch]: ¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥È¤òÊݸ¤¹¤ë + ´Ø¿ô procmime_get_part() ¤òÄɲᣠ+ +2000-08-03 + + * src/main.[ch] + src/mimeview.c + src/prefs_common.[ch] + src/procmime.[ch] + src/utils.[ch]: źÉÕ¤µ¤ì¤¿²èÁü¡¢²»À¼¡¢ HTML ¥Õ¥¡¥¤¥ë¤ò³«¤±¤ë¤è¤¦¤Ë + ¤¹¤ë¥Ñ¥Ã¥Á¤òŬÍÑ(¶¶Ëܤµ¤ó thanks)¡£ + * src/filter.c: filter_match_condition(): »ØÄꤵ¤ì¤¿¥Õ¥£¥ë¥¿¤Î body + ¤¬ NULL ¤Î¤È¤­ segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£¤½¤·¤Æ¤½¤Î + ¾ì¹ç¤Ï¥Õ¥£¥ë¥¿¤¬¥Þ¥Ã¥Á¤·¤¿¤È¤ß¤Ê¤¹¤è¤¦¤Ë¤·¤¿¡£ + +2000-07-30 + + * src/summaryview.c: + summary_save_as(): ¥Ë¥å¡¼¥¹µ­»ö¤òÊݸ¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + summary_display_msg(): ´û¤Ë¥Ë¥å¡¼¥¹µ­»ö¤ò½èÍý¤·¤Æ¤¤¤ë¤È¤­¤Ë + Ê̤Υ˥塼¥¹µ­»ö¤¬Æɤޤì¤ë¤Î¤òËɤ°¤¿¤á¤ËÇÓ¾¥í¥Ã¥¯¤òÄɲᣠ+ * src/gtkutils.[ch]: draw ¥·¥°¥Ê¥ë¤¬È¯¹Ô¤µ¤ì¤ë¤Î¤òÂÔ¤Ä + gtkut_widget_wait_for_draw() ¤òÄɲᣠ+ * src/mainwindow.c: + main_window_cursor_wait() + main_window_cursor_normal(): ¥«¡¼¥½¥ë¤òľ¤Á¤ËÊѹ¹¤¹¤ë¤¿¤á¤Ë + gdk_flush() ¤òÄɲᣠ+ * Makefile.am + libkcc/Makefile.am: `make dist' ¤Î¤¿¤á¤Ë EXTRA_DIST ¤òÄɲᣠ+ Makefile.am ¤Ë¥¿¡¼¥²¥Ã¥È `release' ¤òÄɲᣠ+ +2000-07-28 + + * src/socket.c: IPv6 ¤ËÂбþ¡£ + * configure.in + acconfig.h: IPv6 ¤Î¸¡½Ð¤òÄɲᣠ+ * prefs_common.c: toolbar_style ¤Î¥Ç¥Õ¥©¥ë¥È¤ò¥¢¥¤¥³¥ó¤Î¤ß¤ËÊѹ¹¡£ + +2000-07-27 + + * ºÇ½é¤Î cvs ¥¤¥ó¥Ý¡¼¥È¡£ + * README ¤È README.jp ¤ò¹¹¿·¡£ + +2000-07-24 + + * version 0.3.23 + + * src/procmime.[ch]: ¥Ä¥ê¡¼¤Î¥Î¡¼¥É¤È¤·¤Æ°·¤¨¤ë¤è¤¦¤Ë MimeInfo ¤Î + ¹½Â¤ÂΤòÊѹ¹¡£ + Á´¤Æ¤Î MimeInfo ¤òºÆµ¢Åª¤Ë²òÊü¤¹¤ë procmime_mimeinfo_free_all() + ¤òÄɲᣠ+ °úÍѤΤ¿¤á¤Ë¥á¥Ã¥»¡¼¥¸¤ò²òÀϤ·¤Æ¥Æ¥­¥¹¥È¥Ñ¡¼¥È¤ò¼èÆÀ¤¹¤ë + procmime_get_text_part() ¤òÄɲᣠ+ * src/mimeview.c: mimeview_scan_multipart_message() ¤ò + procmime_scan_multipart_message() ¤È mimeview_set_multipart_tree() + ¤Ëʬ³ä¡£ + * src/compose.c: compose_quote(), compose_forward(): + ¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Æ¥­¥¹¥È¥Ñ¡¼¥È¤òŬÀڤ˰úÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + Compose ¥¦¥£¥ó¥É¥¦¤Î¥µ¥¤¥º¤òÊÝ»ý¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch]: ¥á¥ó¥Ð¤Ë compose_width ¤È compose_height + ¤òÄɲᣠ+ * src/textview.c: textview_show_part(): ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + * src/codeconv.[ch]: ´Ø¿ô conv_get_code_conv_func() ¤òÄɲᣠ+ +2000-07-20 + + * version 0.3.22 + + * src/codeconv.[ch]: ¥á¥Ã¥»¡¼¥¸¤Î²þ¹Ô¥³¡¼¥É¤¬ CR+LF ¤Î¾ì¹ç¤Ë¥´¥ßʸ»ú + ¤¬É½¼¨¤µ¤ì¤ë¥Ð¥°¤ò½¤Àµ¡£ conv_sjistoeuc() ¤òÄɲᣠ+ * src/summaryview.c: summary_attract_by_subject(): ¼Â¹Ô¤·¤¿»þ¤Ë + ¸½ºß¤Îɽ¼¨°ÌÃÖ¤òÁªÂò¹Ô¤Î¤È¤³¤í¤Ë°ÜÆ°¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/textview.c: textview_show_part(): ʸ»ú¥»¥Ã¥ÈȽÄê¥ë¡¼¥Á¥ó¤ò + ½¤Àµ¡£ + * src/folderview.c: folderview_update_msg_num(): boldfont ¤¬ NULL + ¤Î¾ì¹ç¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + * src/compose.c: compose_create(): ¥¦¥£¥ó¥É¥¦ºîÀ®»þ¤Ë¼«¿È¤ò¥¢¥É¥ì¥¹Ä¢ + ¤Î¥¿¡¼¥²¥Ã¥È¤Ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-07-19 + + * src/compose.c: compose_send(): Á÷¿®¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¤ËÁ÷¿®ÂÔ¤Á¤Ë + Æþ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤·¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ(»³ËÜ(¹§)¤µ¤ó + thanks)¡£ + +2000-07-15 + + * src/inc.[ch]: ·ë²Ì¤Ë¤è¤Ã¤Æ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¥À¥¤¥¢¥í¥°¤òÊѹ¹¤¹¤ë + ¤è¤¦¤Ë½¤Àµ¡£ + +2000-07-14 + + * src/mainwindow.c: main_window_create(): ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Î + ¥¢¥«¥¦¥ó¥È¥Ü¥¿¥ó¤¬É¬Íװʾå¤Ë¹­¤¬¤é¤Ê¤¤¤è¤¦¤Ë¤½¤Î usize ¤ò + 1 ¤Ë¤·¤¿¡£ + * src/account.[ch]: account_foreach(): ´Ø¿ô¤¬Èó¥¼¥í¤òÊÖ¤·¤¿¤é + ½èÍý¤òÃæÃǤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.[ch] + src/pop.c: ¥á¥Ã¥»¡¼¥¸½èÍý¤Ë¼ºÇÔ¤·¤¿¾ì¹ç¡¢¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸ + ¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-07-04 + + * version 0.3.21 + + * src/mainwindow.c: ¥¢¥«¥¦¥ó¥È¥Ä¡¼¥ë¥Ü¥¿¥ó¤Þ¤¿¤Ï¥¢¥«¥¦¥ó¥È¥¹¥Æ¡¼¥¿¥¹ + ¥Ð¡¼¤¬²¡¤µ¤ì¤¿¤é¥¢¥«¥¦¥ó¥ÈÁªÂò¥á¥Ë¥å¡¼¤ò¥Ý¥Ã¥×¥¢¥Ã¥×¤¹¤ë¤è¤¦¤Ë + ¤·¤¿¡£ + * src/folderview.c + src/prefs.c: ENOENT ¤Î perror ¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¡£ + * src/pop.c: UIDL ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï LAST ¥³¥Þ¥ó¥É¤ÇÂåÍѤ¹¤ë¤è¤¦¤Ë + ¤·¤¿¡£ + +2000-07-01 + + * src/procheader.c: procheader_parse(): References: ¥Ø¥Ã¥À¤ò + Àµ¤·¤¯²òÀϤ·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ(»³¸ý¤µ¤ó thanks)¡£ + +2000-06-29 + + * version 0.3.20 + + * src/compose.c: compose_reply_set_entry(): ÊÖ¿®»þ¤ËÀµ¤·¤¯ cc + ¤·¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/mainwindow.c + src/summaryview.c: ¥á¥¤¥ó¥á¥Ë¥å¡¼¤È¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤òÀ°Íý¡£ + +2000-06-26 + + * version 0.3.19 + + * src/prefs_account.[ch] + src/compose.c: ¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤Ë Cc:, Bcc:, Reply-To: ¤ò¼«Æ°Åª¤Ë + »ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿(¤Ê¤«¤¬¤ï¤µ¤ó thanks)¡£ + +2000-06-25 + + * src/prefs_common.[ch] + src/mainwindow.c + src/main.c: ½ªÎ»»þ¤Ë¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ëÁ°¤Ë¿Ò¤Í¤ë¤«¤É¤¦¤«¤òÁªÂò + ¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.c: ¥³¡¼¥É¤È¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¾¯¤·À°Íý¡£ + * src/summaryview.c: ¹â®²½¤Î¤¿¤á¤Ë¥¹¥ì¥Ã¥É²ò½ü´Ø¿ô¤ò½¤Àµ¡£ + +2000-06-24 + + * src/prefs_common.[ch] + src/summaryview.c: º¹½Ð¿Í¤Î¥¢¥É¥ì¥¹¤¬¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ÈƱ¤¸ + ¾ì¹ç¤Ë¡¢`º¹½Ð¿Í' ¥«¥é¥à¤Ë°¸Àè¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿(¤Ê¤«¤¬¤ï¤µ¤ó + thanks)¡£ + * src/utils.[ch]: `From:' ¥Ø¥Ã¥À¤Îʸ»úÎ󤫤饢¥É¥ì¥¹¤ò¼è¤ê½Ð¤¹ + ´Ø¿ô extract_address() ¤òÄɲᣠ+ * src/mainwindow.c: allsel_cb(): ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤¬Èóɽ¼¨¤Î¤È¤­¤Ë + `ÊÔ½¸/Á´¤ÆÁªÂò' ¤¬ÁªÂò¤µ¤ì¤¿¾ì¹ç¤Ë segmentation fault ¤òµ¯¤³¤¹ + ¥Ð¥°¤ò½¤Àµ(¤È¤ß¤¿¤µ¤ó thanks)¡£ + +2000-06-21 + + * src/summaryview.c: ɬÍפʥΡ¼¥É¤À¤±¥¹¥ì¥Ã¥É²ò½ü¤¹¤ë¤è¤¦¤Ë + ¼Â¹Ô¥ë¡¼¥Á¥ó¤òÊѹ¹¡£ + +2000-06-19 + + * src/news.c: news_session_get(): Àܳ¤¬Àڤ줿»þ¤ÎºÆÀܳ¤ò¼ÂÁõ¡£ + * src/nntp.[ch]: nntp_mode() ¤òÄɲᣠ+ +2000-06-18 + + * src/mbox.c: mbox ¤Î FILE ¥Ý¥¤¥ó¥¿¤ò close ¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò + ½¤Àµ¡£ mbox ¤Î½èÍý»þ¤Î¿¶¤êʬ¤±¤ËÂбþ¡£ + * src/inc.c: inc_drop_message(): ¥Õ¥©¥ë¥À¤ÎºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸ÈÖ¹æ + ¤òµ­²±¤¹¤ë¤¿¤á¤Ë¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/summaryview.c + src/addressbook.c: ±¦¥¯¥ê¥Ã¥¯»þ¤Î CTree ¤ÎµóÆ°¤ò½¤Àµ¡£ + * src/pop.c: pop3_getrange_uidl_recv(): ÀøºßŪ¤Ê¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼ + ¥Õ¥í¡¼¤Î¥Ð¥°¤ò½¤Àµ(À¾»³¤µ¤ó thanks)¡£ + +2000-06-17 + + * version 0.3.18 + + * src/pop.[ch] + src/inc.[ch]: UIDL ¤Ë¤è¤ë POP3 ¥µ¡¼¥Ð¾å¤Î´ûÆÉ¥á¥Ã¥»¡¼¥¸¤Î´ÉÍý¤ò + ¼ÂÁõ¡£ + * src/utils.[ch]: g_(s)list_free() ¤ÇÃÖ¤­´¹¤¨¤é¤ì¤ë¤Î¤Ç¡¢ + (s)list_remove_all() ¤òºï½ü¡£ + * src/mainwindow.c: ¥á¥Ë¥å¡¼¤ÎÇÛÃÖ¤ò¾¯¤·Êѹ¹¡£ + * src/summaryview.c: summary_status_show(): ¥µ¡¼¥Ð̾¤Ïɽ¼¨¤»¤º¡¢ + ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤À¤±É½¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.c + src/prefs_account.c: ¥À¥¤¥¢¥í¥°¥µ¥¤¥º¤Î·×»»¥ë¡¼¥Á¥ó¤òÄ´À°¡£ + +2000-06-15 + + * version 0.3.17 + + * src/compose.c: compose_reply_set_entry(): ÊÖ¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤Î + To: ¤È Cc: ¤Ë¤¢¤ëÁ´¤Æ¤Î¥¢¥É¥ì¥¹¤Ë cc ¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + Subject: ¤È To: ¤Î¥¨¥ó¥È¥ê¤Î°ÌÃÖ¤òÆþ¤ì´¹¤¨¤¿¡£ + +2000-06-14 + + * src/procheader.c: ¥¹¥Ú¡¼¥¹¤ÇʬΥ¤µ¤ì¤Æ¤¤¤Ê¤¤¥Ø¥Ã¥À¤ò°·¤¨¤ë¤è¤¦¤Ë + ½¤Àµ¡£ + * src/socket.c: sock_connect(): ¸Ç¤Þ¤ë¤Î¤òËɤ°¤¿¤á¤ËÀܳ¤Î¸å + ¥¦¥§¥¤¥È¤òÄɲÃ(ÆóÇ·µÜ¤µ¤ó thanks)¡£ + +2000-06-13 + + * src/inc.c: + inc_mail() + inc_all_account_mail(): ¥¢¥«¥¦¥ó¥È¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ë segmentation + fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + * src/mainwindow.[ch]: ¥¢¥«¥¦¥ó¥È¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï¼õ¿®¥Ü¥¿¥ó¤ò + ¥¯¥ê¥Ã¥¯¤Ç¤­¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: compose_queue(): Á÷¿®ÂÔµ¡¥á¥Ã¥»¡¼¥¸¤ËÀµ¤·¤¯ + ¥Þ¡¼¥¯¤òÉÕ¤±¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/utils.[ch]: ¥³¡¼¥ÉÊÑ´¹´Ø¿ô¤ò src/codeconv.[ch] ¤ËʬΥ¡£ + +2000-06-13 + + * version 0.3.16 + + * src/mimeview.c: mimeview_save_as() + src/summaryview.c: summary_save_as(): ´û¸¤Î¥Õ¥¡¥¤¥ë¤Ë¾å½ñ¤­¤¹¤ë + ¤«¤É¤¦¤«¤ò¿Ò¤Í¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-06-12 + + * src/utils.c + src/recv.c + src/prefs.c + src/prefs_common.c + src/prefs_account.c + src/addressbook.c + src/compose.c + src/mbox.c: ¥Ç¥£¥¹¥¯¤Î¶õ¤­¤¬¤Ê¤¤¾ì¹ç¤Ë½ñ¤­¹þ¤ß¥¨¥é¡¼¤Î¥Á¥§¥Ã¥¯¤Ë + ¼ºÇÔ¤·¡¢¥Õ¥¡¥¤¥ë¤ò¼º¤Ã¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ + +2000-06-11 + + * src/mainwindow.c: main_window_clean_trash(): ´°Î»¤·¤¿¤È¤­¤Ë + ¥Õ¥©¡¼¥«¥¹¤ò¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ë°ÜÆ°¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/utils.[ch]: ɽ¼¨ÍѤΥ³¡¼¥ÉÊÑ´¹´Ø¿ô¤òÄɲ᣸µ¤Î strncpy() + ¤È¤Ï°ã¤Ã¤Æ¡¢¥¼¥í¥Õ¥£¥ë¤ò¹Ô¤ï¤º½ªÃ¼¤Î¥Ì¥ëʸ»ú¤òÉÕ¤±¤ë strncpy2() + ¤òÄɲᣠ+ * src/textview.c: charset ¤Ë½¾¤Ã¤Æ¥³¡¼¥ÉÊÑ´¹´Ø¿ô¤òÊѹ¹¤¹¤ë¤è¤¦¤Ë + ½¤Àµ¡£charset=SHIFT_JIS, charset=EUC-JP ¤ËÂбþ¡£ + * src/mainwindow.c + src/prefs_common.h + src/textview.c: ¥á¥Ã¥»¡¼¥¸¤Î¥­¥ã¥é¥¯¥¿¥»¥Ã¥È¤ò¶¯À©»ØÄê¤Ç¤­¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.c: folderview_select_next_unread(): + ̤ÆÉ¥Õ¥©¥ë¥À¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï»Ï¤á¤«¤éõ¤¹¤è¤¦¤Ë¤·¤¿¡£ + +2000-06-11 + + * version 0.3.15 + + * src/mainwindow.c: ¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤¬¥Ä¡¼¥ë¥Ð¡¼¤ÎÉý¤Ë¿­¤Ð¤µ¤ì¤Æ + ¤·¤Þ¤¦ÌäÂê¤òºÆÅÙ½¤Àµ¡£ + * src/mbox.c + src/utils.c: is_header_line(): ¥³¥í¥ó¤Î¸å¤Ë¥¹¥Ú¡¼¥¹¤¬¤Ê¤¤¥Ø¥Ã¥À + ¤òǧ¼±¤¹¤ë¤è¤¦¤Ë½¤Àµ (ËÙÅĤµ¤ó thanks)¡£ + * src/filter.c: `#include ' ¤òÄɲᣠ+ * src/smtp.c: snprintf() ¤ò g_snprintf() ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + * src/Makefile.am: Ʊº­¤Î gettext ¤Î¤¿¤á¤Ë INCLUDES ¤Ë + `-I$(top_srcdir)/intl' ¤òÄɲᣠ+ * sylpheed.spec ¤òƱº­¡£ + +2000-06-10 + + * src/prefs_common.[ch]: ¹Ô´Ö¤Î¥Ô¥¯¥»¥ë¿ô¤òÀßÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + ¹ÔƬ¤ò¶õ¤±¤ë¤«¤É¤¦¤«¤ò»ØÄê¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: ɽ¼¨¤µ¤ì¤Æ¤¤¤ë¥á¥Ã¥»¡¼¥¸¤¬¥µ¥Þ¥ê¥Ó¥å¡¼¤«¤é + ºï½ü¤µ¤ì¤¿¤È¤­¤Ë¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤ò¥¯¥ê¥¢¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/mimeview.c: ¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î½ªÃ¼¶­³¦¤¬¸«¤Ä¤«¤é¤Ê + ¤¤¾ì¹ç¤Ë̵¸Â¥ë¡¼¥×¤òµ¯¤³¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ(¤Ë¤·¤«¤µ¤ó thanks)¡£ + * src/folderview.c: folderview_scan_mailbox(): ¥É¥Ã¥ÈÉÕ¤­ + ¥Ç¥£¥ì¥¯¥È¥ê¤ò̵»ë¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/main.c: ¥Ç¥£¥ì¥¯¥È¥ê¤ÎºîÀ®»þ¤ËƱ̾¤Î¥Õ¥¡¥¤¥ë¤¬¤¹¤Ç¤Ë¸ºß¤·¤¿ + ¾ì¹ç¡¢·Ù¹ð¥À¥¤¥¢¥í¥°¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-06-09 + + * src/textview.c + src/prefs_common.[ch]: ¹Ô´Ö¤È¹ÔƬ¤ò¶õ¤±¤é¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-06-07 + + * src/compose.c + src/procmime.[ch]: /etc/mime.types ¤ò¥¹¥­¥ã¥ó¤·¡¢ÅºÉÕ¥Õ¥¡¥¤¥ë¤Î + MIME ¥¿¥¤¥×¤ò·èÄꤹ¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: ¥µ¥Þ¥ê¤¬¼Â¹Ô¤Î»þ¤ËÈóÁªÂò¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ë + ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤ò¥¯¥ê¥¢¤¹¤ë¤è¤¦¤Ë¤·¡¢¥Õ¥©¥ë¥À¤¬¶õ¤Ë¤Ê¤Ã¤¿ + ¾ì¹ç¤Ë¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ë¥Õ¥©¡¼¥«¥¹¤ò°Ü¤¹¤è¤¦¤Ë¤·¤¿¡£ + * src/mainwindow.c: ¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤¬¥Ä¡¼¥ë¥Ð¡¼¤ÎÉý¤Ë¿­¤Ð¤µ¤ì¤Æ + ¤·¤Þ¤¦ÌäÂê¤ò½¤Àµ¡£ + * src/inc.c: `µ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¥Á¥§¥Ã¥¯¤¹¤ë' ¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤¿ + ¾ì¹ç¡¢Â¿½Å¤Î gtk_main() ¥¤¥Ù¥ó¥È¥ë¡¼¥×¤ò°ú¤­µ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-06-06 + + * src/compose.c: ¥Õ¥¡¥¤¥ë¤ò¸½ºß¤Î¥«¡¼¥½¥ë¤Î°ÌÃÖ¤ËÁÞÆþ¤Ç¤­¤Ê¤«¤Ã¤¿ + ÌäÂê¤ò½¤Àµ¡£ + +2000-06-06 + + * version 0.3.14 + + * src/compose.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤Ë `źÉÕ' ¥Ü¥¿¥ó¤òÄɲᣤ½¤·¤Æ + `ÁÞÆþ' ¤Î¥¢¥¤¥³¥ó¤ò¿·¤·¤¤¤â¤Î¤ÈÃÖ¤­´¹¤¨¤¿¡£ + +2000-06-05 + + * src/mainwindow.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤Ë `¼Â¹Ô' ¤òÄɲᣠ+ ¥Ä¡¼¥ë¥Ð¡¼¤Î¥Ü¥¿¥ó¤Î¥»¥ó¥·¥Æ¥£¥Ó¥Æ¥£¤òÀßÄꤹ¤ë´Ø¿ô + main_window_set_toolbar_sensitive() ¤òÄɲᣠ+ * src/compose.c: ¥Æ¥­¥¹¥È¥¨¥ó¥È¥ê¤Îʸ»úÎó¤Ë²þ¹Ô¤¬Æþ¤Ã¤Æ¤¤¤¿¾ì¹ç¤Ë + ÉÔÀµ¤Ê¥Ø¥Ã¥À¤ò½ÐÎϤ·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-06-04 + + * src/mainwindow.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤È¥á¥Ë¥å¡¼¤Ë `ºï½ü' ¤òÄɲᣠ+ ¤½¤·¤Æ¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤ÈƱ¤¸¹àÌܤò¥á¥¤¥ó¥á¥Ë¥å¡¼¤ËÄɲᣠ+ * src/utils.[ch]: DnD ¥µ¥Ý¡¼¥ÈÍѤδؿô¤òÄɲᣠ+ * src/compose.c: DnD ¤Ë¤è¤ë¥Õ¥¡¥¤¥ë¤ÎźÉÕ¤ÈÁÞÆþ¤ò¼ÂÁõ + (Ê¿¾¾¤µ¤ó thanks)¡£ + +2000-06-04 + + * version 0.3.13 + + * src/summaryview.c: null ¥Ý¥¤¥ó¥¿¤ò is_dir_exist() ¤ËÅϤ·¤Æ¤¤¤¿ + ¥Ð¥°¤ò½¤Àµ¡£ + +2000-06-03 + + * src/alertpanel.[ch]: ´Ø¿ô alertpanel_message(), + alertpanel_notice(), ¤½¤·¤Æ alertpanel_error() ¤òÄɲᣠ+ ¥³¡¼¥É¤ÎÀ°Íý¡£ + * src/folderview.c + src/compose.c + src/addressbook.c + src/summaryview.c + src/summary_search.c + src/prefs_account.c + src/foldersel.c: ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤Î¥À¥¤¥¢¥í¥°¤Ë + alertpanel_error(), alertpanel_warning() ¤Þ¤¿¤Ï + alertpanel_notice() ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.[ch]: µÕ½ç¤Ë¤è¤ë¥½¡¼¥È¤¬¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.c: Àܳ¤Þ¤¿¤Ïǧ¾Ú¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ë¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸ + ¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/utils.h: ¥Þ¥¯¥í FILE_OP_ERROR() ¤òÄɲä·¡¢perror() ¤Î¿¤¯¤ò + ¤½¤ì¤ÇÃÖ¤­´¹¤¨¤¿¡£ + +2000-06-03 + + * version 0.3.12 + + * src/compose.c: Á÷¿®ÂÔµ¡¤·¤¿¾ì¹ç¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤·¤Ê + ¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/send.c: send_message_queue(): ²òÀϤ·¤¿¥Ç¡¼¥¿¤ËÁ÷¿®ÂÔµ¡ÍÑ + ¥Ø¥Ã¥À¤ò´Þ¤ó¤Ç¤·¤Þ¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + * src/mainwindow.c: send_queue_cb(): ´°Î»¤·¤¿¤È¤­¤Ë¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Î + ¥á¥Ã¥»¡¼¥¸¤ò pop ¤·¡¢Á÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-06-02 + + * version 0.3.11 + + * src/filter.c + src/inc.c + src/compose.c: ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤òÍÞÀ©¡£ + * src/mainwindow.[ch]: ¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Î¥Ü¥¿¥ó¤È¥á¥Ë¥å¡¼¹àÌܤò + Äɲᣠ+ * src/summaryview.[ch]: ¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ³«¤¯´Ø¿ô + summary_select_next_unread() ¤òÄɲᣠ+ +2000-06-01 + + * src/prefs_common.[ch]: ¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤Ë̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò + ³«¤¯¤«¤É¤¦¤«¤ò·è¤á¤ëÀßÄê¤òÄɲᣠ+ * src/summaryview.c: ÀßÄꤵ¤ì¤Æ¤¤¤ë»þ¤Î¤ßºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤¯ + ¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: GtkEntry ¤«¤éÆÀ¤¿Ê¸»úÎó¤ò²òÊü¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-05-31 + + * src/compose.c: ¸å¤ÇÁ÷¿®¤¹¤ë¤¿¤á¤Ë¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔµ¡¾õÂÖ¤Ë + ¤¹¤ë `¸å¤ÇÁ÷¿®' ¤ò¥á¥Ë¥å¡¼¤È¥Ä¡¼¥ë¥Ð¡¼¤ËÄɲᣠ+ +2000-05-30 + + * src/mainwindow.c: Á÷¿®ÂÔµ¡¾õÂ֤Υá¥Ã¥»¡¼¥¸¤òºÆÁ÷¿®¤¹¤ë + ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òÄɲᣠ+ * src/compose.c: ¥á¥Ã¥»¡¼¥¸¤¬Á÷¿®ÂÔµ¡¤µ¤ì¤ë¤È¤­¤Ë·Ù¹ð¥À¥¤¥¢¥í¥° + ¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-05-29 + + * src/procmsg.[ch]: Á÷¿®ÂÔµ¡¾õÂ֤Υá¥Ã¥»¡¼¥¸¤½¤ì¤¾¤ì¤ËÂФ·¤Æ + send_message_queue() ¤ò¸Æ¤Ö´Ø¿ô procmsg_send_queue() ¤òÄɲᣠ+ +2000-05-28 + + * src/inc.c: inc_drop_message(): ¹ÔÀè¤Î¥Õ¥©¥ë¥À¤¬Â¸ºß¤·¤Ê¤±¤ì¤Ð¡¢ + ¥á¥Ã¥»¡¼¥¸¤ò¥Ç¥Õ¥©¥ë¥È¤Î¼õ¿®È¢¤ËÍî¤È¤¹¤è¤¦¤Ë½¤Àµ¡£ + * src/compose.[ch]: imput ¸ß´¹¤Î¥­¥å¡¼¥¤¥ó¥°ÍѥإåÀ¤ò¥­¥å¡¼¤µ¤ì¤¿ + ¥á¥Ã¥»¡¼¥¸¤ËÄɲᣠ+ * src/send.[ch]: ¥­¥å¡¼¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë´Ø¿ô + send_message_queue() ¤òÄɲᣠ+ +2000-05-27 + + * configure.in + acconfig.h: configure »þ¤Ë¥Þ¥ë¥Á¥¹¥ì¥Ã¥É¤ò»È¤¦¤«¤É¤¦¤«¤ò + ·è¤á¤é¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: ÀßÄê¤Ë´Ø¤ï¤é¤º¼Â¹Ô¤·¤¿¤È¤­¤Ë¥¹¥ì¥Ã¥É¤òºî¤Ã¤Æ + ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ(×¢Å礵¤ó thanks)¡£ + * src/sockinfo.[ch]: public ¤Ê sock_connect_*() ´Ø¿ô¤ÎÌá¤êÃͤò + SockInfo ¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤ËÊѹ¹¡£ + * src/procmime.c: procmime_scan_mime_header(): + ¥¹¥­¥ã¥ó¤·¤¿¥Ñ¡¼¥È¤Ë¥Ø¥Ã¥À¤¬Ìµ¤¤¤È¤­¤Ë NULL ¤òÊÖ¤·¤Æ¤¤¤¿¥Ð¥°¤ò + ½¤Àµ(shigeri ¤µ¤ó thanks)¡£ + * src/procmime.[ch]: + Content-Disposition ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤ò²òÀϤ¹¤ë´Ø¿ô + procmime_scan_content_disposition() ¤òÄɲᣠ+ * src/mimeview.c: Content-Disposition ¥Ø¥Ã¥À¤Î filename ¤ÎÃͤò + »ÈÍѤ¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/pop.c + src/inc.c: ÀßÄê¤Î¥Ñ¥¹¥ï¡¼¥É¤¬¶õ¤Ç¡¢°ÊÁ°¤Î POP3 ¥»¥Ã¥·¥ç¥ó¤¬ + ǧ¾Ú¤Ç¼ºÇÔ¤·¤Æ¤¤¤¿¾ì¹ç¡¢¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎϤòÂ¥¤¹¤è¤¦¤Ë½¤Àµ¡£ + +2000-05-23 + + * src/socket.[ch]: Èó¥Ö¥í¥Ã¥­¥ó¥° IO ¥â¡¼¥É¥½¥±¥Ã¥È¤È¥Þ¥ë¥Á¥¹¥ì¥Ã¥É + Àܳ¤Ø¤ÎÂбþ¤òÄɲᣠ+ * src/inc.c: ¥Þ¥ë¥Á¥¹¥ì¥Ã¥ÉÀܳ¤ËÂбþ¡£ + +2000-05-22 + + * src/folderview.c: ¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¤¿»þ¤Î¤ß¡¢¥Õ¥©¥ë¥À¤¬ÁªÂò + ¤µ¤ì¤¿¤È¤­¤Ë SummaryView ¤Ë¥Õ¥©¡¼¥«¥¹¤¬°Ü¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-05-20 + + * version 0.3.10 + + * po/ja.po: ¥á¥Ë¥å¡¼¥é¥Ù¥ë¤ÎÀèƬ¤Î `/' ¤¬È´¤±¤Æ¤¤¤Æ¡¢Compose + ¥¦¥£¥ó¥É¥¦¤ò³«¤¤¤¿¤È¤­¤Ë segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-05-20 + + * version 0.3.9 + + * src/utils.c: get_domain_name(): gethostname() ¤ò»È¤¦¤è¤¦¤Ë½¤Àµ¡£ + * src/mimeview.c: `̾Á°¤òÉÕ¤±¤ÆÊݸ' ¤È `¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨' ¤Î + ¥­¡¼¥Ð¥¤¥ó¥É¤òÄɲᣠ+ +2000-05-19 + + * src/recv.c: fputs() ¤¬¼ºÇÔ¤·¤¿¤È¤­¤Ë¥¨¥é¡¼ÃͤòÊÖ¤¹¤Î¤Ë¼ºÇÔ¤·¡¢ + ¥Ç¥£¥¹¥¯¤Î¶õ¤­ÍÆÎ̤¬¤Ê¤¤¾ì¹ç¤Ë¼õ¿®¤·¤¿¥á¡¼¥ë¤ò¼º¤Ã¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ + (ÅÄ¿¬¤µ¤ó´¶¼Õ)¡£ + * src/compose.c: Reply-To ¤ËÂбþ¡£ + * src/mimeview.c: ¥­¡¼Áàºî¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò²þÎÉ¡£ + +2000-05-18 + + * src/mimeview.[ch] + src/procmime.[ch] + src/textview.[ch]: ¥Í¥¹¥È¤µ¤ì¤¿¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤ËÂбþ¤·¡¢ + ¥³¡¼¥É¤òÀ°Íý¡£ + ¥«¥×¥»¥ë²½¤µ¤ì¤¿ RFC822 ¥á¥Ã¥»¡¼¥¸¤ËÂбþ¡£ + +2000-05-16 + + * src/compose.[ch]: ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤¬ºï½ü¤µ¤ì¤¿¤È¤­¤ËźÉÕ + ¾ðÊó¤Î¤¿¤á¤Ë³ÎÊݤµ¤ì¤¿¥á¥â¥ê¤ò²òÊü¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + źÉեꥹ¥È¤È¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤ò¤Ú¥¤¥ó¥¦¥£¥¸¥§¥Ã¥È¤Î¾å¤ËÇÛÃÖ¤·¤¿¡£ + ¥«¥Ã¥È/¥³¥Ô¡¼/¥Ú¡¼¥¹¥È/Á´¤ÆÁªÂò ¤òÁ´¤Æ¤Î editable ¥¦¥£¥¸¥§¥Ã¥È¾å¤Ç + ²Äǽ¤Ë¤·¤¿¡£ + źÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü¤ÈźÉեꥹ¥È¾å¤Ç¤Î¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤ò¼ÂÁõ¡£ + * src/prefs_common.[ch]: ½ð̾¤Î¶èÀÚ¤ê¤ÎÀßÄê¤òÄɲᣠ+ * src/alertpanel.[ch]: ´Ø¿ô alertpanel_warning() ¤òÄɲᣠ+ +2000-05-14 + + * src/prefs_common.[ch] + src/textview.c: URI ¤ò³«¤¯¥³¥Þ¥ó¥É¤ò¥«¥¹¥¿¥Þ¥¤¥º¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.[ch]: ¥Þ¥ë¥Á¥Ñ¡¼¥È MIME ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®(¥Õ¥¡¥¤¥ë¤Î + źÉÕ)¤ò¼ÂÁõ¡£ + * src/textview.c + src/compose.c: GTK+ ¤Î¥Æ¡¼¥Þ¥¨¥ó¥¸¥ó¤òÀڤäƤ¤¤Ê¤«¤Ã¤¿¥Ð¥°¤òºÆÅÙ + ½¤Àµ¡£ + +2000-05-13 + + * version 0.3.8 + + * src/summaryview.c: ¥á¥Ã¥»¡¼¥¸ºîÀ®ÍѤΥ­¡¼¥Ð¥¤¥ó¥É¤òÄɲà + (w, a, A, f)¡£¤Þ¤¿¡¢Â¾¤Î¥­¡¼¥Ð¥¤¥ó¥É¤âÄɲÃ(y, D, Q)¡£ + * src/compose.c: Cc ¥¨¥ó¥È¥ê¤¬¡¢ÊÖ¿®¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤Î Cc ¤ò°ú¤­·Ñ¤° + ¤è¤¦¤Ë¤·¤¿¡£ + * src/pixmaps/new.xpm + src/pixmaps/unread.xpm: pixmap ¥¤¥á¡¼¥¸¤òÃÖ¤­´¹¤¨¤¿¡£ + * src/procheader.c: procheader_date_get_localtime(): + ǯ¤Î·å¿ô¤ò4·å¤«¤é2·å¤ËÊѹ¹¡£ + +2000-05-12 + + * src/inc.c: ¥¢¥«¥¦¥ó¥È¤ÎÀßÄê¤Ç¥Ñ¥¹¥ï¡¼¥É¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð + ¿Ö¤Í¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_account.h: °ì»þŪ¤Ê¥Ñ¥¹¥ï¡¼¥É¤òÊݸ¤¹¤ë¥á¥ó¥Ð tmp_pass + ¤ò¹½Â¤ÂÎ PrefsAccount ¤ËÄɲᣠ+ * src/inputdialog.[ch]: ʸ»úÎó¤ò±£¤·¤¿¾õÂÖ¤ÇÆþÎϤòÂ¥¤¹´Ø¿ô + input_dialog_with_invisible() ¤òÄɲᣠ+ +2000-05-11 + + * src/compose.c: ¥á¥Ã¥»¡¼¥¸¥Õ¥©¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë GTK+ ¤Î + ¥Æ¡¼¥Þ¥¨¥ó¥¸¥ó¤òÀڤäƤ¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-05-10 + + * version 0.3.7a + + * src/summaryview.c: fprintf() ¤Ë stderr ¤òÆþ¤ì˺¤ì¤Æ¤¤¤¿¥Ð¥°¤ò + ½¤Àµ¡£ + +2000-05-10 + + * version 0.3.7 + + * src/pop.c: ¤¤¤¯¤Ä¤«¤Î POP3 ¥³¥Þ¥ó¥É¤¬¥¨¥é¡¼¤òÊÖ¤¹¤È¡¢¤½¤ÎÁ°¤Î + Áàºî¤¬Á´¤Æ̵¸ú¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦ÌäÂê¤ò½¤Àµ¡£ + * src/compose.c + src/textview.c: Pixmap ¥Æ¡¼¥Þ¤¢¤ë¤¤¤Ï¤½¤ì¤«¤éÇÉÀ¸¤·¤¿¤â¤Î¤ò + »È¤Ã¤¿¤È¤­¤Ë GtkText ¥¦¥£¥¸¥§¥Ã¥È¤¬Â®ÅÙÄã²¼¤¹¤ëÌäÂê¤ËÂн褷¤¿¡£ + +2000-05-08 + + * src/inc.c: ¸ºß¤·¤Ê¤¤¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ë X IO + ¥¨¥é¡¼¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-05-07 + + * src/src/folderview.[ch]: FolderInfo ¹½Â¤ÂΤ˥á¥ó¥Ð `mtime' ¤òÄɲᣠ+ * src/summaryview.c: ³«¤³¤¦¤È¤·¤Æ¤¤¤ë¥Õ¥©¥ë¥À¤Î mtime ¤ò¥Á¥§¥Ã¥¯¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/procmsg.c: ¥Õ¥¡¥¤¥ë¥·¥¹¥Æ¥à¤ò¥Á¥§¥Ã¥¯¤·¤Ê¤¤¥â¡¼¥É¤òÄɲᣠ+ +2000-05-05 + + * src/textview.[ch]: ¥¯¥ê¥Ã¥«¥Ö¥ë URI ¤ò¼ÂÁõ(BONAIM ¤µ¤ó thanks)¡£ + `X-Mailer:' ¥Ø¥Ã¥À¤¬ `Sylpheed' ¤ò´Þ¤ó¤Ç¤¤¤ì¤Ð¶¯Ä´É½¼¨¤¹¤ë¤è¤¦¤Ë + ¤·¤¿¡£ + +2000-05-04 + + * src/summaryview.c: summary_write_cache(): ¥­¥ã¥Ã¥·¥å¥Õ¥¡¥¤¥ë¤Î + ¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤Î½¤Àµ¡£ + +2000-05-04 + + * version 0.3.6a + + * src/headerview.c: headerview_clear() ¥á¥½¥Ã¥É¤òÄɲᣠ+ * src/messageview.c: messageview_clear() ¤Ç HeaderView ¤ò¥¯¥ê¥¢ + ¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + +2000-05-04 + + * version 0.3.6 + + * src/messageview.c + src/textview.c: *_clear() ¥á¥½¥Ã¥É¤òÄɲᣠ+ * src/summaryview.c: ¿·¤·¤¤¥Õ¥©¥ë¥À¤ò³«¤¤¤¿¤È¤­¤Ë MessageView ¤ò + ¥¯¥ê¥¢¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-05-03 + + * src/inc.c: Á´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®¤·¤¿¤È¤­¤Ë¤½¤ì¤¾¤ì¥¢¥«¥¦¥ó¥È¤Ë¤è¤Ã¤Æ + »ØÄꤵ¤ì¤Æ¤¤¤ë¼õ¿®È¢¤Ë°ÜÆ°¤·¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ + * src/compose.c: ¥¦¥£¥ó¥É¥¦¤¬ÊĤ¸¤é¤ì¤ë¤È¤­¤Ë¥á¥Ã¥»¡¼¥¸¤òÇË´þ¤¹¤ë + ¤«¤É¤¦¤«¤ò³Îǧ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-05-03 + + * version 0.3.5 + + * src/pop.[ch] + src/inc.[ch]: APOP ǧ¾Ú¤ËºÆÂбþ¡£ + * src/prefs_account.c: ¥×¥í¥È¥³¥ë¤Î¥¿¥¤¥×¤òÊݸ¤·¤Æ¤¤¤Ê¤«¤Ã¤¿¥Ð¥°¤ò + ½¤Àµ¡£ + * src/socket.h + src/statusbar.h: printf() Ū¤Ê´Ø¿ô¤Ë G_GNUC_PRINTF() ¤òÄɲᣠ+ * src/progressdialog.[ch]: ¥¯¥é¥¹Ì¾¤ò Progress ¤«¤é ProgressDialog + ¤ËÊѹ¹¡£ + +2000-05-02 + + * src/summaryview.c: ja ¥á¥Ã¥»¡¼¥¸¥«¥¿¥í¥°¤ò»È¤ï¤Ê¤¤¾õÂ֤ǥ˥塼¥¹ + ¥Õ¥©¥ë¥À¤òÁªÂò¤·¤¿¾ì¹ç¤Ë¥»¥°¥á¥ó¥Æ¡¼¥·¥ç¥ó¥Õ¥©¡¼¥ë¥È¤òµ¯¤³¤¹ + ¥Ð¥°¤ò½¤Àµ¡£ + * src/utils.h: printf() Ū¤Ê´Ø¿ô¤Ë G_GNUC_PRINTF() ¤òÄɲᣠ+ * src/Makefile.am: INCLUDES ¤Ë `-DG_LOG_DOMAIN=\"Sylpheed\"' ¤ò + Äɲᣠ+ +2000-05-01 + + * src/automaton.[ch] + src/inc.[ch] + src/pop.[ch]: POP3 ¼èÆÀ¥ë¡¼¥Á¥ó¤òÍ­¸Â¾õÂÖ¥ª¡¼¥È¥Þ¥È¥ó¥â¥Ç¥ë¤ò + »È¤Ã¤ÆºÆ¼ÂÁõ¤·¤¿(Ê¿¾¾¤µ¤ó thanks)¡£ + * src/inc.c: ¥á¡¼¥ë¥µ¡¼¥Ð¤È¤ÎÀܳ¤¬¼ºÇÔ¤·¤¿¤È¤­¤Ë¡¢°Õ¿Þ¤·¤Ê¤¤ + ¥×¥í¥°¥é¥à¤Î½ªÎ»¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¡£ + * src/summaryview.c: º¸¥«¡¼¥½¥ë¥­¡¼¤¬²¡¤µ¤ì¤¿¤È¤­¤Ë¥Õ¥©¡¼¥«¥¹¤ò + FolderView ¤Ë°ÜÆ°¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-04-30 + + * src/textview.c: °úÍѤμ±Ê̥롼¥Á¥ó¤ò¾¯¤·½¤Àµ¡£ + +2000-04-29 + + * version 0.3.4 + + * src/procmime.[ch]: MIME ¥Ç¥³¡¼¥À¤ò src/textview.c ¤«¤é + src/procmime.c ¤Ø°Ü¤·¤¿¡£ + * src/mimeview.[ch]: ¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤ÎÊݸ¤ò¼ÂÁõ¡£ + MIME ¥¨¥ó¥³¡¼¥É¤µ¤ì¤¿¥Õ¥¡¥¤¥ë̾¤ËÂбþ¡£ + * src/summaryview.c: ¡Ö̾Á°¤òÉÕ¤±¤ÆÊݸ¡×¤ò¼ÂÁõ¡£ + +2000-04-28 + + * src/prefs_common.[ch]: SummaryView ¤Îɽ¼¨¹àÌܤòÀßÄꤹ¤ë¤¿¤á¤Î + ¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¼ÂÁõ¡£ + * src/addressbook.c + src/account.c: Î󥿥¤¥È¥ë¤¬¥­¡¼¥Õ¥©¡¼¥«¥¹¤òÆÀ¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + +2000-04-26 + + * src/textview.c: BASE64 ¤Î¥Ç¥³¡¼¥Ç¥£¥ó¥°¤Èɽ¼¨¤ò¼ÂÁõ¡£ + +2000-04-25 + + * src/prefs_common.[ch]: SummaryView ¤Î¹àÌܤΤ½¤ì¤¾¤ì¤òɽ¼¨¤¹¤ë¤« + ¤É¤¦¤«¤òÀßÄꤹ¤ë¥á¥ó¥Ð¤òÄɲᣠ+ * src/headerwindow.c + src/logwindow.c: ¥¨¥¹¥±¡¼¥×¥­¡¼¤¬²¡¤µ¤ì¤¿¤È¤­¤Ë¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/headerview.c: ScrolledWindow ¤ò»È¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/base64.c: from64tobits(): '\r' ¤ÈƱÍÍ¤Ë '\n' ¤ò¹ÔËö¤Èǧ¼±¤¹¤ë + ¤è¤¦¤Ë½¤Àµ¡£ + +2000-04-24 + + * src/headerview.c: ¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Î¥ï¡¼¥É¥é¥Ã¥×¤È¥é¥¤¥ó¥é¥Ã¥× + ¤ò̵¸ú¤Ë¤·¤¿¡£ + +2000-04-24 + + * version 0.3.3 + + * src/prefs_common.c: prefs_assort_create(): ¥Ç¥Õ¥©¥ë¥È¤Î¿¶¤êʬ¤±ÍÑ + ¥Ø¥Ã¥À¤Ë¤¤¤¯¤Ä¤«¥Ø¥Ã¥À¤òÄɲᣠ+ +2000-04-23 + + * src/procmsg.c: ¥Ø¥Ã¥À¤Î²òÀÏ»þ¤Ë¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤¬µñÈÝ + ¤µ¤ì¤¿¾ì¹ç¤Ë¥»¥°¥á¥ó¥Æ¡¼¥·¥ç¥ó¥Õ¥©¡¼¥ë¥È¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ + (¤ï¤«¤¤@ÅÅÄÌÂç ¤µ¤ó thanks)¡£ + * src/mimeview.c: ¥­¡¼²¡²¼¥¤¥Ù¥ó¥È¤ò SummaryView ¤ËÅϤ¹¤è¤¦¤Ë¤·¤¿¡£ + +2000-04-21 + + * src/main.h + src/alertpanel.c: ¤è¤êÎɤ¤¥Õ¥©¥ó¥È¤Ë¥Þ¥Ã¥Á¤¹¤ë¤è¤¦¤Ë¥Õ¥©¥ó¥È¤Î + »ØÄê¤ò½¤Àµ¡£ + * src/utils.[ch]: FreeBSD ¤ËÂбþ¤¹¤ë¤¿¤á¤Ë¥ï¥¤¥É¥­¥ã¥é¥¯¥¿´Ø¿ô¤ò + Äɲᣠ¤Î¸ºß¤Î¥Á¥§¥Ã¥¯¤òÄɲᣠ+ * acconfig.h + configure.in: FreeBSD ¤ËÂбþ¤¹¤ë¤¿¤á¤Ë wint_t ¤È libxpg4 ¤Î + ¥Á¥§¥Ã¥¯¤òÄɲᣠ+ * src/unmime.c: ¤Î¸ºß¤ò¥Á¥§¥Ã¥¯¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + ¾åµ­3¤Ä¤Ïº´¡¹ÌÚ¤µ¤ó¤«¤é¤Î contribution ¤Ç¤¹¡£´¶¼Õ! + +2000-04-18 + + * src/main.h: ¥¦¥£¥ó¥É¥¦¤Î¥Ç¥Õ¥©¥ë¥È¤Î¹â¤µ¤ò¸º¤é¤·¤¿¡£ + +2000-04-17 + + * src/procmime.c: ¥À¥Ö¥ë¥¯¥©¡¼¥È¤µ¤ì¤¿Â°À­ÃͤÎÃæ¤Î³ç¸Ì¤òºï½ü¤·¤Æ + ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-04-15 + + * version 0.3.2 + + * src/mimeview.c: ¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥µ¤Èɽ¼¨¤ò¼ÂÁõ¡£ + * src/procmime.c: procmime_scan_content_type(): + Ê£¿ô¤ÎÍ×ÁǤËÂбþ¡£ + * src/textview.c: ¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤ËÂбþ¤·¡¢¥³¡¼¥É¤òÀ°Íý¡£ + +2000-04-14 + + * src/summaryview.c: ¥µ¥¤¥º¥«¥é¥à¤È¥µ¥¤¥º¤Ë¤è¤ë¥½¡¼¥È¤òÄɲᣠ+ * src/mainwindow.c: ¥½¡¼¥È¥á¥Ë¥å¡¼¤Ë `¥µ¥¤¥º¤Ç¥½¡¼¥È' ¤òÄɲᣠ+ * src/procmime.c: ¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼¥é¥ó¤òµ¯¤³¤·¡¢¥»¥°¥á¥ó¥Æ¡¼¥·¥ç¥ó + ¥Õ¥©¡¼¥ë¥È¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-04-13 + + * version 0.3.1 + + * src/textview.c: MIME ¥Ø¥Ã¥À¤È + Content-Transfer-Encoding: quoted-printable ¤ËÂбþ¡£ + +2000-04-12 + + * src/messageview.[ch] + src/textview.[ch]: MessageView ¤ò2¤Ä¤Î¥¯¥é¥¹¤ËʬΥ¡£ + * src/procmime.[ch]: MIME ¥á¥Ã¥»¡¼¥¸ÁàºîÍѤËÄɲᣠ+ +2000-04-11 + + * src/mimeview.[ch]: MIME ¥á¥Ã¥»¡¼¥¸ÁàºîÍѤËÄɲᣠ+ * configure.in: wctype.h ¤È wchar.h ¤Î¥Á¥§¥Ã¥¯¤òÄɲᣠ+ +2000-04-10 + + * src/procmsg.[ch] + src/procheader.[ch]: ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + * src/messageview.[ch]: HeaderView ¤òÅý¹ç¡£ + +2000-04-09 + + * version 0.3.0 + +2000-04-08 + + * src/addressbook.c: ¥Õ¥©¥ë¥À/¥°¥ë¡¼¥×¤¬Äɲ䢤뤤¤ÏÊÔ½¸¤µ¤ì¤¿¤È¤­¤Ë + ¥Ä¥ê¡¼¤ò¥½¡¼¥È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/xml.c: xml_compare_tag(): ¸½ºß¤Î¥¿¥°¤¬¶õ¤À¤Ã¤¿¾ì¹ç¤Ë + ¥»¥°¥á¥ó¥Æ¡¼¥·¥ç¥ó¥Õ¥©¡¼¥ë¥È¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + * src/mainwindow.c: MainWindow ¤Î¾õÂÖ¤òÊݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-04-08 + + * version 0.3.0pre1 + + * src/addressbook.c: ¥¢¥É¥ì¥¹¥°¥ë¡¼¥×¤ÎÊÔ½¸¤ò´°Á´¤Ë¼ÂÁõ¡£ + ·Ù¹ð¥À¥¤¥¢¥í¥°¤Ç¥¨¥¹¥±¡¼¥×¥­¡¼¤¬²¡¤µ¤ì¤¿¤È¤­¤Ë¡¢¥¢¥É¥ì¥¹¤Îºï½ü¤¬ + ¸í¤Ã¤Æ³Îǧ¤µ¤ì¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ + +2000-04-07 + + * src/addressbook.c: ¥á¥Ë¥å¡¼¥Ð¡¼¤òÄɲᣳ¬ÁØ¥Õ¥©¥ë¥À¤òÍ­¸ú¤Ë¤·¤¿¡£ + * src/prefs_account.c: pop ¥µ¡¼¥Ð¤ò»ØÄꤷ¤Ê¤¯¤Æ¤â¹½¤ï¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + * src/inc.c: inc_account_mail(): ¼õ¿®¥µ¡¼¥Ð¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢ + ²¿¤â¤·¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + +2000-04-05 + + * version 0.2.9 + + * src/addressbook.c: ¥¢¥É¥ì¥¹Ä¢¤Îµ¡Ç½¤ò¤Û¤Ü¼ÂÁõ¡£ + +2000-04-04 + + * src/compose.c: `¥Õ¥¡¥¤¥ë->¥Õ¥¡¥¤¥ë¤òÁÞÆþ' ¤¬2²ó°Ê¾åÁªÂò¤µ¤ì¤¿»þ¤Ë + ¥»¥°¥á¥ó¥Æ¡¼¥·¥ç¥ó¥Õ¥©¡¼¥ë¥È¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-04-03 + + * version 0.2.9pre4 + + * src/addressbook.[ch]: ¿·µ¬¥Õ¥©¥ë¥À¤È¥°¥ë¡¼¥×¤ÎºîÀ®¤ò¼ÂÁõ¡¢¤½¤·¤Æ + ¥Õ¥©¥ë¥À¤È¥°¥ë¡¼¥×¤Îºï½ü¤ò¼ÂÁõ¡£»ØÄꤵ¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤òºÆµ¢Åª¤Ë + ºï½ü¤¹¤ë addressbook_delete_object() ¤òÁ´¤Æ¼ÂÁõ¡£ + +2000-04-02 + + * src/addressbook.c: ¥¢¥É¥ì¥¹¤ÎÅÐÏ¿¤È¡¢¥á¥Ã¥»¡¼¥¸ºîÀ®¤Î + ¥¢¥É¥ì¥¹¤Î¥¨¥ó¥È¥ê¤Ø¤ÎÊ£¿ô²ó¤ÎÄɲäò¼ÂÁõ¡£ + * src/menu.[ch]: Á´¤Æ¤Î¥á¥Ë¥å¡¼¤Î¹àÌܤò¥¤¥ó¥»¥ó¥·¥Æ¥£¥Ö¤Ë¤¹¤ë´Ø¿ô + menu_set_insensitive_all() ¤òÄɲᣠ+ * src/folderview.c: ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + +2000-04-01 + + * src/account.c + src/prefs_common.c: CList ¤Î¹Ô¿ô¤òÆÀ¤ë¤È¤­¤Î¥Ð¥°¤ò½¤Àµ¡£ + +2000-03-30 + + * version 0.2.9pre3 + + * src/folderview.c: ºÇ½é¤ÎÁàºî¤Ç¥Ä¥ê¡¼¤¬³«ÊĤµ¤ì¤¿¤È¤­¤Ë·Ù¹ð¤ò + °ú¤­µ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-03-29 + + * src/addressbook.c: addressbook_list_selected(): Ê£¿ô¤Î¥¢¥É¥ì¥¹¤ò + °·¤¨¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: Bcc: ¤¬ÀÚ¤êÂؤ¨¤é¤ì¤¿¤È¤­¡¢Âбþ¤¹¤ë¥¢¥É¥ì¥¹Ä¢¤â + ¤½¤ì¤òÀÚ¤êÂؤ¨¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/mainwindow.c: + main_window_create(): ¥¦¥£¥ó¥É¥¦¤Î¤Á¤é¤Ä¤­¤òµ¯¤³¤µ¤Ê¤¤¤è¤¦¤Ë + gtk_widget_set_uposition() ¤ò gtk_widget_show() ¤ÎÁ°¤Ë°ÜÆ°¤·¤¿¡£ + main_window_get_position(): Àµ¤·¤¤¥¦¥£¥ó¥É¥¦¤Î°ÌÃÖ¤òÆÀ¤ë¤¿¤á¤Ë + gdk_window_get_position() ¤ò gdk_window_get_root_origin() ¤Ç + ÃÖ¤­´¹¤¨¤¿(¤³¤ì¤é¤Î½¤Àµ¤Ë´Ø¤·¤Æ shigeri ¤µ¤ó¤Ë´¶¼Õ)¡£ + +2000-03-27 + + * src/filesel.c: ºÇ½é¤Ë¸Æ¤Ó½Ð¤µ¤ì¤ë»þ¤Ï¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤òÁªÂò¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + +2000-03-26 + + * src/utils.c: conv_mb_alnum(): ¥­¥ã¥é¥¯¥¿ÊÑ´¹¥Æ¡¼¥Ö¥ë¤ò»ÈÍѤ¹¤ë + ¤è¤¦¤Ë½¤Àµ¡£ + * src/foldersel.c: ¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¤¿¤È¤­¤Ë¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤¬ + ¥Õ¥©¡¼¥«¥¹¤µ¤ì¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-03-26 + + * version 0.2.9pre2 + + * src/addressbook.c: addressbook_export_to_file() ¤È´ØÏ¢¤¹¤ë´Ø¿ô¤ò + ¼ÂÁõ¡£ + +2000-03-25 + + * src/xml.[ch] + src/addressbook.c: ¥¢¥È¥ê¥Ó¥å¡¼¥ÈÍѤÎÊÑ¿ô̾¤ò½¤Àµ¡£ + * src/prefs_common.[ch]: ¥á¥ó¥Ð `conv_mb_alnum' ¤òÄɲᣠ+ * src/utils.[ch]: ¥Þ¥ë¥Á¥Ð¥¤¥È¤Î±Ñ¿ô»ú¤ò¥·¥ó¥°¥ë¥Ð¥¤¥È¤Î¤½¤ì¤ËÊÑ´¹ + ¤¹¤ë conv_mb_alnum() ¤òÄɲᣠ+ * src/messageview.c: messageview_show(): conv_mb_alnum ¥Õ¥é¥°¤¬Î©¤Ã¤Æ + ¤¤¤ì¤Ð conv_mb_alnum() ¤òÄ̤¹¤è¤¦¤Ë¤·¤¿¡£ + +2000-03-25 + + * version 0.2.9pre1 + + * src/compose.c: Addressbook ¤¬ Compose ¤Ë¤è¤Ã¤Æ³«¤«¤ì¤Æ¤½¤Î Compose + ¤¬ÊĤ¸¤é¤ì¤ë¤È¤­¡¢Addressbook ¤ÎÂоݤò¥ê¥»¥Ã¥È¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/addressbook.c: Compose ¤ÈÏ¢·È¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-03-24 + + * configure.in: AM_PATH_{GLIB, GTK}: Í׵ᤵ¤ì¤ë GTK+ ¤È GLIB ¤Î + ¥Ð¡¼¥¸¥ç¥ó¤ò 1.2.6 ¤Ë¾å¤²¤¿¡£ + * src/xml.[ch]: XML ¥Ñ¡¼¥µ¤ò¤µ¤é¤Ë¼ÂÁõ¡£ + * src/addressbook.c: ¥¢¥É¥ì¥¹Ä¢¤Î²òÀϤÈɽ¼¨¤ò¹Ô¤¦¥ë¡¼¥Á¥ó¤ò¼ÂÁõ¡£ + +2000-03-21 + + * src/folderview.c: folderview_scan_folder(): ¥Õ¥©¥ë¥À¤Î¥á¥Ã¥»¡¼¥¸¿ô + ¤¬0¤Ê¤é¡¢¿·Ã塢̤ÆÉ¡¢¤½¤·¤ÆÁí¿ô¤ò0¤Ë¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-03-20 + + * src/xml.[ch]: ¥¢¥É¥ì¥¹Ä¢¤¬»ÈÍѤ¹¤ë XML ¤ÎÁàºî¤Î¤¿¤á¤ËÄɲᣠ+ * src/folderview.c: ¥¹¥Ú¡¼¥¹¥­¡¼¤Ç¼«Æ°Åª¤Ë̤ÆÉ¥Õ¥©¥ë¥À¤¬ÁªÂò + ¤µ¤ì¤ë¤È¤­¤Ë¡¢¤´¤ßÈ¢¥Õ¥©¥ë¥À¤ò¥¹¥­¥Ã¥×¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + +2000-03-18 + + * src/summaryview.c: ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤¬ÁªÂò¤µ¤ì¤¿¤È¤­¤Ë¥«¡¼¥½¥ë¤¬ + ±Êµ×¤Ë»þ·×¤Ë¤Ê¤Ã¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ + +2000-03-18 + + * version 0.2.8 + +2000-03-17 + + * src/mainwindow.[ch]: ¥«¡¼¥½¥ë¤Î¥¿¥¤¥×¤ÎÀßÄê»þ¤Î¥«¥¦¥ó¥È¤ò¼ÂÁõ¡£ + `¥¹¥ì¥Ã¥Éɽ¼¨' ¤È `¥¹¥ì¥Ã¥É²ò½ü' ¤Î¥á¥Ë¥å¡¼¤ò½¤Àµ¡£ + * src/summaryview.c: ¥Õ¥©¥ë¥À¤Î¥ª¡¼¥×¥ó»þ¤Î¥¹¥ì¥Ã¥É¤ÎÀÚÂؤ¬¤Ç¤­¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.[ch]: ¥Õ¥©¥ë¥À¤Î¥ª¡¼¥×¥ó»þ¤Ë¥µ¥Þ¥ê¥Ó¥å¡¼¤¬ + ¥¹¥ì¥Ã¥É¤ò¹½ÃÛ¤¹¤ë¤«¤É¤¦¤«¤ò·èÄꤹ¤ë¥á¥ó¥Ð `enable_thread' ¤ò + Äɲᣠ+ +2000-03-15 + + * src/summaryview.c: ¥Ý¥Ã¥×¥¢¥Ã¥×¤Î¥»¥ó¥·¥Æ¥£¥Ó¥Æ¥£¤Î´Ø¿ô¤ò¾¯¤· + ½¤Àµ¡£ + +2000-03-13 + + * version 0.2.7 + + * src/addressbook.[ch]: ¥¢¥É¥ì¥¹Ä¢¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ò¤µ¤é¤Ë¼ÂÁõ¡£ + * src/compose.c: ¥¢¥É¥ì¥¹Ä¢¤Î¥ª¥Ö¥¸¥§¥¯¥È¤ËÀܳ¡£ + * src/folderview.[ch]: folderview_compare_path(): + ÀäÂХѥ¹¤¬Àµ¤·¤¯Èæ³Ó¤µ¤ì¤ë¤è¤¦¤Ë½¤Àµ¡£ + folderview_select_node() ¤òÄɲᣠ+ Í׵ᤵ¤ì¤¿¤È¤­¤Ë¥µ¥Þ¥ê¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë folderview_scan_folder() + ¤ò½¤Àµ¡£ + * src/import.c: mbox ¤ò¼è¤ê¹þ¤ó¤À¤È¤­¤Ë¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿· + ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: folderview.c ¤ÎÊѹ¹¤Ë½¾¤Ã¤Æ½¤Àµ¡£ + ¸µ¤Î¥Õ¥©¥ë¥À¤¬°ÜÆ°Àè¤ÈƱ°ì¤Ê¤é·Ù¹ð¥À¥¤¥¢¥í¥°¤òɽ¼¨¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + ¾õ¶·¤Ë±þ¤¸¤Æ¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤Î¥»¥ó¥·¥Æ¥£¥Ó¥Æ¥£¤òÀßÄꤹ¤ë + summary_set_popup_sensitive() ¤òÄɲᣤ½¤·¤Æ¥µ¥Þ¥ê¤¬¥¯¥ê¥¢¤µ¤ì¤¿ + ¤È¤­¤Ë¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤ÎÁ´¤Æ¤Î¹àÌܤò¥¤¥ó¥»¥ó¥·¥Æ¥£¥Ö¤Ë¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + * src/procmsg.c: procmsg_move_messages_with_dest(): + ¸µ¤Î¥Õ¥©¥ë¥À¤¬°ÜÆ°Àè¤ÈƱ°ì¤Ê¤é½èÍý¤òÃæÃǤ¹¤ë¤è¤¦¤ËÊѹ¹¡£ + * src/summary_search.c + src/manage_window.c: ·Ù¹ð¥À¥¤¥¢¥í¥°¤¬2²ó¸½¤ì¤¿¤È¤­¤Ë¥³¥ó¥½¡¼¥ë¤Ë + ·Ù¹ð¤¬É½¼¨¤µ¤ì¤Ê¤¤¤è¤¦¤Ë½¤Àµ¡£ + * src/filesel.c: ¥Õ¥¡¥¤¥ëÁªÂò¥À¥¤¥¢¥í¥°¤ò°ì»þ¥¦¥£¥ó¥É¥¦¤Ë¤·¤¿¡£ + +2000-03-11 + + * src/manage_window.[ch]: ¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô manage_window_focus_out() + ¤òÄɲᣠ+ * src/account.c + src/inputdialog.c + src/mainwindow.c + src/prefs_account.c + src/prefs_common.c + src/summary_search.c: focus_out_event ¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤òÄɲᣠ+ * src/addressbook.[ch]: ²¾¤Î¥¢¥É¥ì¥¹Ä¢¤Î¥³¡¼¥É¤òÄɲᣠ+ +2000-03-06 + + * src/utils.h: alloca() ¤ò¹Ô¤¤¡¢¤Þ¤¿Îã³°¤ò½èÍý¤¹¤ë¥Þ¥¯¥í Xalloca() ¤ò + Äɲᣠ+ * src/import.c: ¥¤¥ó¥Ý¡¼¥È¥À¥¤¥¢¥í¥°¤ò°ì»þ¥¦¥£¥ó¥É¥¦¤Ë¤·¡¢¥¨¥¹¥±¡¼¥× + ¥­¡¼¤Ç¥­¥ã¥ó¥»¥ë¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-03-04 + + * version 0.2.6 + + * src/compose.c: ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤¿¤È¤­¤Ë¥á¥â¥ê + ¥ê¡¼¥¯¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-03-03 + + * src/nntp.h: Ť¹¤®¤ë XOVER ʸ»úÎó¤Î¤¿¤á¤Ë NNTP ¥á¥Ã¥»¡¼¥¸¤Î + ¥Ð¥Ã¥Õ¥¡¥µ¥¤¥º¤òÁý¤ä¤·¤¿¡£ + +2000-02-28 + + * src/summaryview.c: step-forward ¤È step-backward ¤ò Control-n ¤È + Control-p ¤Î¤½¤ì¤¾¤ì¤Ë¥Ð¥¤¥ó¥É¤·¤¿¡£ + * src/filter.c: filter_read_str(): ¥á¥â¥ê¥ê¡¼¥¯¤Î¥Ð¥°¤ò½¤Àµ¤·¡¢ + ¥Ð¥Ã¥Õ¥¡¤ò³ÎÊݤ¹¤ë g_malloc() ¤ò alloca() ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + * src/procheader.c: procheader_get_fromname(), + procheader_date_get_localtime() + src/utils.c: conv_euctojis(): g_malloc() ¤ò alloca() ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + src/compose.c: compose_quote_parse_fmt() + src/prefs.c: prefs_set_data_from_text() + prefs_set_text(): g_malloc() ¤ò alloca() ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + +2000-02-26 + + * version 0.2.5 + + * src/logwindow.c: ·Ù¹ð¡¢¥¨¥é¡¼¤È¥á¥Ã¥»¡¼¥¸¤ò°Û¤Ê¤ë¿§¤Çɽ¼¨¤¹¤ë + ¤è¤¦¤Ë log_window_append() ¤ò²þÎÉ¡£ + * src/utils.[ch]: ´Ø¿ô log_message(), log_warning(), log_error() + ¤òÄɲᣤ½¤ì¤¾¤ìÄ̾ï¤Î¥á¥Ã¥»¡¼¥¸¡¢·Ù¹ð¡¢¥¨¥é¡¼¤òɽ¼¨¡£ + ¤½¤·¤Æ¿¿ô¤Î·Ù¹ð¥á¥Ã¥»¡¼¥¸¤ò¤³¤ì¤é¤ò»È¤¦¤è¤¦¤Ë½¤Àµ¡£ + * src/messageview.c: messageview_init(): ¿§¤Î³ä¤êÅö¤Æ¤Ë¼ºÇÔ¤·¤¿ + ¤È¤­¤Ë°úÍÑ¤È URI ¤Î¿§¤ò¹õ¤ËÀßÄꤹ¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/news.c: news_parse_xover(): ¥Ð¥Ã¥Õ¥¡¤ò³ÎÊݤ¹¤ë g_malloc() + ¤ò alloca() ¤ÇÃÖ¤­´¹¤¨¤¿¡£ + +2000-02-25 + + * src/folderview.c: °ÊÁ°¤ËÁªÂò¤µ¤ì¤¿¥Õ¥©¥ë¥À̾¤ò¥Æ¥­¥¹¥È¥¨¥ó¥È¥ê¤Ë + ɽ¼¨¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£¤½¤ì¤Ë²Ã¤¨¤Æ¡¢´ö¤Ä¤«¤Î½¤Àµ¤ò¹Ô¤Ã¤¿¡£ + +2000-02-24 + + * version 0.2.4 + + * src/logwindow.[ch]: ¥×¥í¥È¥³¥ë¥í¥°¤òɽ¼¨¤¹¤ë¥í¥°¥¦¥£¥ó¥É¥¦¤ò + Äɲᣠ+ * src/about.c: ¥À¥¤¥¢¥í¥°¤Î¥µ¥¤¥º¤òÈùÄ´À°¡£ + * src/folderview.c: ¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤·¤¿¤È¤­¤Ë¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£ + +2000-02-23 + + * src/prefs_common.[ch]: `From:' ¤ä `Subject:' ¤Î¤è¤¦¤Ê¥Ø¥Ã¥À¤Î + ¹àÌܤòËÝÌõ¤¹¤ë¤«¤É¤¦¤«¤ò·è¤á¤ë¹àÌÜ `translate_header' ¤òÄɲᣠ+ * src/compose.c: °¸À褬ÆþÎϤµ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ë·Ù¹ð¥À¥¤¥¢¥í¥°¤ò + ɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.c: ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + +2000-02-22 + + * version 0.2.3 + + * src/compose.c: ¥Ø¥Ã¥À¤Î¥¨¥ó¥È¥ê¤¬ÆþÎϤµ¤ì¤¿¤È¤­¤Ë¡¢¤½¤Î + ¥Õ¥©¡¼¥«¥¹¤ò¼¡¤Î¥¨¥ó¥È¥ê¤Þ¤¿¤Ï¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥È¤Ë°ÜÆ°¤¹¤ë + ¤è¤¦¤Ë¤·¤¿¡£¥á¥Ë¥å¡¼¤Î¹àÌܤòÀ°Íý¡£ + * src/mainwindow.[ch] + src/prefs_common.[ch] + src/main.c: ½ªÎ»»þ¤Ë¥¦¥£¥¸¥§¥Ã¥È¤Î¥µ¥¤¥º¤È¥¦¥£¥ó¥É¥¦¤Î°ÌÃÖ¤ò + Êݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_common.c: a14, k14 ¥Õ¥©¥ó¥È¥»¥Ã¥È¤ò¥Ç¥Õ¥©¥ë¥È¤Î + ¥á¥Ã¥»¡¼¥¸¥Õ¥©¥ó¥È¤È¤·¤Æ»ØÄê¡£ + * src/about.c: about ¥À¥¤¥¢¥í¥°¤Î³°´Ñ¤ò¥Æ¥­¥¹¥È¥¦¥£¥¸¥§¥Ã¥ÈÅù¤ò + »ÈÍѤ·¤ÆÊѹ¹¡£ + * src/recv.c: ¥¨¥¹¥±¡¼¥×¤µ¤ì¤¿ From_ ¹Ô¤òÊÑ´¹¤¹¤ë¤è¤¦¤Ë recv_write() + ¤ò½¤Àµ¡£ + +2000-02-20 + + * version 0.2.2 + + * src/compose.[ch]: Bcc ¤ËÂбþ¡£ + +2000-02-19 + + * version 0.2.1 + + * src/utils.[ch]: ʸ»úÎó¤òÄ´¤Ù¤Æ¡¢¿ô»úÎó¤Ê¤é¤½¤ÎÃͤòÊÖ¤¹´Ø¿ô + to_number() ¤òÄɲᣠ+ * src/procmsg.c: ¿ô»ú°Ê³°¤Îʸ»ú¤¬¥Õ¥¡¥¤¥ë̾¤Ë´Þ¤Þ¤ì¤Æ¤¤¤¿¾ì¹ç¤Ë + ¸íÆ°ºî¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-02-18 + + * version 0.2.0 + + * src/folderview.c: ³«¤¤¤Æ¤¤¤ë¥Õ¥©¥ë¥À¥Î¡¼¥É¤òºï½ü¤·¤¿¤È¤­¤Ë + segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ(Ê¿¾¾¤µ¤ó thanks)¡£ + ¤½¤·¤Æ¡¢¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òºï½ü¤¹¤ë folderview_rm_server_cb() ¤ò¼ÂÁõ¡£ + * src/mbox.c: ·Ù¹ð¥á¥Ã¥»¡¼¥¸¤ò½¤Àµ¡£ + +2000-02-13 + + * version 0.2.0alpha-pre8 + + * src/mainwindow.c: inc_all_account_mail_cb(): ¸½ºß¤Î¥Õ¥©¥ë¥À¤¬ + ¹¹¿·¤µ¤ì¤¿¤È¤­¤ÎÌäÂê¤òÈò¤±¤ë¤¿¤á¤Ë¡¢¼õ¿®È¢¤òÁªÂò¤µ¤»¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: summary_execute(): ¼Â¹Ô¤µ¤ì¤¿¤È¤­¤Ë¥µ¥Þ¥ê + ¥­¥ã¥Ã¥·¥å¤Ë½ñ¤­¹þ¤à¤è¤¦¤Ë¤·¤¿¡£ + +2000-02-12 + + * version 0.2.0alpha-pre7 + + * src/utils.[ch]: ËöÈø¤Î¥Ç¥£¥ì¥¯¥È¥ê¥»¥Ñ¥ì¡¼¥¿¤ò̵»ë¤·¤ÆÆó¤Ä¤Î + ¥Ñ¥¹¤òÈæ³Ó¤¹¤ë path_cmp() ¤òÄɲᣠ+ * src/folderview.[ch] + src/summaryview.[ch]: ¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤Þ¤¿¤Ïºï½ü¤·¤¿¤È¤­¤Ë + ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤¬¹Ô¿Ê¤µ¤ì¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/inc.c: ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + +2000-02-11 + + * version 0.2.0alpha-pre6 + + * src/utils.[ch]: ¥É¥á¥¤¥ó̾¤òÀÅŪ¤Êʸ»úÎó¤È¤·¤ÆÊÖ¤¹ + get_domain_name() ¤òÄɲᣠ+ * src/compose.c: compose_generate_msgid(): ¸½ºß¤Î¥¢¥É¥ì¥¹¤¬ '@' ¤ò + ´Þ¤Þ¤Ê¤¯¤Æ¤â¤Þ¤È¤â¤Ê¥á¥Ã¥»¡¼¥¸ ID ¤òÀ¸À®¤¹¤ë¤è¤¦¤Ë½¤Àµ¡£ + * src/send.c: ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + +2000-02-10 + + * src/folderview.c: ¥Õ¥©¥ë¥À¤¬±¦¥¯¥ê¥Ã¥¯¤µ¤ì¤¿¤È¤­¤Î¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤Î + µóÆ°¤ò½¤Àµ¡£ + * src/compose.c: compose_encode_header(): ŬÅö¤Ê¥Ð¥Ã¥Õ¥¡¥ª¡¼¥Ð¡¼¥é¥ó + ¥Á¥§¥Ã¥¯¤òÄɲᣠ+ +2000-02-09 + + * version 0.2.0alpha-pre5 + + * gettext ¤È libtool ¤ò¹¹¿·¡£ + * configure.in: ¥á¥Ã¥»¡¼¥¸¥«¥¿¥í¥°¤¬Àµ¤·¤¤¥Ç¥£¥ì¥¯¥È¥ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë + ¤µ¤ì¤ë¤è¤¦¤Ë localedir ¤ÎÄêµÁ¤ò½¤Àµ¡£ + * src/folderview.c + src/mainwindow.c: ¸½ºß³«¤«¤ì¤Æ¤¤¤ë¥Õ¥©¥ë¥À¤Ç¤â³«¤¯¤³¤È¤¬¤Ç¤­¤ë + ¤è¤¦¤Ë½¤Àµ¡£ + * src/prefs_common.[ch] + src/messageview.c: ¥á¥Ã¥»¡¼¥¸¤Î¿§¤òÀÚ¤êÂؤ¨¤ë¥ª¥×¥·¥ç¥ó¤òÄɲᣠ+ +2000-02-08 + + * version 0.2.0alpha-pre4 + + * src/mainwindow.c + src/messageview.c: ¿§¤ò³ÎÊݤ¹¤ë»þ¤Ë¥á¥â¥ê¤òÇ˲õ¤·¤Æ¤¤¤¿¥Ð¥°¤ò½¤Àµ¡£ + +2000-02-07 + + * src/folderview.c: ¥Õ¥©¥ë¥ÀÁªÂò»þ¤Î¥Ð¥°¤ò´ö¤Ä¤«½¤Àµ¡£ + +2000-02-07 + + * version 0.2.0alpha-pre3 + + * src/folderview.c + * src/summaryview.[ch]: ¿¾¯¥³¡¼¥É¤òÀ°Íý¡£ + * src/messageview.c: ¿§¤Î³ä¤êÅö¤Æ¤Î¥Ð¥°¤ò½¤Àµ(¿ʬ)¡£ + +2000-02-06 + + * version 0.2.0alpha-pre2 + + * src/folderview.[ch]: ¥ê¥¿¡¼¥ó¥­¡¼¤Þ¤¿¤Ï¥¹¥Ú¡¼¥¹¥­¡¼¤¬²¡¤µ¤ì¤ë¤«¡¢ + ¥Þ¥¦¥¹¤Î¥Ü¥¿¥ó1¤«2¤Ë¤è¤ë¥¯¥ê¥Ã¥¯°Ê³°¤Ç¤Ï¡¢¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ç + ÁªÂò¤µ¤ì¤¿¥Õ¥©¥ë¥À¤ò³«¤«¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/inc.c: ¿¾¯¥³¡¼¥É¤òÀ°Íý¡£ + * TODO.jp: ¹àÌܤòÁý¤ä¤·¤¿¡£ + +2000-02-05 + + * version 0.2.0alpha-pre1 + + * src/summaryview.[ch]: ½ÅÊ£¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤¿¤È¤­¤Ë¥µ¥Þ¥ê¤Î + ¥¹¥ì¥Ã¥É¤ò²õ¤¹¥Ð¥°¤ò½¤Àµ(BONAIM ¤µ¤ó thanks)¡£°ìÉô¥³¡¼¥É¤ÎÀ°Íý¡£ + * src/procmsg.[ch]: procmsg_move_messages() ¤ò + procmsg_move_messages_with_dest() ¤Ë̾¾ÎÊѹ¹¤·¡¢Á°¼Ô¤ò¹ÔÀè¤ò + »ØÄꤷ¤Ê¤¤¿·¤·¤¤´Ø¿ô¤ÇÃÖ¤­´¹¤¨¤¿¡£ + * src/prefs_common.c + src/gtkutils.c: Ï¢·ë¥ê¥¹¥È¤Î¥á¥â¥ê¥ê¡¼¥¯¤ò½¤Àµ¡£ + * src/utils.[ch]: ÁÐÊý¸þÏ¢·ë¥ê¥¹¥È¤ÎÁ´Í×ÁǤòºï½ü¤¹¤ë + list_remove_all() ¤òÄɲᣠ+ * src/inc.[ch]: Á´¥¢¥«¥¦¥ó¥È¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë + inc_all_account_mail() ¤òÄɲᣠ+ * src/account.[ch]: ¥¢¥«¥¦¥ó¥È¤ò¤½¤ì¤¾¤ì½èÍý¤¹¤ë¤¿¤á¤Ë + account_foreach() ¤òÄɲᣠ+ * TODO.jp ¤òÄɲᣠ+ +2000-02-04 + + * version 0.1.23alpha + + * src/inc.c: ¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤·¤¿»þ¤Ë¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤Î¥á¥Ã¥»¡¼¥¸ + ¿ô¤ò¹¹¿·¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.[ch]: ¥Õ¥©¥ë¥À̾¤ò»ØÄꤷ¤Æ¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Î°ì¤Ä¤Î + ¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥ó¤¹¤ë´Ø¿ô folderview_scan_folder() ¤òÄɲᣠ+ +2000-02-02 + + * version 0.1.22alpha + + * src/prefs_account.[ch]: ¼õ¿®»þ¿¶¤êʬ¤±¤ÎÀßÄê¤òÄɲᣠ+ * src/inc.c: ¼õ¿®»þ¤Î¿¶¤êʬ¤±¤ËÂбþ¡£ + * src/procmsg.c; ¥³¡¼¥É¤òÀ°Íý¡£ + * src/news.c: xover ¤Î¼èÆÀ¤Ë¼ºÇÔ¤·¤¿¤È¤­¤Ë¸Ç¤Þ¤ë¥Ð¥°¤ò½¤Àµ¡£ + * src/compose.c: ÆÃÄê¤Î¥Õ¥©¥ë¥À¤ËÆþ¤ë¥á¥Ã¥»¡¼¥¸¤Î¥Þ¡¼¥¯¤ò²ò½ü + ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-02-01 + + * version 0.1.21alpha + + * src/folderview.c + src/summaryview.c: ¡Ö̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¸«¤Ä¤«¤é¤Ê¤«¤Ã¤¿¾ì¹ç¡¢¼¡¤Î + ¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤¹¤ë¡×µ¡Ç½¤ò¼ÂÁõ¡£ + * src/summaryview.c: ¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤Ø¤ÎÀܳÃæ¤ËÀܳ¤Î¾õÂÖ¤ò + ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Ëɽ¼¨¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/compose.c: X-Mailer: ¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤Îʸ»úÎó¤ò¾¯¤·Êѹ¹¡£ + * src/prefs_common.c: ¿¶¤êʬ¤±¤Î»Ä¤ê¤Îµ¡Ç½¤ò¼ÂÁõ¡£ + +2000-01-31 + + * version 0.1.20alpha + + * src/prefs_common.c: ¿¶¤êʬ¤±ÀßÄê¤ÎÆɤ߹þ¤ß/½ñ¤­½Ð¤·/ÅÐÏ¿/ºï½ü¤ò + ¼ÂÁõ¡£ + * src/mainwindow.c: ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Î³°´Ñ¤ò¾¯¤·Êѹ¹¡£ + * src/account.c: account_delete(): ¥¢¥«¥¦¥ó¥È¤¬ºï½ü¤µ¤ì¤¿¤È¤­¤Ë + GList ¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÂåÆþ¤·¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + +2000-01-29 + + * src/procmsg.c: procmsg_get_mark_sum(): ¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ÎÆɤ߹þ¤ß + ¤Ë¼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ(BONAIM ¤µ¤ó thanks)¡£ + * src/prefs_common.c: ¿¶¤êʬ¤±ÀßÄê¤Î¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤òÄɲᣠ+ +2000-01-28 + + * src/summaryview.c: º¸¥¯¥ê¥Ã¥¯¤Ç̤Æɵ­»ö¤òɽ¼¨¤¹¤ë¤È¤­¤Ë¥Þ¡¼¥¯¤Î + ɽ¼¨¤¬Àµ¤·¤¯¹¹¿·¤µ¤ì¤Ê¤¤¥Ð¥°¤ò½¤Àµ(shigeri ¤µ¤ó thanks)¡£ + +2000-01-27 + + * src/summaryview.[ch]: ¿¶¤êʬ¤±ÍѤδؿô¤òÄɲᣠ+ * src/about.c: ¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤ë¥Ü¥¿¥ó¤òÄɲᣠ+ * src/news.c: ¼èÆÀ¤¹¤ë¥Ø¥Ã¥À¤Î¿ô¤òÀ©¸Â¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-01-26 + + * src/procmsg.c: news ¥Õ¥é¥°¤òÀµ¤·¤¯²Ã¤¨¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + * src/compose.c: ¥Ë¥å¡¼¥¹µ­»ö¤ËÊÖ¿®¤Ç¤­¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + * src/filter.[ch]: ¥á¥Ã¥»¡¼¥¸¤Î¥Õ¥£¥ë¥¿¥ê¥ó¥°ÍѤËÄɲᣠ+ * src/procheader.[ch]: ¥Õ¥£¥ë¥¿½èÍý¤Î¤¿¤á¤Ë + procheader_get_unfolded_line() ¤òÄɲᣤ½¤·¤Æ¡¢¥á¥Ã¥»¡¼¥¸¤Î + ¥Ø¥Ã¥À¤òÆɤ߹þ¤ó¤Ç¥á¥â¥ê¤Ë³ÊǼ¤¹¤ë procheader_get_header_list() + ¤òÄɲä·¡¢ procheader_get_header_list() ¤Ë¤è¤Ã¤ÆÆɤ߹þ¤Þ¤ì¤¿ + Á´¤Æ¤Î¥Ø¥Ã¥À¤òºï½ü¤¹¤ë procheader_header_list_destroy() ¤òÄɲä·¤¿¡£ + +2000-01-25 + + * version 0.1.19alpha + + * src/news.c: ¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤³µÍ×¾ðÊó¤À¤±¤ò¼èÆÀ¤¹¤ë¤è¤¦¤Ë + ½¤Àµ¡£ + * src/procmsg.[ch]: ¥Ë¥å¡¼¥¹ÁàºîÍѤ˽¤Àµ¡£ + +2000-01-24 + + * src/news.c: xover ¤ËÂбþ¡£ + * src/mbox.c: ¶õ¹Ô¤òÀµ¤·¤¯°·¤¨¤Ê¤«¤Ã¤¿¥Ð¥°¤ò½¤Àµ(shigeri ¤µ¤ó + thanks)¡£ + +2000-01-23 + + * version 0.1.18alpha + + * src/procmsg.[ch]: ¥Ë¥å¡¼¥¹¥Õ¥©¥ë¥À¤ò°·¤¨¤ë¤è¤¦¤Ë´ö¤Ä¤«¤Î´Ø¿ô¤ò + ½¤Àµ¡£ + * src/news.c: ¥Ø¥Ã¥À¤Î¥­¥ã¥Ã¥·¥å¥ë¡¼¥Á¥ó¤òÄɲᣠ+ * src/procheader.c: ¥Ø¥Ã¥À¤¬½ÅÊ£¤·¤Æ¤¤¤¿¾ì¹ç¤Ë¥á¥â¥ê¥ê¡¼¥¯¤òµ¯¤³¤¹ + ¥Ð¥°¤ò½¤Àµ¡£²òÀϤ¹¤ë¥Ø¥Ã¥À¤Ë Newsgroups: ¤òÄɲᣠ+ * src/summaryview.c: ¥Ë¥å¡¼¥¹µ­»ö¤Î¥­¥ã¥Ã¥·¥å¥ë¡¼¥Á¥ó¤òÄɲᣠ+ * src/compose.c: ¥Ë¥å¡¼¥¹µ­»ö¤ËÊÖ¿®/žÁ÷¤Ç¤­¤ë¤è¤¦¤Ë¤·¤¿¡£ + +2000-01-22 + + * src/compose.c: ¥«¥ó¥Þ¤¬¥À¥Ö¥ë¥¯¥©¡¼¥Æ¡¼¥·¥ç¥ó¤ÎÃæ¤Ë´Þ¤Þ¤ì¤Æ¤¤¤¿ + ¾ì¹ç¤Ë To: ¥Ø¥Ã¥À¤Î²òÀϤ˼ºÇÔ¤¹¤ë¥Ð¥°¤ò½¤Àµ(shigeri ¤µ¤ó thanks)¡£ + * src/mbox.c: ¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤¤ From_ ¹Ô¤òÀµ¤·¤¯°·¤¨¤ë¤è¤¦¤Ë + mbox ¥Õ¥¡¥¤¥ë½èÍý¤Î¥³¡¼¥É¤ò½¤Àµ¡£ + +2000-01-21 + + * version 0.1.17alpha + + * src/foldersel.c: ¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤¬É½¼¨¤µ¤ì¤Ê¤¤¥Ð¥°¤ò½¤Àµ¡£ + ¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤È¥°¥ë¡¼¥×¤ÎÀßÄê¤òÊݸ¤¹¤ë¥ë¡¼¥Á¥ó¤òÄɲᣠ+ +2000-01-20 + + * version 0.1.16alpha + + * src/statusbar.[ch]: statusbar_puts_all() ¤òÄɲᣠ+ statusbar_puts(): Ť¹¤®¤ëʸ»úÎó¤òÀÚ¤êµÍ¤á¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/folderview.[ch]: CTree ¤Î¹Ô¥Ç¡¼¥¿¤òʸ»úÎ󤫤é FolderInfo + ¹½Â¤ÂΤËÊѹ¹¡£ + ¤½¤·¤Æ¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤È¥°¥ë¡¼¥×¤òÅÐÏ¿¤¹¤ë¥Ý¥Ã¥×¥¢¥Ã¥×¥á¥Ë¥å¡¼¤ò + ¼ÂÁõ¡£ + * src/messageview.c: û½Ì¥Ø¥Ã¥Àɽ¼¨¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + +2000-01-19 + + * NetNews ¤Î¥»¥Ã¥·¥ç¥ó´ÉÍýÍÑ¤Ë src/news.[ch] ¤òÄɲᣠ+ * src/summaryview.[ch]: NetNews ¤òÆɤि¤á¤Î¥³¡¼¥É¤òÄɲᣠ+ +2000-01-18 + + * src/mainwindow.c + src/prefs_common.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤Î¥¹¥¿¥¤¥ë¤òÊݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/main.c: ½ªÎ»Á°¤ËÀßÄê¤òÊݸ¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: ¥µ¥Þ¥ê¥¹¥Æ¡¼¥¿¥¹É½¼¨¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + * Äã¥ì¥Ù¥ë NNTP ¥»¥Ã¥·¥ç¥ó¤Î½èÍý¤Î¤¿¤á¤Ë src/nntp.[ch] ¤òÄɲᣠ+ +2000-01-17 + + * ¿Ê¹Ô¾õ¶·¤òɽ¼¨¤¹¤ë src/progress.[ch] ¤òÄɲᣠ+ * src/inc.c: src/progress.[ch] ¤ò»ÈÍѤ¹¤ë¤è¤¦¤Ë¥×¥í¥°¥ì¥¹¥À¥¤¥¢¥í¥° + ¥ë¡¼¥Á¥ó¤ò½¤Àµ¡£ + * src/folderview.[ch]: ½àÈ÷Ãʳ¬¤Î NetNews Âбþ¥³¡¼¥É¤òÄɲᣠ+ +2000-01-16 + + * version 0.1.15alpha + + * src/main.c + src/folderview.c: ´ö¤Ä¤«¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤Î½¤Àµ¡£ + * src/folderview.c: ¥Õ¥©¥ë¥À¤ÎºîÀ®/¥ê¥Í¡¼¥à/ºï½ü¤ò¼ÂÁõ¡£ + * src/utils.[ch]: ¥Ç¥£¥ì¥¯¥È¥ê¤òºÆµ¢Åª¤Ëºï½ü¤¹¤ë + remove_dir_recursive() ¤òÄɲᣠ+ +2000-01-15 + + * src/mainwindow.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤Îɽ¼¨·Á¼°¤ÎÁªÂò¤òÄɲᣠ+ * ¥æ¡¼¥¶¤Ëʸ»úÎó¤òÆþÎϤµ¤»¤ë¤¿¤á¤Ë src/inputdialog.[ch] ¤òÄɲᣠ+ * src/summaryview.[ch]: Ä̾ï¥â¡¼¥É»þ¤Î¥Ó¥å¡¼¤ÎµóÆ°¤òÊѹ¹¡£ + * src/mbox.c: lockf() ¤¬»ÈÍѤµ¤ì¤¿¤È¤­¤Ë¥Õ¥¡¥¤¥ë¤ò¥í¥Ã¥¯¤Ç¤­¤Ê¤¤ + ¥Ð¥°¤ò½¤Àµ (shigeri ¤µ¤ó thanks)¡£ + +2000-01-14 + + * version 0.1.14alpha + + * src/mainwindow.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤Î³°´Ñ¤òÊѹ¹¡£¥¦¥£¥ó¥É¥¦Áàºî¤ò½¤Àµ¡£ + * src/summaryview.c: ¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼¤Ëɽ¼¨¤µ¤ì¤ë¥á¥Ã¥»¡¼¥¸¤òÊѹ¹¡£ + * src/compose.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤òÄɲᣠ+ * src/*.xpm: gnome-libs ¤«¤é¥¢¥¤¥³¥ó¤ò¤¤¤¯¤Ä¤«ÇÒ¼Ú¤·¤¿(²¾)¡£ + +2000-01-13 + + * version 0.1.13alpha + + * src/summaryview.c: ¥¹¥ì¥Ã¥É²½¤Î¥Ð¥°¤ò½¤Àµ¡£¥³¡¼¥É¤ÎÀ°Íý¡£ + ½ÅÊ£¥á¥Ã¥»¡¼¥¸ºï½ü¥ë¡¼¥Á¥ó¤ò¥Ï¥Ã¥·¥å¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤Æ½ñ¤­´¹¤¨¤¿¡£ + * src/mainwindow.[ch]: ¥Ä¡¼¥ë¥Ð¡¼¤òÄɲᣠ+ +2000-01-12 + + * version 0.1.12alpha + + * src/summary_search.c: ¤â¤· OS ¤Ë wcsstr() ¤¬¤Ê¤¤¾ì¹ç¡¢ wcswcs() + ¤òÂå¤ï¤ê¤Ë»È¤¦¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.c: ¹â®²½¤Î¤¿¤á¡¢¤½¤Î¾ì¤Ç¥¹¥ì¥Ã¥É¤òºîÀ®¤¹¤ë¤è¤¦¤Ë + CTree À¸À®¥ë¡¼¥Á¥ó¤òÊѹ¹¤·¤¿¡£ + * src/procmsg.c: ¹â®²½¤Î¤¿¤á¤Ë¥á¥Ã¥»¡¼¥¸½èÍý¥ë¡¼¥Á¥ó¤ò¥Ï¥Ã¥·¥å + ¥Æ¡¼¥Ö¥ë¤ò»È¤Ã¤Æ½ñ¤­´¹¤¨¤¿¡£°ÊÁ°¤è¤ê¤«¤Ê¤ê®¤¯¤Ê¤Ã¤Æ¤ëȦ¡£ + +2000-01-11 + + * version 0.1.11alpha + + * po/ja.po: msgstr ¤ò Solaris ¤Îɸ½à gettext ¤Î¤¿¤á¤Ë½¤Àµ¡£ + * src/main.c: config.h ¤Î include ¤òÄɲᣠ+ * src/compose.c: ¤â¤·ÊÖ¿®¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤Ë References ¥Ø¥Ã¥À¤¬ + ¤Ê¤¤¾ì¹ç¡¢In-Reply-To ¤Î¥á¥Ã¥»¡¼¥¸ ID ¤ò References ¥Ø¥Ã¥À¤Ë + ²Ã¤¨¤ë¤è¤¦¤ËÊѹ¹¤·¤¿¡£ + * src/summaryview.c: ¹â®²½¤Î¤¿¤á¤Ë¥¹¥ì¥Ã¥É²½¥ë¡¼¥Á¥ó¤ò¥Ï¥Ã¥·¥å + ¥Æ¡¼¥Ö¥ë¤ò»ÈÍѤ¹¤ë¤è¤¦¤ËÊѹ¹¤·¤¿¡£ + +2000-01-11 + + * version 0.1.10alpha + + * po/ja.po: Solaris ¤Ç¥³¥¢¥À¥ó¥×¤·¤Ê¤¤¤è¤¦¤Ë msgstr ¤ò½¤Àµ¡£ + * src/main.c: locale.h ¤Î include ¤òÄɲᣠ+ (°Ê¾å Sato ¤µ¤ó¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£) + * src/mbox.c + * src/socket.c: shigeri ¤µ¤ó¤Î Solaris ¥Ñ¥Ã¥Á¤ò¿¾¯½¤Àµ¤·¤Æ + Äɲá£(´¶¼Õ!) + +2000-01-10 + + * version 0.1.9alpha + + * src/compose.c: compose_encode_header(): ¤¤¤¯¤Ä¤«¥Ð¥°¤ò½¤Àµ¡£ + References ¥Ø¥Ã¥À¤ËÀµ¤·¤¯Âбþ¤¹¤ë¤è¤¦¤Ë¥Ø¥Ã¥ÀÀ¸À®¥ë¡¼¥Á¥ó¤ò + ½¤Àµ¡£Organization ¥Ø¥Ã¥À¤ËÂбþ¡£ + * src/procmsg.[ch] + src/procheader.c: ¥­¥ã¥Ã¥·¥å¥Ç¡¼¥¿¤«¤é Cc: ¤È Reply-To: ¤ò½ü¤¤¤¿¡£ + * src/procheader.[ch]: ¥Ø¥Ã¥À¥ê¥¹¥È¹½Â¤ÂΤÎ̾¾Î¤ò HeaderEntry ¤ËÊѹ¹¡£ + * src/summaryview.c: summary_thread_func(): ¾¯¤·ºÇŬ²½¡£ + ¾¤Î¥¦¥£¥¸¥§¥Ã¥È¤«¤é¥­¡¼¥¤¥Ù¥ó¥È¤òÅϤ¹¤¿¤á¤Ë + summary_pass_key_press_event() ¤òÄɲᣠ+ * src/messageview.c: messageview_key_pressed(): ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤¬ + ʬΥ¤µ¤ì¤Æ¤¤¤Æ¤â¥­¡¼¥¤¥Ù¥ó¥È¤¬¥µ¥Þ¥ê¥Ó¥å¡¼¤ËÅϤµ¤ì¤ë¤è¤¦¤Ë + ½¤Àµ¤·¤¿¡£(¤ï¤«¤¤@ÅÅÄÌÂç ¤µ¤ó¤´»ØŦ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£) + +2000-01-09 + + * version 0.1.8alpha + + * src/compose.c: RFC1522, RFC2047 ¤Ë(ÂçÂÎ)½àµò¤·¤¿¥Ø¥Ã¥À¤Î MIME + ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤ò¼ÂÁõ¡£ + * src/procheader.c: ÀÞ¤êÊÖ¤·¤¿¥Ø¥Ã¥À¹Ô¤Î½èÍý¤Î¥Ð¥°¤ò¤¤¤¯¤Ä¤«½¤Àµ¡£ + * src/headerview.c: headerview_show(): ¤¤¤¯¤Ä¤«¥Ð¥°¥Õ¥£¥Ã¥¯¥¹¡£ + +2000-01-07 + + * version 0.1.7alpha + + * src/utils.c: conv_euctojis(): ÆþÎÏʸ»úÎ󤬴Á»ú¤Ç½ª¤ï¤Ã¤Æ¤¤¤¿ + ¤È¤­¤Ë´Á»ú¥¢¥¦¥È¥·¡¼¥±¥ó¥¹ [ \033 ( B ] ¤¬Éղ䵤ì¤Ê¤¤¥Ð¥°¤ò + ½¤Àµ¡£(Nozomu Kobayashi ¤µ¤ó¤´»ØŦ¤¢¤ê¤¬¤È¤¦¤´¤¶¤¤¤Þ¤¹¡£) + * src/compose.c: compose_encode_header(): ¥¨¥ó¥³¡¼¥É¤·¤¿Ê¸»úÎó¤ò + Ê̤ΥХåե¡¤Ë½ÐÎϤ¹¤ë¤è¤¦¤ËÊѹ¹¤·¤¿¡£ + Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤¹¤ëµ¡Ç½¤È¡¢Á÷¿®¤Ë¼ºÇÔ¤·¤¿ + ¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤ëµ¡Ç½(²¾)¤ò¼ÂÁõ¤·¤¿¡£ + ¤½¤·¤Æ¡¢¤ä¤Ã¤È¤Á¤ã¤ó¤È¤·¤¿ To: ¤È Cc: ¤Î½èÍý¤ò¼ÂÁõ :) + * src/folderview.c: ¥Õ¥©¥ë¥ÀÁàºî¤Î¤¿¤á¤Î²¾¤Î±¦¥¯¥ê¥Ã¥¯¥Ý¥Ã¥×¥¢¥Ã¥× + ¥á¥Ë¥å¡¼¤òÄɲᣠ+ * ¥Õ¥¡¥¤¥ëºîÀ®/¥³¥Ô¡¼»þ¤Î¥Ñ¡¼¥ß¥Ã¥·¥ç¥ó¤ò¤¤¤¯¤Ä¤«½¤Àµ¡£ + +2000-01-07 + + * version 0.1.6alpha + + * src/procheader.c: ¥Ø¥Ã¥À¤Î¥ê¥¹¥È¤ò¥Ì¥ë¥¿¡¼¥ß¥Í¡¼¥È¤·¤Æ¤¤¤º¡¢ + segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + +2000-01-06 + + * version 0.1.5alpha + + * src/procheader.[ch]: ´Ø¿ô procheader_get_one_field() ¤òÄɲᣠ+ ¤³¤Î´Ø¿ô¤Ï¥Ø¥Ã¥À¤Î¥ê¥¹¥È¤Ë¥Þ¥Ã¥Á¤¹¤ë1¤Ä¤Î¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÆÀ¤ë¡£ + ¤½¤·¤Æ¤¢¤Þ¤êÈÆÍÑÀ­¤Î¤Ê¤¤ procheader_get_unfolded_line() ¤òºï½ü¤·¡¢ + procheader_get_header_fields() ¤ò procheader_get_one_field() ¤ò + »È¤Ã¤Æ½ñ¤­´¹¤¨¤¿¡£ + * src/summaryview.c: ¥­¡¼ÆþÎÏȽÄê¥ë¡¼¥Á¥ó¤ò¤¤¤¯¤Ä¤«¥Ð¥°¥Õ¥£¥Ã¥¯¥¹¡£ + * README, README.jp: ¥É¥­¥å¥á¥ó¥È¤ò¾¯¤·½¤Àµ¡£ + +2000-01-05 + + * src/menu.c: menu_set_sensitive(): ¥á¥Ë¥å¡¼¥¢¥¤¥Æ¥à¤¬¥µ¥Ö¥á¥Ë¥å¡¼¤ò + »ý¤Ã¤Æ¤¤¤¿¤È¤­¡¢¥¢¥¤¥Æ¥à¤Ç¤Ê¤¯¥µ¥Ö¥á¥Ë¥å¡¼¤Î¥»¥ó¥·¥Æ¥£¥Ó¥Æ¥£¤ò + ÀÚ¤êÂؤ¨¤Æ¤·¤Þ¤¦¥Ð¥°¤ò½¤Àµ¡£ + +2000-01-05 + + * version 0.1.4alpha + + * src/summaryview.c: ¶õ¤Î¥µ¥Þ¥ê¥Ó¥å¡¼¤òÃæ±û¥¯¥ê¥Ã¥¯¤·¤¿¤È¤­¤Ë + segmentation fault ¤òµ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + ̤ÆÉ¥Þ¡¼¥¯¤òÉÕ¤±¤¿¤È¤­¤Ë°ÜÆ°¤¹¤ë¥Õ¥©¥ë¥À¤Îʸ»úÎó¤ò²òÊü¤·¤Æ¤·¤Þ¤¦ + ¥Ð¥°¤ò½¤Àµ¡£ + ¸½ºß¤Î¥Õ¥©¥ë¥À¤¬¤´¤ßÈ¢¤Î¤È¤­¤Ï¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Ê¤¤¤è¤¦¤Ë¤·¤¿¡£ + * src/summaryview.[ch] + * src/mainwindow.c + * src/procmsg.[ch]: ¥­¥ã¥Ã¥·¥å¹¹¿·¥â¡¼¥É¤ò²Ã¤¨¤¿(°ÊÁ°¤Î¥­¥ã¥Ã¥·¥å¤ò + ÇË´þ¤¹¤ë)¡£ + +2000-01-04 + + * src/procheader.c: ¥Ø¥Ã¥À½èÍý¥ë¡¼¥Á¥ó¤ò¤µ¤é¤ËºÇŬ²½¡£ + ¿·¤¿¤Ë´Ø¿ô procheader_get_header_fields() ¤ò²Ã¤¨¤¿¡£ + ¤³¤Î´Ø¿ô¤Ï¥Ø¥Ã¥À̾¤ÎÇÛÎó¤ò°ú¿ô¤È¤·¤Æ¼õ¤±¼è¤ê¡¢¥Ø¥Ã¥À¤ÎÆâÍƤò + ¥»¥Ã¥È¤¹¤ë¡£ + +2000-01-03 + + * src/compose.c: ¥á¥Ã¥»¡¼¥¸ËÜʸ¤¬ ascii ʸ»ú¤Î¤ß¤Î¾ì¹ç¡¢ + Content-Type ¤Î charset ¤È¤·¤Æ US-ASCII ¤ò»ØÄꤹ¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/main.[ch] + * src/prefs.c + * src/prefs_common.c + * src/prefs_account.c + * src/account.c: ÀßÄê¥Õ¥¡¥¤¥ë¤Î°ÌÃÖ¤òÊѹ¹¡£ + * src/account.c: ESC¥­¡¼¤ò²¡¤·¤¿¤È¤­¤Ë¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤é¤ì¤ë¤è¤¦¤Ë + ¤·¤¿¡£ + +2000-01-02 + + * version 0.1.3alpha + + * src/compose.c: Á÷¿®¤¬¼ºÇÔ¤·¤¿¤È¤­¤Ë segmentation fault ¤ò + °ú¤­µ¯¤³¤¹¥Ð¥°¤ò½¤Àµ¡£ + src/send.c ¤«¤é¥Ø¥Ã¥ÀÀ¸À®¥ë¡¼¥Á¥ó¤ò°ÜÆ°¤·¤¿¡£ + * src/send.c: ¥Ø¥Ã¥ÀÀ¸À®¥ë¡¼¥Á¥ó¤ò src/compose.c ¤Ë°ÜÆ°¤·¤¿¡£ + * src/prefs.c: '~' ¤ò¥Û¡¼¥à¥Ç¥£¥ì¥¯¥È¥ê¤ËŸ³«¤¹¤ë¤è¤¦¤Ë¤·¤¿¡£ + * src/prefs_account.[ch]: ½ð̾¥Õ¥¡¥¤¥ë¥Ñ¥¹¤ÎÀßÄê¤òÄɲᣠ+ * src/prefs_common.[ch]: ¥¹¥×¡¼¥ë¥Ñ¥¹¤ÎÀßÄê¤òÄɲᣠ+ * src/inc.c: ¥æ¡¼¥¶Ì¾¤Î¼èÆÀÊýË¡¤ò g_get_user_name() ¤ò»ÈÍѤ¹¤ë + ¤è¤¦¤ËÊѹ¹¤·¤¿¡£ + +2000-01-01 + + * version 0.1.2alpha + + * ChangeLog, ChangeLog.jp (¤³¤Î¥Õ¥¡¥¤¥ë) ¤ò²Ã¤¨¤¿¡£ + * ¾¯¤·¥³¡¼¥É¤òÀ°Íý¡£ + * °ì»þ¥¦¥£¥ó¥É¥¦¤Î´ÉÍý¤Î¤¿¤á¤Ë manage_window.[ch] ¤òÄɲᣠ+ * src/procheader.c: ¥Ø¥Ã¥À½èÍý¥ë¡¼¥Á¥ó¤ò¾¯¤·ºÇŬ²½¡£ + * src/send.c: Àܳ»þ¤ÎÎã³°½èÍý¤ò½¤Àµ¡£ + * src/inc.c: ¥æ¡¼¥¶Ì¾¤Î¼èÆÀ»þ¤ÎÎã³°½èÍý¤òÄɲᣠ+ +2000-01-01 + + * version 0.1.1alpha + + * src/send.c: Content-Type: ¥Ø¥Ã¥À¤òÉղ䷤ʤ¤¥Ð¥°¤ò½¤Àµ¡£ + +2000-01-01 + + * version 0.1.0alpha + + * ºÇ½é¤Î¥ê¥ê¡¼¥¹¡£ diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..7370bada7 --- /dev/null +++ b/INSTALL @@ -0,0 +1,111 @@ +Installation +============ + +This program requires GTK+ 1.2.6 or higher to be compiled. + +This program is developed on Debian GNU/Linux (woody) +(Linux 2.2.x + glibc 2.2), so it is possible not to work correctly +on the other environment. + +It is confirmed to work on the following environments: + +o Debian GNU/Linux (woody/sid) (glibc 2.2) +o Kondara MNU/Linux (glibc 2.1.x) +o Vine Linux 1.1 (glibc 2.0.x + libwcsmbs) +o Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC) +o Vine Linux 2.1 +o Laser5 Linux 6.0 (glibc 2.1.x) +o Laser5 Linux 6.2 (glibc 2.1.x) +o Laser5 Linux 6.4 (glibc 2.1.x) +o TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs) +o TurboLinux 6.0 (glibc 2.1.2) +o Miracle Linux Standard Edition Version1.0 +o Miracle Linux for PostgreSQL Version1.0 +o Miracle Linux for Samba Version1.0 +o RedHat Linux 5.2 (glibc 2.0.7) +o RedHat Linux 6.0 +o RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x) +o RedHat Linux 6.2 / 6.2J (glibc 2.1.x) +o RedHat Linux 7.0 / 7.0J +o LinuxPPC2000 + Yukikaze(Japanization kit) +o Linux2000G (Intel / PPC) +o HOLON Linux 2.0 (Intel / PPC) +o Linux for PPC Japanese Edition 2.0 (glibc 2.1.x) +o Linux for PPC Japanese Edition 3.0 (glibc 2.1.x) +o Linux MLD4 +o Linux MLD5 +o Plamo Linux 2.0 +o Slackware 7.1 +o Linux Mandrake 7.0 +o Linux Mandrake 7.1 +o Linux Mandrake 7.2 +o Linux Mandrake 8.0 beta +o SuSE Linux 6.3 (glibc 2.1.2) +o SuSE Linux 6.4 +o SuSE Linux 7.0 +o SuSE Linux 7.1 +o OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3) +o Caldera OpenDesktop 2.4 +o Conectiva Linux 4.0 +o Conectiva Linux 5.0 +o Vector Linux 1.5 +o FreeBSD 3.2-RELEASE +o FreeBSD 3.4-RELEASE +o FreeBSD 4.0-RELEASE +o FreeBSD 4.1-RELEASE +o FreeBSD 4.2-RELEASE +o FreeBSD 5.0-CURRENT +o NetBSD 1.4.2 +o NetBSD 1.5 + XPG4DL +o OpenBSD 2.7 +o OpenBSD 2.8 (i386) +o BSD/OS 4.0.1 +o Solaris 2.5 +o Solaris 2.5.2 +o Solaris 2.6 +o Solaris 7 +o Solaris 8 +o IRIX 6.3 +o IRIX 6.5 6.5.8m +o HP-UX 10.20 +o Mac OS X (Darwin 1.3) + Xtools (has locale problem) +o Windows (cygwin + GTK+ for win32) (unstable) + +For installation, just type: + +% ./configure +% make +% su +Password: [Enter password] +# make install + +I recommend you to install gdk-pixbuf or gdk_imlib library before installing +for built-in image view support, and libcompface for X-Face support. + + +If you want to enable multithread support, append the option +--enable-threads after ./configure. + +Notice: Multithread support is still in an experimental stage, and it + doesn't work correctly. + +If you want to enable IPv6 support, append the option +--enable-ipv6 after ./configure. + +If you want to enable GnuPG support, you need GPGME 0.2.1 or later, and +GnuPG 1.0.4f or later. You can get them from the following location: + + ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/ + ftp://ftp.gnupg.org/pub/gcrypt/devel/ + +and append the option --enable-gpgme after ./configure. + +Warning: the GnuPG support is still in the development stage, and it + may not work correctly. I suggest never to use a real key. + Please use sample keys. + + +If the installation of Sylpheed failed, check all needed libraries are +correctly installed. If it still failed, please send bug report to: + + Hiroyuki Yamamoto diff --git a/INSTALL.jp b/INSTALL.jp new file mode 100644 index 000000000..6ef52edfd --- /dev/null +++ b/INSTALL.jp @@ -0,0 +1,111 @@ +¥¤¥ó¥¹¥È¡¼¥ëÊýË¡ +================ + +¤³¤Î¥×¥í¥°¥é¥à¤ò¥³¥ó¥Ñ¥¤¥ë¤¹¤ë¤Ë¤Ï GTK+ 1.2.6 °Ê¹ß¤¬É¬ÍפǤ¹¡£ + +¤³¤Î¥×¥í¥°¥é¥à¤Ï Debian GNU/Linux (woody) (Linux 2.2.x + glibc 2.2) +¾å¤Ç³«È¯¤µ¤ì¤Æ¤¤¤ë¤¿¤á¡¢Â¾¤Î´Ä¶­¤Ç¤Ï¤¦¤Þ¤¯Æ°ºî¤·¤Ê¤¤²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£ + +°Ê²¼¤Î´Ä¶­¤ÇÆ°ºî¤¬³Îǧ¤µ¤ì¤Æ¤¤¤Þ¤¹: + +o Debian GNU/Linux (woody/sid) (glibc 2.2) +o Kondara MNU/Linux (glibc 2.1.x) +o Vine Linux 1.1 (glibc 2.0.x + libwcsmbs) +o Vine Linux 2.0 (glibc 2.1.x) (Intel, PPC) +o Vine Linux 2.1 +o Laser5 Linux 6.0 (glibc 2.1.x) +o Laser5 Linux 6.2 (glibc 2.1.x) +o Laser5 Linux 6.4 (glibc 2.1.x) +o TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs) +o TurboLinux 6.0 (glibc 2.1.2) +o Miracle Linux Standard Edition Version1.0 +o Miracle Linux for PostgreSQL Version1.0 +o Miracle Linux for Samba Version1.0 +o RedHat Linux 5.2 (glibc 2.0.7) +o RedHat Linux 6.0 +o RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x) +o RedHat Linux 6.2 / 6.2J (glibc 2.1.x) +o RedHat Linux 7.0 / 7.0J +o LinuxPPC2000 + ÀãÉ÷(ÆüËܸ첽 kit) +o Linux2000G (Intel / PPC) +o HOLON Linux 2.0 (Intel / PPC) +o Linux for PPC Japanese Edition 2.0 (glibc 2.1.x) +o Linux for PPC Japanese Edition 3.0 (glibc 2.1.x) +o Linux MLD4 +o Linux MLD5 +o Plamo Linux 2.0 +o Slackware 7.1 +o Linux Mandrake 7.0 +o Linux Mandrake 7.1 +o Linux Mandrake 7.2 +o Linux Mandrake 8.0 beta +o SuSE Linux 6.3 (glibc 2.1.2) +o SuSE Linux 6.4 +o SuSE Linux 7.0 +o SuSE Linux 7.1 +o OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3) +o Caldera OpenDesktop 2.4 +o Conectiva Linux 4.0 +o Conectiva Linux 5.0 +o Vector Linux 1.5 +o FreeBSD 3.2-RELEASE +o FreeBSD 3.4-RELEASE +o FreeBSD 4.0-RELEASE +o FreeBSD 4.1-RELEASE +o FreeBSD 4.2-RELEASE +o FreeBSD 5.0-CURRENT +o NetBSD 1.4.2 +o NetBSD 1.5 + XPG4DL +o OpenBSD 2.7 +o OpenBSD 2.8 (i386) +o BSD/OS 4.0.1 +o Solaris 2.5 +o Solaris 2.5.2 +o Solaris 2.6 +o Solaris 7 +o Solaris 8 +o IRIX 6.3 +o IRIX 6.5 6.5.8m +o HP-UX 10.20 +o Mac OS X (Darwin 1.3) + Xtools (locale ¤ËÌäÂꤢ¤ê) +o Windows (cygwin + GTK+ for win32) (unstable) + +¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤ËÆþÎϤ·¤Æ¤¯¤À¤µ¤¤: + +% ./configure +% make +% su +Password: [¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ] +# make install + +¥¤¥ó¥¹¥È¡¼¥ëÁ°¤Ë¡¢¥Ó¥ë¥È¥¤¥ó²èÁüɽ¼¨Âбþ¤Î¤¿¤á¤Ë gdk-pixbuf ¤Þ¤¿¤Ï gdk_imlib +¥é¥¤¥Ö¥é¥ê¡¢¤½¤·¤Æ X-Face Âбþ¤Î¤¿¤á¤Ë libcompface ¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Æ¤ª¤¯ +¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£ + + +¥Þ¥ë¥Á¥¹¥ì¥Ã¥ÉÂбþ¤òÍ­¸ú¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢ ./configure ¤Î¸å¤Ë +--enable-threads ¥ª¥×¥·¥ç¥ó¤òÄɲ䷤Ƥ¯¤À¤µ¤¤¡£ + +Ãí°Õ: ¥Þ¥ë¥Á¥¹¥ì¥Ã¥ÉÂбþ¤Ï¤Þ¤À¼Â¸³Ãʳ¬¤Ç¤¢¤ê¡¢Àµ¤·¤¯Æ°ºî¤·¤Þ¤»¤ó¡£ + +IPv6 Âбþ¤òÍ­¸ú¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢ ./configure ¤Î¸å¤Ë +--enable-ipv6 ¥ª¥×¥·¥ç¥ó¤òÄɲ䷤Ƥ¯¤À¤µ¤¤¡£ + +GnuPG Âбþ¤òÍ­¸ú¤Ë¤·¤¿¤¤¾ì¹ç¤Ï¡¢ GPGME 0.2.1 °Ê¹ß¤È GnuPG 1.0.4f °Ê¹ß¤¬ +ɬÍפǤ¹¡£°Ê²¼¤Î¾ì½ê¤«¤é¼èÆÀ¤Ç¤­¤Þ¤¹: + + ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/ + ftp://ftp.gnupg.org/pub/gcrypt/devel/ + +¤½¤·¤Æ¡¢ ./configure ¤Î¸å¤Ë --enable-gpgme ¥ª¥×¥·¥ç¥ó¤òÄɲ䷤Ƥ¯¤À¤µ¤¤¡£ + +·Ù¹ð: GnuPG Âбþ¤Ï¤Þ¤À³«È¯ÅÓ¾å¤ÎÃʳ¬¤Ç¤¢¤ê¡¢Àµ¾ï¤ËÆ°ºî¤·¤Ê¤¤¤«¤â¤·¤ì¤Þ¤»¤ó¡£ + ·è¤·¤ÆËÜÅö¤Î¸°¤ò»È¤ï¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£¥µ¥ó¥×¥ë¤Î¸°¤ò¤ª»È¤¤¤¯¤À + ¤µ¤¤¡£ + + +¤â¤· Sylpheed ¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ë¼ºÇÔ¤·¤¿¤é¡¢É¬Íפʥ饤¥Ö¥é¥ê¤¬Àµ¤·¤¯ +¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£¤½¤ì¤Ç¤âÂÌÌܤʾì¹ç¡¢ +¥Ð¥°¥ì¥Ý¡¼¥È¤ò°Ê²¼¤Þ¤ÇÁ÷¤Ã¤Æ¤¯¤À¤µ¤¤¡£ + + »³ËÜ ÇîÇ· / Hiroyuki Yamamoto diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 000000000..23a482d9b --- /dev/null +++ b/Makefile.am @@ -0,0 +1,18 @@ +SUBDIRS = ac po intl libkcc src manual + +EXTRA_DIST = \ + ChangeLog.jp \ + INSTALL.jp \ + README.jp \ + TODO.jp \ + sylpheed.spec \ + sylpheed.spec.in \ + autogen.sh + +BZIP2_ENV = + +release: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + BZIP2=$(BZIP2_ENV) $(TAR) chojf $(distdir).tar.bz2 $(distdir) + -rm -rf $(distdir) diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 000000000..0fa5d2a8a --- /dev/null +++ b/Makefile.in @@ -0,0 +1,420 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = . + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GDK_IMLIB_CFLAGS = @GDK_IMLIB_CFLAGS@ +GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GPGME_CFLAGS = @GPGME_CFLAGS@ +GPGME_CONFIG = @GPGME_CONFIG@ +GPGME_LIBS = @GPGME_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +IMLIB_CFLAGS = @IMLIB_CFLAGS@ +IMLIB_CONFIG = @IMLIB_CONFIG@ +IMLIB_LIBS = @IMLIB_LIBS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ +localedir = @localedir@ +manualdir = @manualdir@ + +SUBDIRS = ac po intl libkcc src manual + +EXTRA_DIST = ChangeLog.jp INSTALL.jp README.jp TODO.jp sylpheed.spec sylpheed.spec.in autogen.sh + + +BZIP2_ENV = +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = sylpheed.spec +DIST_COMMON = README ./stamp-h.in ABOUT-NLS AUTHORS COPYING ChangeLog \ +INSTALL Makefile.am Makefile.in NEWS TODO acconfig.h aclocal.m4 \ +config.guess config.h.in config.sub configure configure.in install-sh \ +ltconfig ltmain.sh missing mkinstalldirs sylpheed.spec.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.in + cd $(srcdir) && $(ACLOCAL) + +config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@$(srcdir)/configure.in $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES) + cd $(srcdir) && $(AUTOCONF) + +config.h: stamp-h + @if test ! -f $@; then \ + rm -f stamp-h; \ + $(MAKE) stamp-h; \ + else :; fi +stamp-h: $(srcdir)/config.h.in $(top_builddir)/config.status + cd $(top_builddir) \ + && CONFIG_FILES= CONFIG_HEADERS=config.h \ + $(SHELL) ./config.status + @echo timestamp > stamp-h 2> /dev/null +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@$(srcdir)/stamp-h.in + @if test ! -f $@; then \ + rm -f $(srcdir)/stamp-h.in; \ + $(MAKE) $(srcdir)/stamp-h.in; \ + else :; fi +$(srcdir)/stamp-h.in: $(top_srcdir)/configure.in $(ACLOCAL_M4) acconfig.h + cd $(top_srcdir) && $(AUTOHEADER) + @echo timestamp > $(srcdir)/stamp-h.in 2> /dev/null + +mostlyclean-hdr: + +clean-hdr: + +distclean-hdr: + -rm -f config.h + +maintainer-clean-hdr: +sylpheed.spec: $(top_builddir)/config.status sylpheed.spec.in + cd $(top_builddir) && CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status + +# 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. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; 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; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(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 + -rm -rf $(distdir) + GZIP=$(GZIP_ENV) $(TAR) zxf $(distdir).tar.gz + mkdir $(distdir)/=build + mkdir $(distdir)/=inst + dc_install_base=`cd $(distdir)/=inst && pwd`; \ + cd $(distdir)/=build \ + && ../configure --with-included-gettext --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) dist + -rm -rf $(distdir) + @banner="$(distdir).tar.gz is ready for distribution"; \ + dashes=`echo "$$banner" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + echo "$$dashes" +dist: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +dist-all: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + -rm -rf $(distdir) +distdir: $(DISTFILES) + -rm -rf $(distdir) + mkdir $(distdir) + -chmod 777 $(distdir) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +all-recursive-am: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile config.h +all-redirect: all-recursive-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-hdr clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-hdr distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-recursive + -rm -f config.status + +maintainer-clean-am: maintainer-clean-hdr maintainer-clean-tags \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + -rm -f config.status + +.PHONY: mostlyclean-hdr distclean-hdr clean-hdr maintainer-clean-hdr \ +install-data-recursive uninstall-data-recursive install-exec-recursive \ +uninstall-exec-recursive installdirs-recursive uninstalldirs-recursive \ +all-recursive check-recursive installcheck-recursive info-recursive \ +dvi-recursive mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck all-recursive-am \ +install-exec-am install-exec install-data-am install-data install-am \ +install uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +release: distdir + -chmod -R a+r $(distdir) + GZIP=$(GZIP_ENV) $(TAR) chozf $(distdir).tar.gz $(distdir) + BZIP2=$(BZIP2_ENV) $(TAR) chojf $(distdir).tar.bz2 $(distdir) + -rm -rf $(distdir) + +# 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: diff --git a/NEWS b/NEWS new file mode 100644 index 000000000..e69de29bb diff --git a/README b/README new file mode 100644 index 000000000..81e124822 --- /dev/null +++ b/README @@ -0,0 +1,153 @@ + Sylpheed - a GTK+ based, lightweight, and fast e-mail client + + Copyright(C) 1999,2000 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 + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + For more details see the file COPYING. + + +What's Sylpheed +=============== + +Sylpheed is an e-mail client (and news reader) based on GTK+, running on +X Window System, and aiming for + + * Quick response + * Graceful, and sophisticated interface + * Easy configuration, intuitive operation + * Abundant features + +The appearance and interface are similar to some popular e-mail clients for +Windows, such as Outlook Express, Becky!, and Datula. The interface is also +designed to emulate the mailers on Emacsen, and almost all commands are +accessible with the keyboard. + +The messages are managed by MH format, and you'll be able to use it together +with another mailer based on MH format (like Mew). You can also utilize +fetchmail or/and procmail, and external programs on receiving (like inc or +imget). + +Currently implemented features are: + + o user-friendly and intuitive interface + o 3-paned view like many Windoze-based mail client + o ability of keyboard-only operation + o Mew/Wanderlust-like key bind (most of normally used keys have been + implemented) + o multipart MIME + o built-in image view + o X-Face support + o external editor support + o unlimited multiple account handling + o message queueing + o filtering + o draft message function + o line-wrapping + o XML-based address book + o APOP support + o unread message management + o multiple MH folder support + o integrated NetNews client + o IPv6 support + o GnuPG support (currently implementing) + o multithread support (experimental) + o mbox importing + o drag & drop (partially implemented) + o fast thread display + o high-speed message processing + o lightweight resource usage + o easily customizable configuration + o supports automake + autoconf, and internationalization of message + by gettext + o IMAP4 support (currently implementing) + +You'll figure out the usage if you have used a mailer on Windows, or +Mew or Wanderlust. + +Installation +============ + +See INSTALL for installation instructions. + +Usage +===== + +Initial startup +--------------- + +When Sylpheed is executed for the first time, it automatically creates the +configuration files under ~/.sylpheed/, and asks you the location of +mailbox. The default is ~/Mail. If some files which are non-MH format +already exist on the directory, you will have to specify another location. + +Required settings +----------------- + +Initially, you have to create at least one account to send or receive +messages (you can read messages that already exist without creating +accounts). The configuration dialog will be shown by clicking +"Configuration -> Create new account..." on the menu, or "Account" on +the toolbar. Then, fill the required settings. + +Refer to the manual supplied with this program for the general usage. + +Information +=========== + +You can check the newest version and information about Sylpheed at: + + http://sylpheed.good-day.net/ + +There's also the manual of Sylpheed written by +Yoichi Imai on: + + http://y-imai.good-day.net/sylpheed/ + +Feedback +======== + +Comments, ideas and (most of all) bug reports (and especially patches) are +very welcome. + +Anonymous cvs +============= + +You can get the newest source code with the anonymous cvs. + +First, set your CVSROOT environment variable to: + + :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed + +Next, login with: + + cvs login + +and just press Enter key to `CVS password:'. + +Move to an appropriate directory, and with the command: + + cvs -z3 checkout sylpheed + +a source tree named `sylpheed' is created under the current directory. + +To update to the newest source tree, run the command: + + cvs -z3 update + +on the top directory of the source tree. + +-- +Hiroyuki Yamamoto diff --git a/README.jp b/README.jp new file mode 100644 index 000000000..2a38f1441 --- /dev/null +++ b/README.jp @@ -0,0 +1,189 @@ + Sylpheed - GTK+ ¥Ù¡¼¥¹¤Î·ÚÎ̤ǹ⮤ÊÅŻҥ᡼¥ë¥¯¥é¥¤¥¢¥ó¥È + + Copyright(C) 1999,2000 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 + 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, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + For more details see the file COPYING. + +(»²¹ÍÌõ) + ¤³¤Î¥×¥í¥°¥é¥à¤Ï¥Õ¥ê¡¼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¹¡£¤¢¤Ê¤¿¤Ï¡¢ Free Software + Foundation ¤Ë¤è¤Ã¤Æ¸øɽ¤µ¤ì¤Æ¤¤¤ë GNU °ìÈÌ»ÈÍѵöÂú (¥Ð¡¼¥¸¥ç¥ó2¡¢ + ¤Þ¤¿¤Ï(Ǥ°Õ¤Ë)¤½¤ì°Ê¹ß¤Î¥Ð¡¼¥¸¥ç¥ó¤Î¤É¤Á¤é¤«) ¤Î¾ò·ï¤Ë½¾¤Ã¤Æ¡¢ + ¤³¤ì¤òºÆÇÛÉÛ¡¢¤½¤·¤Æ(¤¢¤ë¤¤¤Ï)½¤Àµ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + + ¤³¤Î¥×¥í¥°¥é¥à¤ÏÍ­ÍѤǤ¢¤ë¤³¤È¤ò´üÂÔ¤·¤ÆÇÛÉÛ¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ + ¡Ö²¿¤ÎÊݾڤ⤢¤ê¤Þ¤»¤ó¡×¡£¡Ö¾¦ÍøÍѡפ¢¤ë¤¤¤Ï¡ÖÆÃÄê¤ÎÌÜŪ¤Ø¤ÎŬ¹ç¡×¤Ø¤Î + °ÅÌÛ¤ÎÊݾڤµ¤¨¤¢¤ê¤Þ¤»¤ó¡£¤µ¤é¤Ê¤ë¾ÜºÙ¤Ï¡¢GNU °ìÈÌ»ÈÍѵöÂú¤ò»²¾È + ¤·¤Æ¤¯¤À¤µ¤¤¡£ + + ¤¢¤Ê¤¿¤Ï¤³¤Î¥×¥í¥°¥é¥à¤È¶¦¤Ë GNU °ìÈÌ»ÈÍѵöÂú¤Î¥³¥Ô¡¼¤òÆþ¼ê¤·¤Æ¤¤¤ë + ¤Ï¤º¤Ç¤¹¤¬¡¢¤â¤·¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¢ the Free SoftwareFoundation, Inc., + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ¤Þ¤Ç½ñ¤­Á÷¤Ã¤Æ + ¤¯¤À¤µ¤¤¡£ + + ¤µ¤é¤Ê¤ë¾ÜºÙ¤Ï¡¢ COPYING ¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ + + +What's Sylpheed +=============== + +Sylpheed¤ÏGTK+¤ò»ÈÍѤ·¤¿¡¢X Window System¾å¤ÇÆ°ºî¤¹¤ë + + * ·Ú²÷¤ÊÆ°ºî + * Èþ¤·¤¯¡¢ÀöÎý¤µ¤ì¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹ + * ÍưפÊÀßÄꡦľ´ÑŪ¤ÊÁàºî + * Ë­É٤ʵ¡Ç½ + +¤òÌܻؤ·¤¿ÅŻҥ᡼¥ë¥¯¥é¥¤¥¢¥ó¥È(& ¥Ë¥å¡¼¥¹¥ê¡¼¥À¡¼)¤Ç¤¹¡£ + +³°´Ñ¤ä¥¤¥ó¥¿¥Õ¥§¡¼¥¹¤ÏOutlook Express¡¢Becky!¡¢Datula¤È¤¤¤Ã¤¿¡¢ Windows¤Ç +¤ÏÄêÈ֤Υ᡼¥é¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£¤Þ¤¿¡¢Áàºî·Ï¤ÏMew¤äWanderlustÅù¤Î Emacs +·Ï¥á¡¼¥é¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Æ¡¢¥­¡¼¥Ü¡¼¥É¤Î¤ß¤Ë¤è¤ëÁàºî¤¬²Äǽ¤È¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£ + +¥á¥Ã¥»¡¼¥¸¤ÏMH·Á¼°¤Ç´ÉÍý¤·¤Æ¤ª¤ê¡¢Â¾¤ÎMH·Á¼°¤ò»ÈÍѤ·¤¿¥á¡¼¥é(MewÅù)¤ÈÊ»ÍÑ +¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£¤Þ¤¿¡¢fetchmail¤äprocmail¤òÍøÍѤ·¤¿¤ê¡¢¼õ¿®¤Ë³°Éô +¥×¥í¥°¥é¥à(inc, imgetÅù)¤ò»ÈÍѤ¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ + +¸½ºß¼ÂÁõ¤µ¤ì¤Æ¤¤¤ëµ¡Ç½¤Ï + + o ¥æ¡¼¥¶¥Õ¥ì¥ó¥É¥ê¤Çľ´ÑŪ¤Ê¥¤¥ó¥¿¥Õ¥§¡¼¥¹ + o Windoze ¾å¤Î¥á¡¼¥ë¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤¯¤¢¤ë3¤Ú¥¤¥óɽ¼¨ + o ¥­¡¼¥Ü¡¼¥É¤Î¤ß¤Ë¤è¤ëÁàºî¤¬²Äǽ + o Mew/Wanderlust ¥é¥¤¥¯¤Ê¥­¡¼¥Ð¥¤¥ó¥É (Ä̾ï»È¤ï¤ì¤ë¥­¡¼¤ÎÂçÉôʬ¤Ï + ¼ÂÁõºÑ) + o ¥Þ¥ë¥Á¥Ñ¡¼¥È MIME + o ²èÁüɽ¼¨µ¡Ç½¤òÆ⢠+ o X-Face Âбþ + o ³°Éô¥¨¥Ç¥£¥¿Âбþ + o ̵À©¸Â¤ÎÊ£¿ô¥¢¥«¥¦¥ó¥È´ÉÍý + o ¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®ÂÔµ¡µ¡Ç½ + o ¿¶¤êʬ¤±µ¡Ç½ + o Áð¹Æµ¡Ç½ + o ¼«Æ°²þ¹Ôµ¡Ç½ + o XML ¥Ù¡¼¥¹¤Î¥¢¥É¥ì¥¹Ä¢ + o APOP Âбþ + o ̤ÆÉ¥á¥Ã¥»¡¼¥¸´ÉÍý + o Ê£¿ô¤Î MH ¥Õ¥©¥ë¥À¤ËÂбþ + o Åý¹ç NetNews ¥¯¥é¥¤¥¢¥ó¥È + o IPv6 Âбþ + o GnuPG Âбþ (¸½ºß¼ÂÁõÃæ) + o ¥Þ¥ë¥Á¥¹¥ì¥Ã¥ÉÂбþ (¼Â¸³Åª) + o mbox ¥Õ¥¡¥¤¥ë¤Î¥¤¥ó¥Ý¡¼¥È + o ¥É¥é¥Ã¥° & ¥É¥í¥Ã¥× (°ìÉô¼ÂÁõ) + o ¹â®¤Ê¥¹¥ì¥Ã¥Éɽ¼¨ + o ¹â®¤Ê¥á¥Ã¥»¡¼¥¸½èÍý + o Äã¾ÃÈñ¥ê¥½¡¼¥¹ + o Íưפ˥«¥¹¥¿¥Þ¥¤¥º¤Ç¤­¤ëÀßÄê + o automake + autoconf ¤È gettext ¤Ë¤è¤ë¥á¥Ã¥»¡¼¥¸¤Î¹ñºÝ²½¤ËÂбþ + o IMAP4 Âбþ (¸½ºß¼ÂÁõÃæ) + +Windows ¾å¤Î¥á¡¼¥é¡¢¤¢¤ë¤¤¤Ï Mew ¤ä Wanderlust ¤ò»ÈÍѤ·¤¿¤³¤È¤Î¤¢¤ë¿Í¤Ê¤é +¤¹¤°¤Ë»È¤¤Êý¤Ïʬ¤«¤ë¤È»×¤¤¤Þ¤¹¡£ + +¥¤¥ó¥¹¥È¡¼¥ëÊýË¡ +================ + +¥¤¥ó¥¹¥È¡¼¥ë¤ÎÀâÌÀ¤Ï INSTALL ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ + +»ÈÍÑÊýË¡ +======== + +µ¯Æ°Á°¤Î½àÈ÷ +------------ + +ÆüËܸì¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¡¢ Sylpheed ¤ò¼Â¹Ô¤¹¤ëÁ°¤Ë¥í¥«¡¼¥ë¤Ë´ØÏ¢¤¹¤ë +´Ä¶­ÊÑ¿ô¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó(ÆüËܸì Linux ¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥·¥ç¥ó +¤Î¾ì¹ç¤ÏÂçÄñ¤¹¤Ç¤ËÀßÄꤵ¤ì¤Æ¤¤¤Þ¤¹)¡£Î㤨¤Ð¡¢ + +% export LANG=ja_JP.eucJP + +¤Þ¤¿¤Ï + +% setenv LANG ja_JP.eucJP + +(ja_JP.eucJP ¤ÏŬÀÚ¤Ê¥í¥«¡¼¥ë̾¤ËÃÖ¤­´¹¤¨¤Æ¤¯¤À¤µ¤¤¡£) + +ËÝÌõ¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ÎÊý¤¬Îɤ±¤ì¤Ð¡¢ LANG ¤ÈƱÍÍ¤Ë LC_MESSAGES ¤â»ØÄꤷ¤Æ +¤¯¤À¤µ¤¤¡£ + +½é²óµ¯Æ°»þ¤ÎÃí°Õ +---------------- + +½é²ó¤Îµ¯Æ°»þ¤Ë¡¢ ~/.sylpheed/ °Ê²¼¤ËÀßÄê¥Õ¥¡¥¤¥ë¤¬¼«Æ°Åª¤ËºîÀ®¤µ¤ì¤Þ¤¹¡£ +¤Þ¤¿¡¢¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î°ÌÃÖ¤ò¼ÁÌ䤷¤Þ¤¹¡£¥Ç¥Õ¥©¥ë¥È¤Ï ~/Mail ¤Ç¤¹¡£¤â¤·¤½ +¤Î¥Ç¥£¥ì¥¯¥È¥ê¤Ë MH ¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¤Ï¤Ê¤¤¥Õ¥¡¥¤¥ë¤¬¤¹¤Ç¤Ë¸ºß¤¹¤ë¾ì¹ç¡¢ÊÌ +¤Î¾ì½ê¤ò»ØÄꤷ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ + +ɬÍפÊÀßÄê +---------- + +¥á¡¼¥ë¤ÎÁ÷¼õ¿®¤ò¹Ô¤¦¤Ë¤Ï¡¢ºÇ½é¤Ë¾¯¤Ê¤¯¤È¤â°ì¤Ä¥¢¥«¥¦¥ó¥È¤òºîÀ®¤·¤Æ¤ª¤¯É¬ +Íפ¬¤¢¤ê¤Þ¤¹(¥¢¥«¥¦¥ó¥È¤òºîÀ®¤·¤Ê¤¯¤Æ¤â¡¢´û¸¤Î¥á¡¼¥ë¤òÆɤळ¤È¤Ï²Äǽ¤Ç¤¹)¡£ +¥á¥Ë¥å¡¼¤Î¡ÖÀßÄê(C) -> ¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®(N)...¡×¡¢¤Þ¤¿¤Ï¥Ä¡¼¥ë¥Ð¡¼¤Î +¡Ö¥¢¥«¥¦¥ó¥È¡×¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¡¢ÀßÄê¥À¥¤¥¢¥í¥°¤¬É½¼¨¤µ¤ì¤ë¤Î¤Ç¡¢É¬ÍפÊÀß +Äê¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£ + +°ìÈÌŪ¤Ê»ÈÍÑË¡¤Ë´Ø¤·¤Æ¤Ï¤³¤Î¥×¥í¥°¥é¥à¤ËÉÕ°¤Î¥Þ¥Ë¥å¥¢¥ë¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¾ðÊó +==== + +ºÇ¿·¥Ð¡¼¥¸¥ç¥ó¤ä Sylpheed ¤Ë´Ø¤¹¤ë¾ðÊó¤Ï + + http://sylpheed.good-day.net/ + +¤Ç¥Á¥§¥Ã¥¯¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢ + + http://y-imai.good-day.net/sylpheed/ + +¤Ë º£°æ ÍÛ°ì»á ºî¤Î Sylpheed ¤Î¥Þ¥Ë¥å¥¢¥ë¤¬ +¤¢¤ê¤Þ¤¹¡£ + +¥Õ¥£¡¼¥É¥Ð¥Ã¥¯ +============== + +°Õ¸«¡¢¥¢¥¤¥Ç¥¢¡¢¥Ð¥°¥ì¥Ý¡¼¥È(¤³¤ì¤¬°ìÈÖ½ÅÍ×)(¤È¡¢Æä˥ѥåÁ)¤Ï +ÂçÊÑ´¿·Þ¤·¤Þ¤¹¡£ + +Anonymous cvs +============= + +anonymous cvs ¤ÇºÇ¿·¤Î¥½¡¼¥¹¤ò¼èÆÀ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤Þ¤º´Ä¶­ÊÑ¿ô CVSROOT ¤Ë + + :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed + +¤ò»ØÄꤷ¤Þ¤¹¡£¤½¤Î¸å¡¢ + + cvs login + +¤Ç¥í¥°¥¤¥ó¤·¡¢ CVS password: ¤ËÂФ·¤Æ¤Ïñ¤Ë Enter ¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤¡£ + +ŬÅö¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ÜÆ°¤·¡¢°Ê²¼¤Î¥³¥Þ¥ó¥É + + cvs -z3 checkout sylpheed + +¤Ç ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ë sylpheed ¤È¤¤¤¦¥½¡¼¥¹¥Ä¥ê¡¼¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£ + +ºÇ¿·¤Î¥½¡¼¥¹¥Ä¥ê¡¼¤Ë¥¢¥Ã¥×¥Ç¡¼¥È¤¹¤ë¤Ë¤Ï¡¢¥½¡¼¥¹¥Ä¥ê¡¼¤Î¥È¥Ã¥×¥Ç¥£¥ì¥¯¥È¥ê¤Ç¡¢ + + cvs -z3 update + +¤ò¼Â¹Ô¤·¤Æ²¼¤µ¤¤¡£ + +-- +»³ËÜ ÇîÇ· / Hiroyuki Yamamoto diff --git a/TODO b/TODO new file mode 100644 index 000000000..3662141b8 --- /dev/null +++ b/TODO @@ -0,0 +1,66 @@ +TODO +==== + +(The upper item has the greater priority or feasibility... maybe :-) + +o periodical check of newly arrived mails +o POP before SMTP +o list view of newsgroups and subscription of groups from there +o full-text search of messages (plain, or hooking up with Namazu) +o progress display of time-consuming processes +o original icons and logos +o designate the displayed headers +o user-defined headers +o template function +o speed-up of filtering +o regular expression support at filtering +o LDAP support +o parallel processing between sending-receiving and others +o support for some formats other than MH and mbox (ex. Maildir) +o priority (Priority:, X-Priority:, X-MSMail-Priority:) +o notification of reception (Disposition-Notification-To:) +o modification of display color +o customization of key bindings +o customization of toolbar +o virtual folder +o SSL support +o GNOME support +o console mode interface +o plug-in faculty +o mailing list manager +o inline image display on multipart MIME +o compressed folder +o make the code cleaner +o make the process faster +o make the dubious English much decent :) + +Partially implemented features +============================== +. make the network related code much decent + (processing of time out, multi-threading etc.) +. drag and drop +. full internationalization +. autowrap / wordwrap +. IMAP4 support +. PGP/GPG support +. display of HTML messages (composition of HTML message is not scheduled :-P) + +Implemented features +==================== +* multipart MIME (attachments of files) +* sending from queue +* clickable URI +* management of read message on POP server by UIDL +* IPv6 support +* printing +* reconnection when connection to news server is broken +* X-Face support +* preservation of position or size of window +* external editor support +* draft message +* extension of quotation format +* assignation of location of mail folder +* account selection on composition window +* posting to newsgroups +* completion of mail address +* prohibition of multiple execution (with Unix domain socket) diff --git a/TODO.jp b/TODO.jp new file mode 100644 index 000000000..c48a75dc1 --- /dev/null +++ b/TODO.jp @@ -0,0 +1,67 @@ +TODO +==== + +(¾å¤Î¤â¤Î¤Û¤É½ÅÍ×ÅÙ¡¢¼Â¸½²ÄǽÀ­¤¬¹â¤¯¤Ê¤ë¡¢¤«¤â(^^;) + +o ¿·Ãå¥á¡¼¥ë¤ÎÄê´üŪ¥Á¥§¥Ã¥¯ +o POP before SMTP +o ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¥ê¥¹¥Èɽ¼¨¤È¤½¤³¤«¤é¤Î¹ØÆÉ¥°¥ë¡¼¥×Äɲà +o ¥á¥Ã¥»¡¼¥¸¤ÎÁ´Ê¸¸¡º÷ (¥Ù¥¿¡¢ Namazu ¤È¤ÎÏ¢·È) +o »þ´Ö¤¬³Ý¤«¤ë½èÍý¤Î¿ÊĽ¾õ¶·É½¼¨ +o ¥ª¥ê¥¸¥Ê¥ë¤Î¥¢¥¤¥³¥ó¤È¥í¥´ +o ɽ¼¨¤µ¤ì¤ë¥Ø¥Ã¥À¤Î»ØÄê +o ¥æ¡¼¥¶ÄêµÁ¤Î¥Ø¥Ã¥À +o ¥Æ¥ó¥×¥ì¡¼¥Èµ¡Ç½ +o ¿¶¤êʬ¤±½èÍý¤Î¹â®²½ +o ¿¶¤êʬ¤±¤ÇÀµµ¬É½¸½¤ËÂбþ¤¹¤ë +o LDAPÂбþ +o Á÷¼õ¿®¤È¤½¤ì°Ê³°¤È¤ÎʹԽèÍý +o MH, mbox °Ê³°¤Î·Á¼°¤Ø¤ÎÂбþ(Maildir Åù) +o ½ÅÍ×ÅÙ (Priority:, X-Priority:, X-MSMail-Priority:) +o ¼õ¿®³Îǧ (Disposition-Notification-To:) +o ɽ¼¨¿§¤ÎÊѹ¹ +o ¥­¡¼¥Ð¥¤¥ó¥É¤Î¥«¥¹¥¿¥Þ¥¤¥º +o ¥Ä¡¼¥ë¥Ð¡¼¤Î¥«¥¹¥¿¥Þ¥¤¥º +o ²¾ÁÛ¥Õ¥©¥ë¥À +o SSLÂбþ +o GNOMEÂбþ +o ¥³¥ó¥½¡¼¥ë¥â¡¼¥É¥¤¥ó¥¿¥Õ¥§¡¼¥¹ +o ¥×¥é¥°¥¤¥óµ¡Ç½ +o ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¥Þ¥Í¡¼¥¸¥ã +o ¥Þ¥ë¥Á¥Ñ¡¼¥ÈMIME¤Ç¤Î¥¤¥ó¥é¥¤¥ó²èÁüɽ¼¨ +o °µ½Ì¥Õ¥©¥ë¥À +o ¥³¡¼¥É¤ò¤µ¤é¤Ë¤­¤ì¤¤¤Ë¤¹¤ë +o ½èÍý¤ò¤µ¤é¤Ë®¤¯¤¹¤ë +o ²ø¤·¤²¤Ê±Ñ¸ì¤ò¤Ê¤ó¤È¤«¤¹¤ë :) + +°ìÉô¼ÂÁõºÑ¤Îµ¡Ç½ +================ +. ¥Í¥Ã¥È¥ï¡¼¥¯´ØÏ¢¤Î¥³¡¼¥É¤ò¤Þ¤È¤â¤Ë¤¹¤ë + (¥¿¥¤¥à¥¢¥¦¥È½èÍý¡¢¥Þ¥ë¥Á¥¹¥ì¥Ã¥É²½Åù) +. ¥É¥é¥Ã¥° & ¥É¥í¥Ã¥× +. ´°Á´¤Ê¹ñºÝ²½ +. ¼«Æ°²þ¹Ô / ¥ï¡¼¥É¥é¥Ã¥× +. IMAP4Âбþ +. PGP/GPGÂбþ +. HTML¥á¡¼¥ë¤Îɽ¼¨ (HTML¥á¡¼¥ë¤ÎºîÀ®¤ÏͽÄê¤Ê¤·:-P) + +¼ÂÁõºÑ¤Îµ¡Ç½ +============ +* ¥Þ¥ë¥Á¥Ñ¡¼¥ÈMIME (¥Õ¥¡¥¤¥ë¤ÎźÉÕ) +* Á÷¿®ÂÔ¤Á¤«¤é¤ÎÁ÷¿® +* ¥¯¥ê¥Ã¥«¥Ö¥ëURI +* UIDL¤Ë¤è¤ëPOP¥µ¡¼¥Ð¾å¤Î´ûÆÉ¥á¥Ã¥»¡¼¥¸´ÉÍý +* IPv6Âбþ +* °õºþµ¡Ç½ +* ¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤È¤ÎÀܳ¤¬Àڤ줿»þ¤ÎºÆÀܳ +* X-Face Âбþ +* ¥¦¥£¥ó¥É¥¦¤Î°ÌÃÖ¡¢¥µ¥¤¥º¤ÎÊݸ +* ³°Éô¥¨¥Ç¥£¥¿Âбþ +* ¤Á¤ã¤ó¤È¤·¤¿¥Þ¥Ë¥å¥¢¥ë¤ò½ñ¤¯ +* Áð¹Æ +* °úÍÑ·Á¼°¤Î³ÈÄ¥ +* ¥á¡¼¥ë¥Õ¥©¥ë¥À°ÌÃ֤λØÄê +* ºîÀ®¥¦¥£¥ó¥É¥¦¤Ç¤Î¥¢¥«¥¦¥ó¥È¤ÎÁªÂò +* ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Ø¤ÎÅê¹Æ +* ¥á¡¼¥ë¥¢¥É¥ì¥¹¤ÎÊä´° +* Æó½Åµ¯Æ°ËÉ»ß (with Unix domain socket) diff --git a/ac/Makefile.am b/ac/Makefile.am new file mode 100644 index 000000000..6a4b9b379 --- /dev/null +++ b/ac/Makefile.am @@ -0,0 +1,5 @@ +MACROS = \ + aclocal-include.m4 \ + gpgme.m4 + +EXTRA_DIST = $(MACROS) diff --git a/ac/Makefile.in b/ac/Makefile.in new file mode 100644 index 000000000..08af183b8 --- /dev/null +++ b/ac/Makefile.in @@ -0,0 +1,229 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GDK_IMLIB_CFLAGS = @GDK_IMLIB_CFLAGS@ +GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GPGME_CFLAGS = @GPGME_CFLAGS@ +GPGME_CONFIG = @GPGME_CONFIG@ +GPGME_LIBS = @GPGME_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +IMLIB_CFLAGS = @IMLIB_CFLAGS@ +IMLIB_CONFIG = @IMLIB_CONFIG@ +IMLIB_LIBS = @IMLIB_LIBS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ +localedir = @localedir@ +manualdir = @manualdir@ + +MACROS = aclocal-include.m4 gpgme.m4 + + +EXTRA_DIST = $(MACROS) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign ac/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = ac + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign ac/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: tags distdir info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# 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: diff --git a/ac/aclocal-include.m4 b/ac/aclocal-include.m4 new file mode 100644 index 000000000..aac5f8a02 --- /dev/null +++ b/ac/aclocal-include.m4 @@ -0,0 +1,12 @@ +# aclocal-include.m4 +# +# This macro adds the name macrodir to the set of directories +# that `aclocal' searches for macros. + +dnl SYLPHEED_ACLOCAL_INCLUDE(macrodir) +AC_DEFUN([SYLPHEED_ACLOCAL_INCLUDE], +[ + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done +]) diff --git a/ac/gpgme.m4 b/ac/gpgme.m4 new file mode 100644 index 000000000..c00071a22 --- /dev/null +++ b/ac/gpgme.m4 @@ -0,0 +1,170 @@ +dnl Autoconf macros for libgpgme +dnl $Id$ + +# Configure paths for GPGME +# Shamelessly stolen from the one of XDELTA by Owen Taylor +# Werner Koch 2000-11-17 + +dnl AM_PATH_GPGME([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for gpgme, and define GPGME_CFLAGS and GPGME_LIBS +dnl +AC_DEFUN(AM_PATH_GPGME, +[dnl +dnl Get the cflags and libraries from the gpgme-config script +dnl + AC_ARG_WITH(gpgme-prefix, + [ --with-gpgme-prefix=PFX Prefix where gpgme is installed (optional)], + gpgme_config_prefix="$withval", gpgme_config_prefix="") + AC_ARG_ENABLE(gpgmetest, + [ --disable-gpgmetest Do not try to compile and run a test gpgme program], + , enable_gpgmetest=yes) + + if test x$gpgme_config_prefix != x ; then + gpgme_config_args="$gpgme_config_args --prefix=$gpgme_config_prefix" + if test x${GPGME_CONFIG+set} != xset ; then + GPGME_CONFIG=$gpgme_config_prefix/bin/gpgme-config + fi + fi + + AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no) + min_gpgme_version=ifelse([$1], ,1.0.0,$1) + AC_MSG_CHECKING(for gpgme - version >= $min_gpgme_version) + no_gpgme="" + if test "$GPGME_CONFIG" = "no" ; then + no_gpgme=yes + else + GPGME_CFLAGS=`$GPGME_CONFIG $gpgme_config_args --cflags` + GPGME_LIBS=`$GPGME_CONFIG $gpgme_config_args --libs` + gpgme_config_version=`$GPGME_CONFIG $gpgme_config_args --version` + if test "x$enable_gpgmetest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GPGME_CFLAGS" + LIBS="$LIBS $GPGME_LIBS" +dnl +dnl Now check if the installed gpgme is sufficiently new. Also sanity +dnl checks the results of gpgme-config to some extent +dnl + rm -f conf.gpgmetest + AC_TRY_RUN([ +#include +#include +#include +#include + +int +main () +{ + system ("touch conf.gpgmetest"); + + if( strcmp( gpgme_check_version(NULL), "$gpgme_config_version" ) ) + { + printf("\n" +"*** 'gpgme-config --version' returned %s, but GPGME (%s) was found!\n", + "$gpgme_config_version", gpgme_check_version(NULL) ); + printf( +"*** If gpgme-config was correct, then it is best to remove the old\n" +"*** version of GPGME. You may also be able to fix the error\n" +"*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n" +"*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n" +"*** required on your system.\n" +"*** If gpgme-config was wrong, set the environment variable GPGME_CONFIG\n" +"*** to point to the correct copy of gpgme-config, \n" +"*** and remove the file config.cache before re-running configure\n" + ); + } + else if ( strcmp(gpgme_check_version(NULL), GPGME_VERSION ) ) + { + printf("\n*** GPGME header file (version %s) does not match\n", + GPGME_VERSION); + printf("*** library (version %s)\n", gpgme_check_version(NULL) ); + } + else + { + if ( gpgme_check_version( "$min_gpgme_version" ) ) + return 0; + printf("no\n" +"*** An old version of GPGME (%s) was found.\n", gpgme_check_version(NULL) ); + printf( +"*** You need a version of GPGME newer than %s.\n", "$min_gpgme_version" ); + printf( +"*** The latest version of GPGME is always available at\n" +"*** ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/\n" +"*** \n" +"*** If you have already installed a sufficiently new version, this error\n" +"*** probably means that the wrong copy of the gpgme-config shell script is\n" +"*** being found. The easiest way to fix this is to remove the old version\n" +"*** of GPGME, but you can also set the GPGME_CONFIG environment to point to\n" +"*** the correct copy of gpgme-config. (In this case, you will have to\n" +"*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n" +"*** so that the correct libraries are found at run-time).\n" + ); + } + return 1; +} +],, no_gpgme=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gpgme" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + if test -f conf.gpgmetest ; then + : + else + AC_MSG_RESULT(no) + fi + if test "$GPGME_CONFIG" = "no" ; then + echo "*** The gpgme-config script installed by GPGME could not be found" + echo "*** If GPGME was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GPGME_CONFIG environment variable to the" + echo "*** full path to gpgme-config." + else + if test -f conf.gpgmetest ; then + : + else + echo "*** Could not run gpgme test program, checking why..." + CFLAGS="$CFLAGS $GPGME_CFLAGS" + LIBS="$LIBS $GPGME_LIBS" + AC_TRY_LINK([ +#include +#include +#include +#include +], [ gpgme_check_version(NULL); return 0 ], + [ +echo "*** The test program compiled, but did not run. This usually means" +echo "*** that the run-time linker is not finding GPGME or finding the wrong" +echo "*** version of GPGME. If it is not finding GPGME, you'll need to set your" +echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" +echo "*** to the installed location Also, make sure you have run ldconfig if" +echo "*** that is required on your system" +echo "***" +echo "*** If you have an old version installed, it is best to remove it," +echo "*** although you may also be able to get things to work by" +echo "*** modifying LD_LIBRARY_PATH" +echo "***" + ], + [ +echo "*** The test program failed to compile or link. See the file config.log" +echo "*** for the exact error that occured. This usually means GPGME was" +echo "*** incorrectly installed or that you have moved GPGME since it was" +echo "*** installed. In the latter case, you may want to edit the" +echo "*** gpgme-config script: $GPGME_CONFIG" + ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GPGME_CFLAGS="" + GPGME_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_CFLAGS) + AC_SUBST(GPGME_LIBS) + rm -f conf.gpgmetest +]) + diff --git a/acconfig.h b/acconfig.h new file mode 100644 index 000000000..f4693521c --- /dev/null +++ b/acconfig.h @@ -0,0 +1,23 @@ +#undef ENABLE_NLS +#undef HAVE_CATGETS +#undef HAVE_GETTEXT +#undef HAVE_LC_MESSAGES +#undef HAVE_STPCPY + +#undef HAVE_GDK_PIXBUF +#undef HAVE_GDK_IMLIB + +/* Whether to use multithread or not */ +#undef USE_THREADS + +/* Define if you want IPv6 support. */ +#undef INET6 + +/* Define if we use GPGME to support OpenPGP */ +#undef USE_GPGME + +/* Define to `unsigned int' if or doesn't define. */ +#undef wint_t + +#undef PACKAGE +#undef VERSION diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 000000000..40bb1d114 --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,2090 @@ +dnl aclocal.m4 generated automatically by aclocal 1.4 + +dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl This program is distributed in the hope that it will be useful, +dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without +dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A +dnl PARTICULAR PURPOSE. + +# Do all the work for Automake. 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. + +# serial 1 + +dnl Usage: +dnl AM_INIT_AUTOMAKE(package,version, [no-define]) + +AC_DEFUN(AM_INIT_AUTOMAKE, +[AC_REQUIRE([AC_PROG_INSTALL]) +PACKAGE=[$1] +AC_SUBST(PACKAGE) +VERSION=[$2] +AC_SUBST(VERSION) +dnl test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi +ifelse([$3],, +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])) +AC_REQUIRE([AM_SANITY_CHECK]) +AC_REQUIRE([AC_ARG_PROGRAM]) +dnl FIXME This is truly gross. +missing_dir=`cd $ac_aux_dir && pwd` +AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir) +AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir) +AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir) +AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir) +AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) +AC_REQUIRE([AC_PROG_MAKE_SET])]) + +# +# Check to make sure that the build environment is sane. +# + +AC_DEFUN(AM_SANITY_CHECK, +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftestfile +# 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 ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "[$]*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "[$]*" != "X $srcdir/configure conftestfile" \ + && test "[$]*" != "X conftestfile $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 + + test "[$]2" = conftestfile + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +rm -f conftest* +AC_MSG_RESULT(yes)]) + +dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY) +dnl The program must properly implement --version. +AC_DEFUN(AM_MISSING_PROG, +[AC_MSG_CHECKING(for working $2) +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if ($2 --version) < /dev/null > /dev/null 2>&1; then + $1=$2 + AC_MSG_RESULT(found) +else + $1="$3/missing $2" + AC_MSG_RESULT(missing) +fi +AC_SUBST($1)]) + +# Like AC_CONFIG_HEADER, but automatically create stamp file. + +AC_DEFUN(AM_CONFIG_HEADER, +[AC_PREREQ([2.12]) +AC_CONFIG_HEADER([$1]) +dnl When config.status generates a header, we must update the stamp-h file. +dnl This file resides in the same directory as the config header +dnl that is generated. We must strip everything past the first ":", +dnl and everything past the last "/". +AC_OUTPUT_COMMANDS(changequote(<<,>>)dnl +ifelse(patsubst(<<$1>>, <<[^ ]>>, <<>>), <<>>, +<>CONFIG_HEADERS" || echo timestamp > patsubst(<<$1>>, <<^\([^:]*/\)?.*>>, <<\1>>)stamp-h<<>>dnl>>, +<>; do + case " <<$>>CONFIG_HEADERS " in + *" <<$>>am_file "*<<)>> + echo timestamp > `echo <<$>>am_file | sed -e 's%:.*%%' -e 's%[^/]*$%%'`stamp-h$am_indx + ;; + esac + am_indx=`expr "<<$>>am_indx" + 1` +done<<>>dnl>>) +changequote([,]))]) + + +# serial 40 AC_PROG_LIBTOOL +AC_DEFUN(AC_PROG_LIBTOOL, +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl + +# Save cache, so that ltconfig can load it +AC_CACHE_SAVE + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ +LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ +DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ +|| AC_MSG_ERROR([libtool configure failed]) + +# Reload cache, that may have been modified by ltconfig +AC_CACHE_LOAD + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +# Redirect the config.log output again, so that the ltconfig log is not +# clobbered by the next message. +exec 5>>./config.log +]) + +AC_DEFUN(AC_LIBTOOL_SETUP, +[AC_PREREQ(2.13)dnl +AC_REQUIRE([AC_ENABLE_SHARED])dnl +AC_REQUIRE([AC_ENABLE_STATIC])dnl +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +AC_REQUIRE([AC_PROG_RANLIB])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_PROG_LD])dnl +AC_REQUIRE([AC_PROG_NM])dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +dnl + +case "$target" in +NONE) lt_target="$host" ;; +*) lt_target="$target" ;; +esac + +# Check for any special flags to pass to ltconfig. +libtool_flags="--cache-file=$cache_file" +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" +ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], +[libtool_flags="$libtool_flags --enable-dlopen"]) +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[libtool_flags="$libtool_flags --enable-win32-dll"]) +AC_ARG_ENABLE(libtool-lock, + [ --disable-libtool-lock avoid locking (might break parallel builds)]) +test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" +test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$lt_target" in +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + +ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL], +[*-*-cygwin* | *-*-mingw*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +]) +esac +]) + +# AC_LIBTOOL_DLOPEN - enable checks for dlopen support +AC_DEFUN(AC_LIBTOOL_DLOPEN, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])]) + +# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's +AC_DEFUN(AC_LIBTOOL_WIN32_DLL, [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])]) + +# AC_ENABLE_SHARED - implement the --enable-shared flag +# Usage: AC_ENABLE_SHARED[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_SHARED, [dnl +define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(shared, +changequote(<<, >>)dnl +<< --enable-shared[=PKGS] build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_shared=yes ;; +no) enable_shared=no ;; +*) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl +]) + +# AC_DISABLE_SHARED - set the default shared flag to --disable-shared +AC_DEFUN(AC_DISABLE_SHARED, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_SHARED(no)]) + +# AC_ENABLE_STATIC - implement the --enable-static flag +# Usage: AC_ENABLE_STATIC[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_STATIC, [dnl +define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(static, +changequote(<<, >>)dnl +<< --enable-static[=PKGS] build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_static=yes ;; +no) enable_static=no ;; +*) + enable_static=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_static=AC_ENABLE_STATIC_DEFAULT)dnl +]) + +# AC_DISABLE_STATIC - set the default static flag to --disable-static +AC_DEFUN(AC_DISABLE_STATIC, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_STATIC(no)]) + + +# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag +# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)] +# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to +# `yes'. +AC_DEFUN(AC_ENABLE_FAST_INSTALL, [dnl +define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl +AC_ARG_ENABLE(fast-install, +changequote(<<, >>)dnl +<< --enable-fast-install[=PKGS] optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT], +changequote([, ])dnl +[p=${PACKAGE-default} +case "$enableval" in +yes) enable_fast_install=yes ;; +no) enable_fast_install=no ;; +*) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," + for pkg in $enableval; do + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$ac_save_ifs" + ;; +esac], +enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl +]) + +# AC_ENABLE_FAST_INSTALL - set the default to --disable-fast-install +AC_DEFUN(AC_DISABLE_FAST_INSTALL, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl +AC_ENABLE_FAST_INSTALL(no)]) + +# AC_PROG_LD - find the path to the GNU or non-GNU linker +AC_DEFUN(AC_PROG_LD, +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + ac_prog=`($CC -print-prog-name=ld) 2>&5` + case "$ac_prog" in + # Accept absolute paths. +changequote(,)dnl + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' +changequote([,])dnl + # 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(ac_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 + ac_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. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$ac_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_PROG_LD_GNU +]) + +AC_DEFUN(AC_PROG_LD_GNU, +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi]) +]) + +# AC_PROG_NM - find the path to a BSD-compatible name lister +AC_DEFUN(AC_PROG_NM, +[AC_MSG_CHECKING([for BSD-compatible nm]) +AC_CACHE_VAL(ac_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + ac_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + break + else + ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm +fi]) +NM="$ac_cv_path_NM" +AC_MSG_RESULT([$NM]) +]) + +# AC_CHECK_LIBM - check for math library +AC_DEFUN(AC_CHECK_LIBM, +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case "$lt_target" in +*-*-beos* | *-*-cygwin*) + # These system don't have libm + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, main, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, main, LIBM="-lm") + ;; +esac +]) + +# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl convenience library and INCLTDL to the include flags for +# the libltdl header and adds --enable-ltdl-convenience to the +# configure arguments. Note that LIBLTDL and INCLTDL are not +# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If DIR is not +# provided, it is assumed to be `libltdl'. LIBLTDL will be prefixed +# with '${top_builddir}/' and INCLTDL will be prefixed with +# '${top_srcdir}/' (note the single quotes!). If your package is not +# flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +AC_DEFUN(AC_LIBLTDL_CONVENIENCE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case "$enable_ltdl_convenience" in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) +]) + +# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for +# the libltdl installable library and INCLTDL to the include flags for +# the libltdl header and adds --enable-ltdl-install to the configure +# arguments. Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is +# AC_CONFIG_SUBDIRS called. If DIR is not provided and an installed +# libltdl is not found, it is assumed to be `libltdl'. LIBLTDL will +# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed +# with '${top_srcdir}/' (note the single quotes!). If your package is +# not flat and you're not using automake, define top_builddir and +# top_srcdir appropriately in the Makefiles. +# In the future, this macro may have to be called after AC_PROG_LIBTOOL. +AC_DEFUN(AC_LIBLTDL_INSTALLABLE, [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, main, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + INCLTDL= + fi +]) + +dnl old names +AC_DEFUN(AM_PROG_LIBTOOL, [indir([AC_PROG_LIBTOOL])])dnl +AC_DEFUN(AM_ENABLE_SHARED, [indir([AC_ENABLE_SHARED], $@)])dnl +AC_DEFUN(AM_ENABLE_STATIC, [indir([AC_ENABLE_STATIC], $@)])dnl +AC_DEFUN(AM_DISABLE_SHARED, [indir([AC_DISABLE_SHARED], $@)])dnl +AC_DEFUN(AM_DISABLE_STATIC, [indir([AC_DISABLE_STATIC], $@)])dnl +AC_DEFUN(AM_PROG_LD, [indir([AC_PROG_LD])])dnl +AC_DEFUN(AM_PROG_NM, [indir([AC_PROG_NM])])dnl + +dnl This is just to silence aclocal about the macro not being used +ifelse([AC_DISABLE_FAST_INSTALL])dnl + +# Add --enable-maintainer-mode option to configure. +# From Jim Meyering + +# serial 1 + +AC_DEFUN(AM_MAINTAINER_MODE, +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) + dnl maintainer-mode is disabled by default + AC_ARG_ENABLE(maintainer-mode, +[ --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer], + USE_MAINTAINER_MODE=$enableval, + USE_MAINTAINER_MODE=no) + AC_MSG_RESULT($USE_MAINTAINER_MODE) + AM_CONDITIONAL(MAINTAINER_MODE, test $USE_MAINTAINER_MODE = yes) + MAINT=$MAINTAINER_MODE_TRUE + AC_SUBST(MAINT)dnl +] +) + +# Define a conditional. + +AC_DEFUN(AM_CONDITIONAL, +[AC_SUBST($1_TRUE) +AC_SUBST($1_FALSE) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi]) + + +# serial 1 + +# @defmac AC_PROG_CC_STDC +# @maindex PROG_CC_STDC +# @ovindex CC +# If the C compiler in not in ANSI C mode by default, try to add an option +# to output variable @code{CC} to make it so. This macro tries various +# options that select ANSI C on some system or another. It considers the +# compiler to be in ANSI C mode if it handles function prototypes correctly. +# +# If you use this macro, you should check after calling it whether the C +# compiler has been set to accept ANSI C; if not, the shell variable +# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source +# code in ANSI C, you can make an un-ANSIfied copy of it by using the +# program @code{ansi2knr}, which comes with Ghostscript. +# @end defmac + +AC_DEFUN(AM_PROG_CC_STDC, +[AC_REQUIRE([AC_PROG_CC]) +AC_BEFORE([$0], [AC_C_INLINE]) +AC_BEFORE([$0], [AC_C_CONST]) +dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require +dnl a magic option to avoid problems with ANSI preprocessor commands +dnl like #elif. +dnl FIXME: can't do this because then AC_AIX won't work due to a +dnl circular dependency. +dnl AC_BEFORE([$0], [AC_PROG_CPP]) +AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) +AC_CACHE_VAL(am_cv_prog_cc_stdc, +[am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + AC_TRY_COMPILE( +[#include +#include +#include +#include +/* 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; +} +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; +], [ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; +], +[am_cv_prog_cc_stdc="$ac_arg"; break]) +done +CC="$ac_save_CC" +]) +if test -z "$am_cv_prog_cc_stdc"; then + AC_MSG_RESULT([none needed]) +else + AC_MSG_RESULT($am_cv_prog_cc_stdc) +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac +]) + +# aclocal-include.m4 +# +# This macro adds the name macrodir to the set of directories +# that `aclocal' searches for macros. + +dnl SYLPHEED_ACLOCAL_INCLUDE(macrodir) +AC_DEFUN([SYLPHEED_ACLOCAL_INCLUDE], +[ + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in $1 ; do ACLOCAL="$ACLOCAL -I $k" ; done +]) + +# Macro to add for using GNU gettext. +# Ulrich Drepper , 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 5 + +AC_DEFUN(AM_WITH_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) + + USE_INCLUDED_LIBINTL=no + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + AC_DEFINE(ENABLE_NLS) + 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 gettext or catgets are available (in this order) we + dnl use this. Else we have to fall back to GNU NLS library. + dnl catgets is only used if permitted by option --with-catgets. + nls_cv_header_intl= + nls_cv_header_libgt= + CATOBJEXT=NONE + + AC_CHECK_HEADER(libintl.h, + [AC_CACHE_CHECK([for gettext in libc], gt_cv_func_gettext_libc, + [AC_TRY_LINK([#include ], [return (int) gettext ("")], + gt_cv_func_gettext_libc=yes, gt_cv_func_gettext_libc=no)]) + + if test "$gt_cv_func_gettext_libc" != "yes"; then + AC_CHECK_LIB(intl, bindtextdomain, + [AC_CACHE_CHECK([for gettext in libintl], + gt_cv_func_gettext_libintl, + [AC_CHECK_LIB(intl, gettext, + gt_cv_func_gettext_libintl=yes, + gt_cv_func_gettext_libintl=no)], + gt_cv_func_gettext_libintl=no)]) + fi + + if test "$gt_cv_func_gettext_libc" = "yes" \ + || test "$gt_cv_func_gettext_libintl" = "yes"; then + AC_DEFINE(HAVE_GETTEXT) + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl + if test "$MSGFMT" != "no"; then + AC_CHECK_FUNCS(dcgettext) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; + return _nl_msg_cat_cntr], + [CATOBJEXT=.gmo + DATADIRNAME=share], + [CATOBJEXT=.mo + DATADIRNAME=lib]) + INSTOBJEXT=.mo + fi + fi + ]) + + if test "$CATOBJEXT" = "NONE"; then + AC_MSG_CHECKING([whether catgets can be used]) + AC_ARG_WITH(catgets, + [ --with-catgets use catgets functions if available], + nls_cv_use_catgets=$withval, nls_cv_use_catgets=no) + AC_MSG_RESULT($nls_cv_use_catgets) + + if test "$nls_cv_use_catgets" = "yes"; then + dnl No gettext in C library. Try catgets next. + AC_CHECK_LIB(i, main) + AC_CHECK_FUNC(catgets, + [AC_DEFINE(HAVE_CATGETS) + INTLOBJS="\$(CATOBJS)" + AC_PATH_PROG(GENCAT, gencat, no)dnl + if test "$GENCAT" != "no"; then + AC_PATH_PROG(GMSGFMT, gmsgfmt, no) + if test "$GMSGFMT" = "no"; then + AM_PATH_PROG_WITH_TEST(GMSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no) + fi + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.cat + INSTOBJEXT=.cat + DATADIRNAME=lib + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi]) + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + dnl Neither gettext nor catgets in included in the C library. + dnl Fall back on 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. + INTLOBJS="\$(GETTOBJS)" + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], msgfmt) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) + AC_SUBST(MSGFMT) + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INSTOBJEXT=.mo + DATADIRNAME=share + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + 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 /dev/null 2> /dev/null; then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + else + DATADIRNAME=share + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + AC_LINK_FILES($nls_cv_header_libgt, $nls_cv_header_intl) + AC_OUTPUT_COMMANDS( + [case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac]) + + + # If this is used in GNU gettext we have to set USE_NLS to `yes' + # because some of the sources are only built for this goal. + if test "$PACKAGE" = gettext; then + USE_NLS=yes + USE_INCLUDED_LIBINTL=yes + fi + + dnl These rules are solely for the distribution goal. While doing this + dnl we only have to keep exactly one list of the available catalogs + dnl in configure.in. + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + dnl Make all variables we use known to autoconf. + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATALOGS) + AC_SUBST(CATOBJEXT) + AC_SUBST(DATADIRNAME) + AC_SUBST(GMOFILES) + AC_SUBST(INSTOBJEXT) + AC_SUBST(INTLDEPS) + AC_SUBST(INTLLIBS) + AC_SUBST(INTLOBJS) + AC_SUBST(POFILES) + AC_SUBST(POSUB) + ]) + +AC_DEFUN(AM_GNU_GETTEXT, + [AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_CC])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([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h string.h \ +unistd.h sys/param.h]) + AC_CHECK_FUNCS([getcwd munmap putenv setenv setlocale strchr strcasecmp \ +strdup __argz_count __argz_stringify __argz_next]) + + if test "${ac_cv_func_stpcpy+set}" != "set"; then + AC_CHECK_FUNCS(stpcpy) + fi + if test "${ac_cv_func_stpcpy}" = "yes"; then + AC_DEFINE(HAVE_STPCPY) + fi + + AM_LC_MESSAGES + AM_WITH_NLS + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + AC_MSG_CHECKING(for catalogs to be installed) + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + done + LINGUAS=$NEW_LINGUAS + AC_MSG_RESULT($LINGUAS) + fi + + dnl Construct list of names of catalog files to be constructed. + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + dnl The reference to in the installed file + dnl must be resolved because we cannot expect the users of this + dnl to define HAVE_LOCALE_H. + if test $ac_cv_header_locale_h = yes; then + INCLUDE_LOCALE_H="#include " + else + INCLUDE_LOCALE_H="\ +/* The system does not provide the header . Take care yourself. */" + fi + AC_SUBST(INCLUDE_LOCALE_H) + + dnl Determine which catalog format we have (if any is needed) + dnl For now we know about two different formats: + dnl Linux libc-5 and the normal X/Open format + test -d intl || mkdir intl + if test "$CATOBJEXT" = ".cat"; then + AC_CHECK_HEADER(linux/version.h, msgformat=linux, msgformat=xopen) + + dnl Transform the SED scripts while copying because some dumb SEDs + dnl cannot handle comments. + sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed + fi + dnl po2tbl.sed is always needed. + sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ + $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed + + dnl In the intl/Makefile.in we have a special dependency which makes + dnl only sense for gettext. We comment this out for non-gettext + dnl packages. + if test "$PACKAGE" = "gettext"; then + GT_NO="#NO#" + GT_YES= + else + GT_NO= + GT_YES="#YES#" + fi + AC_SUBST(GT_NO) + AC_SUBST(GT_YES) + + 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 is. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) + + dnl *** For now the libtool support in intl/Makefile is not for real. + l= + AC_SUBST(l) + + dnl Generate list of files to be processed by xgettext which will + dnl be included in po/Makefile. + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + ]) + +# Search path for a program which passes the given test. +# Ulrich Drepper , 1996. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + +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, +[# 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. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in ifelse([$5], , $PATH, [$5]); do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word" + break + fi + fi + 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 -n "[$]$1"; then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) + +# Check whether LC_MESSAGES is available in . +# Ulrich Drepper , 1995. +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +# serial 1 + +AC_DEFUN(AM_LC_MESSAGES, + [if test $ac_cv_header_locale_h = yes; then + AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) + if test $am_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES) + fi + fi]) + +# Configure paths for GLIB +# Owen Taylor 97-11-3 + +dnl AM_PATH_GLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GLIB, and define GLIB_CFLAGS and GLIB_LIBS, if "gmodule" or +dnl gthread is specified in MODULES, pass to glib-config +dnl +AC_DEFUN(AM_PATH_GLIB, +[dnl +dnl Get the cflags and libraries from the glib-config script +dnl +AC_ARG_WITH(glib-prefix,[ --with-glib-prefix=PFX Prefix where GLIB is installed (optional)], + glib_config_prefix="$withval", glib_config_prefix="") +AC_ARG_WITH(glib-exec-prefix,[ --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)], + glib_config_exec_prefix="$withval", glib_config_exec_prefix="") +AC_ARG_ENABLE(glibtest, [ --disable-glibtest Do not try to compile and run a test GLIB program], + , enable_glibtest=yes) + + if test x$glib_config_exec_prefix != x ; then + glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config + fi + fi + if test x$glib_config_prefix != x ; then + glib_config_args="$glib_config_args --prefix=$glib_config_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_prefix/bin/glib-config + fi + fi + + for module in . $4 + do + case "$module" in + gmodule) + glib_config_args="$glib_config_args gmodule" + ;; + gthread) + glib_config_args="$glib_config_args gthread" + ;; + esac + done + + AC_PATH_PROG(GLIB_CONFIG, glib-config, no) + min_glib_version=ifelse([$1], ,0.99.7,$1) + AC_MSG_CHECKING(for GLIB - version >= $min_glib_version) + no_glib="" + if test "$GLIB_CONFIG" = "no" ; then + no_glib=yes + else + GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags` + GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs` + glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" +dnl +dnl Now check if the installed GLIB is sufficiently new. (Also sanity +dnl checks the results of glib-config to some extent +dnl + rm -f conf.glibtest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If glib-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n"); + printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the glib-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n"); + printf("*** correct copy of glib-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_glib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GLIB_CONFIG" = "no" ; then + echo "*** The glib-config script installed by GLIB could not be found" + echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GLIB_CONFIG environment variable to the" + echo "*** full path to glib-config." + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" + echo "***" + echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" + echo "*** came with the system with the command" + echo "***" + echo "*** rpm --erase --nodeps gtk gtk-devel" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB was incorrectly installed" + echo "*** or that you have moved GLIB since it was installed. In the latter case, you" + echo "*** may want to edit the glib-config script: $GLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GLIB_CFLAGS) + AC_SUBST(GLIB_LIBS) + rm -f conf.glibtest +]) + +# Configure paths for GTK+ +# Owen Taylor 97-11-3 + +dnl AM_PATH_GTK([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND [, MODULES]]]]) +dnl Test for GTK, and define GTK_CFLAGS and GTK_LIBS +dnl +AC_DEFUN(AM_PATH_GTK, +[dnl +dnl Get the cflags and libraries from the gtk-config script +dnl +AC_ARG_WITH(gtk-prefix,[ --with-gtk-prefix=PFX Prefix where GTK is installed (optional)], + gtk_config_prefix="$withval", gtk_config_prefix="") +AC_ARG_WITH(gtk-exec-prefix,[ --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)], + gtk_config_exec_prefix="$withval", gtk_config_exec_prefix="") +AC_ARG_ENABLE(gtktest, [ --disable-gtktest Do not try to compile and run a test GTK program], + , enable_gtktest=yes) + + for module in . $4 + do + case "$module" in + gthread) + gtk_config_args="$gtk_config_args gthread" + ;; + esac + done + + if test x$gtk_config_exec_prefix != x ; then + gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config + fi + fi + if test x$gtk_config_prefix != x ; then + gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_prefix/bin/gtk-config + fi + fi + + AC_PATH_PROG(GTK_CONFIG, gtk-config, no) + min_gtk_version=ifelse([$1], ,0.99.7,$1) + AC_MSG_CHECKING(for GTK - version >= $min_gtk_version) + no_gtk="" + if test "$GTK_CONFIG" = "no" ; then + no_gtk=yes + else + GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` + GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` + gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gtktest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$GTK_LIBS $LIBS" +dnl +dnl Now check if the installed GTK is sufficiently new. (Also sanity +dnl checks the results of gtk-config to some extent +dnl + rm -f conf.gtktest + AC_TRY_RUN([ +#include +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gtktest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gtk_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtk_version"); + exit(1); + } + + if ((gtk_major_version != $gtk_config_major_version) || + (gtk_minor_version != $gtk_config_minor_version) || + (gtk_micro_version != $gtk_config_micro_version)) + { + printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", + $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf ("*** was found! If gtk-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); + printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } +#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) + else if ((gtk_major_version != GTK_MAJOR_VERSION) || + (gtk_minor_version != GTK_MINOR_VERSION) || + (gtk_micro_version != GTK_MICRO_VERSION)) + { + printf("*** GTK+ header files (version %d.%d.%d) do not match\n", + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + } +#endif /* defined (GTK_MAJOR_VERSION) ... */ + else + { + if ((gtk_major_version > major) || + ((gtk_major_version == major) && (gtk_minor_version > minor)) || + ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); + printf("*** correct copy of gtk-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} +],, no_gtk=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtk" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GTK_CONFIG" = "no" ; then + echo "*** The gtk-config script installed by GTK could not be found" + echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GTK_CONFIG environment variable to the" + echo "*** full path to gtk-config." + else + if test -f conf.gtktest ; then + : + else + echo "*** Could not run GTK test program, checking why..." + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $GTK_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK or finding the wrong" + echo "*** version of GTK. If it is not finding GTK, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" + echo "***" + echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" + echo "*** came with the system with the command" + echo "***" + echo "*** rpm --erase --nodeps gtk gtk-devel" ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK was incorrectly installed" + echo "*** or that you have moved GTK since it was installed. In the latter case, you" + echo "*** may want to edit the gtk-config script: $GTK_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTK_CFLAGS="" + GTK_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GTK_CFLAGS) + AC_SUBST(GTK_LIBS) + rm -f conf.gtktest +]) + +# Configure paths for gdk-pixbuf +# Elliot Lee 2000-01-10 +# stolen from Raph Levien 98-11-18 +# stolen from Manish Singh 98-9-30 +# stolen back from Frank Belew +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_GDK_PIXBUF([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for GDK_PIXBUF, and define GDK_PIXBUF_CFLAGS and GDK_PIXBUF_LIBS +dnl +AC_DEFUN(AM_PATH_GDK_PIXBUF, +[dnl +dnl Get the cflags and libraries from the gdk-pixbuf-config script +dnl +AC_ARG_WITH(gdk-pixbuf-prefix,[ --with-gdk-pixbuf-prefix=PFX Prefix where GDK_PIXBUF is installed (optional)], + gdk_pixbuf_prefix="$withval", gdk_pixbuf_prefix="") +AC_ARG_WITH(gdk-pixbuf-exec-prefix,[ --with-gdk-pixbuf-exec-prefix=PFX Exec prefix where GDK_PIXBUF is installed (optional)], + gdk_pixbuf_exec_prefix="$withval", gdk_pixbuf_exec_prefix="") +AC_ARG_ENABLE(gdk_pixbuftest, [ --disable-gdk_pixbuftest Do not try to compile and run a test GDK_PIXBUF program], + , enable_gdk_pixbuftest=yes) + + if test x$gdk_pixbuf_exec_prefix != x ; then + gdk_pixbuf_args="$gdk_pixbuf_args --exec-prefix=$gdk_pixbuf_exec_prefix" + if test x${GDK_PIXBUF_CONFIG+set} = xset ; then + GDK_PIXBUF_CONFIG=$gdk_pixbuf_exec_prefix/gdk-pixbuf-config + fi + fi + if test x$gdk_pixbuf_prefix != x ; then + gdk_pixbuf_args="$gdk_pixbuf_args --prefix=$gdk_pixbuf_prefix" + if test x${GDK_PIXBUF_CONFIG+set} = xset ; then + GDK_PIXBUF_CONFIG=$gdk_pixbuf_prefix/bin/gdk-pixbuf-config + fi + fi + + AC_PATH_PROG(GDK_PIXBUF_CONFIG, gdk-pixbuf-config, no) + min_gdk_pixbuf_version=ifelse([$1], ,0.2.5,$1) + AC_MSG_CHECKING(for GDK_PIXBUF - version >= $min_gdk_pixbuf_version) + no_gdk_pixbuf="" + if test "$GDK_PIXBUF_CONFIG" = "no" ; then + no_gdk_pixbuf=yes + else + GDK_PIXBUF_CFLAGS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --cflags` + GDK_PIXBUF_LIBS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --libs` + + gdk_pixbuf_major_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + gdk_pixbuf_minor_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + gdk_pixbuf_micro_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_config_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_gdk_pixbuftest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" + LIBS="$LIBS $GDK_PIXBUF_LIBS" +dnl +dnl Now check if the installed GDK_PIXBUF is sufficiently new. (Also sanity +dnl checks the results of gdk-pixbuf-config to some extent +dnl + rm -f conf.gdk_pixbuftest + AC_TRY_RUN([ +#include +#include +#include +#include + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gdk_pixbuftest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_gdk_pixbuf_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gdk_pixbuf_version"); + exit(1); + } + + if (($gdk_pixbuf_major_version > major) || + (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version > minor)) || + (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version == minor) && ($gdk_pixbuf_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'gdk-pixbuf-config --version' returned %d.%d.%d, but the minimum version\n", $gdk_pixbuf_major_version, $gdk_pixbuf_minor_version, $gdk_pixbuf_micro_version); + printf("*** of GDK_PIXBUF required is %d.%d.%d. If gdk-pixbuf-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If gdk-pixbuf-config was wrong, set the environment variable GDK_PIXBUF_CONFIG\n"); + printf("*** to point to the correct copy of gdk-pixbuf-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_gdk_pixbuf=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gdk_pixbuf" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$GDK_PIXBUF_CONFIG" = "no" ; then + echo "*** The gdk-pixbuf-config script installed by GDK_PIXBUF could not be found" + echo "*** If GDK_PIXBUF was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GDK_PIXBUF_CONFIG environment variable to the" + echo "*** full path to gdk-pixbuf-config." + else + if test -f conf.gdk_pixbuftest ; then + : + else + echo "*** Could not run GDK_PIXBUF test program, checking why..." + CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" + LIBS="$LIBS $GDK_PIXBUF_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GDK_PIXBUF or finding the wrong" + echo "*** version of GDK_PIXBUF. If it is not finding GDK_PIXBUF, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GDK_PIXBUF was incorrectly installed" + echo "*** or that you have moved GDK_PIXBUF since it was installed. In the latter case, you" + echo "*** may want to edit the gdk-pixbuf-config script: $GDK_PIXBUF_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GDK_PIXBUF_CFLAGS="" + GDK_PIXBUF_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GDK_PIXBUF_CFLAGS) + AC_SUBST(GDK_PIXBUF_LIBS) + rm -f conf.gdk_pixbuftest +]) + +# Configure paths for IMLIB +# Frank Belew 98-8-31 +# stolen from Manish Singh +# Shamelessly stolen from Owen Taylor + +dnl AM_PATH_IMLIB([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) +dnl Test for IMLIB, and define IMLIB_CFLAGS and IMLIB_LIBS +dnl +AC_DEFUN(AM_PATH_IMLIB, +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH(imlib-prefix,[ --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest Do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIB_CONFIG, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.8.2,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags` + IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + imlib_micro_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include +#include +#include +#include + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.imlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version > minor)) || + (($imlib_major_version == major) && ($imlib_minor_version == minor) && + ($imlib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version); + printf("*** of IMLIB required is %d.%d. If imlib-config is correct, then it is\n", major, minor); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.imlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $IMLIB_CFLAGS" + LIBS="$LIBS $IMLIB_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + IMLIB_CFLAGS="" + IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(IMLIB_CFLAGS) + AC_SUBST(IMLIB_LIBS) + rm -f conf.imlibtest +]) + +# Check for gdk-imlib +AC_DEFUN(AM_PATH_GDK_IMLIB, +[dnl +dnl Get the cflags and libraries from the imlib-config script +dnl +AC_ARG_WITH(imlib-prefix,[ --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)], + imlib_prefix="$withval", imlib_prefix="") +AC_ARG_WITH(imlib-exec-prefix,[ --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)], + imlib_exec_prefix="$withval", imlib_exec_prefix="") +AC_ARG_ENABLE(imlibtest, [ --disable-imlibtest Do not try to compile and run a test IMLIB program], + , enable_imlibtest=yes) + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + AC_PATH_PROG(IMLIB_CONFIG, imlib-config, no) + min_imlib_version=ifelse([$1], ,1.8.2,$1) + AC_MSG_CHECKING(for IMLIB - version >= $min_imlib_version) + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + GDK_IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags-gdk` + GDK_IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs-gdk` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" +dnl +dnl Now check if the installed IMLIB is sufficiently new. (Also sanity +dnl checks the results of imlib-config to some extent +dnl + rm -f conf.imlibtest + AC_TRY_RUN([ +#include +#include +#include + +int main () +{ + int major, minor; + char *tmp_version; + + system ("touch conf.gdkimlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version >= minor))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version); + printf("*** of IMLIB required is %d.%d. If imlib-config is correct, then it is\n", major, minor); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + +],, no_imlib=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + AC_MSG_RESULT(no) + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.gdkimlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" + AC_TRY_LINK([ +#include +#include +], [ return 0; ], + [ echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + IMLIB_CFLAGS="" + IMLIB_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GDK_IMLIB_CFLAGS) + AC_SUBST(GDK_IMLIB_LIBS) + rm -f conf.gdkimlibtest +]) + +dnl Autoconf macros for libgpgme +dnl $Id$ + +# Configure paths for GPGME +# Shamelessly stolen from the one of XDELTA by Owen Taylor +# Werner Koch 2000-11-17 + +dnl AM_PATH_GPGME([MINIMUM-VERSION, +dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]]) +dnl Test for gpgme, and define GPGME_CFLAGS and GPGME_LIBS +dnl +AC_DEFUN(AM_PATH_GPGME, +[dnl +dnl Get the cflags and libraries from the gpgme-config script +dnl + AC_ARG_WITH(gpgme-prefix, + [ --with-gpgme-prefix=PFX Prefix where gpgme is installed (optional)], + gpgme_config_prefix="$withval", gpgme_config_prefix="") + AC_ARG_ENABLE(gpgmetest, + [ --disable-gpgmetest Do not try to compile and run a test gpgme program], + , enable_gpgmetest=yes) + + if test x$gpgme_config_prefix != x ; then + gpgme_config_args="$gpgme_config_args --prefix=$gpgme_config_prefix" + if test x${GPGME_CONFIG+set} != xset ; then + GPGME_CONFIG=$gpgme_config_prefix/bin/gpgme-config + fi + fi + + AC_PATH_PROG(GPGME_CONFIG, gpgme-config, no) + min_gpgme_version=ifelse([$1], ,1.0.0,$1) + AC_MSG_CHECKING(for gpgme - version >= $min_gpgme_version) + no_gpgme="" + if test "$GPGME_CONFIG" = "no" ; then + no_gpgme=yes + else + GPGME_CFLAGS=`$GPGME_CONFIG $gpgme_config_args --cflags` + GPGME_LIBS=`$GPGME_CONFIG $gpgme_config_args --libs` + gpgme_config_version=`$GPGME_CONFIG $gpgme_config_args --version` + if test "x$enable_gpgmetest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GPGME_CFLAGS" + LIBS="$LIBS $GPGME_LIBS" +dnl +dnl Now check if the installed gpgme is sufficiently new. Also sanity +dnl checks the results of gpgme-config to some extent +dnl + rm -f conf.gpgmetest + AC_TRY_RUN([ +#include +#include +#include +#include + +int +main () +{ + system ("touch conf.gpgmetest"); + + if( strcmp( gpgme_check_version(NULL), "$gpgme_config_version" ) ) + { + printf("\n" +"*** 'gpgme-config --version' returned %s, but GPGME (%s) was found!\n", + "$gpgme_config_version", gpgme_check_version(NULL) ); + printf( +"*** If gpgme-config was correct, then it is best to remove the old\n" +"*** version of GPGME. You may also be able to fix the error\n" +"*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n" +"*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n" +"*** required on your system.\n" +"*** If gpgme-config was wrong, set the environment variable GPGME_CONFIG\n" +"*** to point to the correct copy of gpgme-config, \n" +"*** and remove the file config.cache before re-running configure\n" + ); + } + else if ( strcmp(gpgme_check_version(NULL), GPGME_VERSION ) ) + { + printf("\n*** GPGME header file (version %s) does not match\n", + GPGME_VERSION); + printf("*** library (version %s)\n", gpgme_check_version(NULL) ); + } + else + { + if ( gpgme_check_version( "$min_gpgme_version" ) ) + return 0; + printf("no\n" +"*** An old version of GPGME (%s) was found.\n", gpgme_check_version(NULL) ); + printf( +"*** You need a version of GPGME newer than %s.\n", "$min_gpgme_version" ); + printf( +"*** The latest version of GPGME is always available at\n" +"*** ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/\n" +"*** \n" +"*** If you have already installed a sufficiently new version, this error\n" +"*** probably means that the wrong copy of the gpgme-config shell script is\n" +"*** being found. The easiest way to fix this is to remove the old version\n" +"*** of GPGME, but you can also set the GPGME_CONFIG environment to point to\n" +"*** the correct copy of gpgme-config. (In this case, you will have to\n" +"*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n" +"*** so that the correct libraries are found at run-time).\n" + ); + } + return 1; +} +],, no_gpgme=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gpgme" = x ; then + AC_MSG_RESULT(yes) + ifelse([$2], , :, [$2]) + else + if test -f conf.gpgmetest ; then + : + else + AC_MSG_RESULT(no) + fi + if test "$GPGME_CONFIG" = "no" ; then + echo "*** The gpgme-config script installed by GPGME could not be found" + echo "*** If GPGME was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GPGME_CONFIG environment variable to the" + echo "*** full path to gpgme-config." + else + if test -f conf.gpgmetest ; then + : + else + echo "*** Could not run gpgme test program, checking why..." + CFLAGS="$CFLAGS $GPGME_CFLAGS" + LIBS="$LIBS $GPGME_LIBS" + AC_TRY_LINK([ +#include +#include +#include +#include +], [ gpgme_check_version(NULL); return 0 ], + [ +echo "*** The test program compiled, but did not run. This usually means" +echo "*** that the run-time linker is not finding GPGME or finding the wrong" +echo "*** version of GPGME. If it is not finding GPGME, you'll need to set your" +echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" +echo "*** to the installed location Also, make sure you have run ldconfig if" +echo "*** that is required on your system" +echo "***" +echo "*** If you have an old version installed, it is best to remove it," +echo "*** although you may also be able to get things to work by" +echo "*** modifying LD_LIBRARY_PATH" +echo "***" + ], + [ +echo "*** The test program failed to compile or link. See the file config.log" +echo "*** for the exact error that occured. This usually means GPGME was" +echo "*** incorrectly installed or that you have moved GPGME since it was" +echo "*** installed. In the latter case, you may want to edit the" +echo "*** gpgme-config script: $GPGME_CONFIG" + ]) + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GPGME_CFLAGS="" + GPGME_LIBS="" + ifelse([$3], , :, [$3]) + fi + AC_SUBST(GPGME_CFLAGS) + AC_SUBST(GPGME_LIBS) + rm -f conf.gpgmetest +]) + + diff --git a/autogen.sh b/autogen.sh new file mode 100644 index 000000000..67eb0be79 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +aclocal -I ac \ + && autoconf \ + && autoheader \ + && automake --add-missing --foreign --copy \ + && ./configure $@ diff --git a/config.guess b/config.guess new file mode 100644 index 000000000..6cb567b8a --- /dev/null +++ b/config.guess @@ -0,0 +1,1087 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999 +# Free Software Foundation, Inc. +# +# 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 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. + +# Written by Per Bothner . +# The master version of this file is at the FSF in /home/gd/gnu/lib. +# Please send patches to the Autoconf mailing list . +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit system type (host/target name). +# +# Only a few systems have been added to this list; please add others +# (but try to keep the structure clean). +# + +# Use $HOST_CC if defined. $CC may point to a cross-compiler +if test x"$CC_FOR_BUILD" = x; then + if test x"$HOST_CC" != x; then + CC_FOR_BUILD="$HOST_CC" + else + if test x"$CC" != x; then + CC_FOR_BUILD="$CC" + else + CC_FOR_BUILD=cc + fi + fi +fi + + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 8/24/94.) +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 + +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # 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. + cat <$dummy.s + .globl main + .ent main +main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + 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 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-cbm-sysv4 + exit 0;; + amiga:NetBSD:*:*) + echo m68k-cbm-netbsd${UNAME_RELEASE} + exit 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + arc64:OpenBSD:*:*) + echo mips64el-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hkmips:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mips-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + arm32:NetBSD:*:*) + echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + SR2?01:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + 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 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + 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 0 ;; + 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 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(head -1 /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 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + atari*:NetBSD:*:*) + echo m68k-atari-netbsd${UNAME_RELEASE} + exit 0 ;; + atari*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + # 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 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + sun3*:NetBSD:*:*) + echo m68k-sun-netbsd${UNAME_RELEASE} + exit 0 ;; + sun3*:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:NetBSD:*:*) + echo m68k-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + macppc:NetBSD:*:*) + echo powerpc-apple-netbsd${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus + 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 $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + -o ${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 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i?86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo rs6000-ibm-aix3.2.5 + 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 0 ;; + *:AIX:*:4) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=4.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 9000/[34678]??:HP-UX:*:*) + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + sed 's/^ //' << EOF >$dummy.c + #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 + ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + rm -f $dummy.c $dummy + esac + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + 3050*:HI-UX:*:*) + 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 $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i?86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*X-MP:*:*:*) + echo xmp-cray-unicos + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ + exit 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} + exit 0 ;; + CRAY*T3E:*:*:*) + echo t3e-cray-unicosmk${UNAME_RELEASE} + exit 0 ;; + CRAY-2:*:*:*) + echo cray2-cray-unicos + exit 0 ;; + F300:UNIX_System_V:*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; + F301:UNIX_System_V:*:*) + echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'` + exit 0 ;; + hp3[0-9][05]:NetBSD:*:*) + echo m68k-hp-netbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | i?86:BSD/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + if test -x /usr/bin/objformat; then + if test "elf" = "`/usr/bin/objformat`"; then + echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` + exit 0 + fi + fi + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; + *:NetBSD:*:*) + echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + 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 i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + *:Linux:*:*) + # uname on the ARM produces all sorts of strangeness, and we need to + # filter it out. + case "$UNAME_MACHINE" in + armv*) UNAME_MACHINE=$UNAME_MACHINE ;; + arm* | sa110*) UNAME_MACHINE="arm" ;; + esac + + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_help_string=`cd /; ld --help 2>&1` + ld_supported_emulations=`echo $ld_help_string \ + | sed -ne '/supported emulations:/!d + s/[ ][ ]*/ /g + s/.*supported emulations: *// + s/ .*// + p'` + case "$ld_supported_emulations" in + i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; + i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; + sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + elf32ppc) + # Determine Lib Version + cat >$dummy.c < +#if defined(__GLIBC__) +extern char __libc_version[]; +extern char __libc_release[]; +#endif +main(argc, argv) + int argc; + char *argv[]; +{ +#if defined(__GLIBC__) + printf("%s %s\n", __libc_version, __libc_release); +#else + printf("unkown\n"); +#endif + return 0; +} +EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;; + esac + + if test "${UNAME_MACHINE}" = "alpha" ; then + sed 's/^ //' <$dummy.s + .globl main + .ent main + main: + .frame \$30,0,\$26,0 + .prologue 0 + .long 0x47e03d80 # implver $0 + lda \$2,259 + .long 0x47e20c21 # amask $2,$1 + srl \$1,8,\$2 + sll \$2,2,\$2 + sll \$0,3,\$0 + addl \$1,\$0,\$0 + addl \$2,\$0,\$0 + ret \$31,(\$26),1 + .end main +EOF + LIBC="" + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy + case "$?" in + 7) + UNAME_MACHINE="alpha" + ;; + 15) + UNAME_MACHINE="alphaev5" + ;; + 14) + UNAME_MACHINE="alphaev56" + ;; + 10) + UNAME_MACHINE="alphapca56" + ;; + 16) + UNAME_MACHINE="alphaev6" + ;; + esac + + objdump --private-headers $dummy | \ + grep ld.so.1 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 + elif test "${UNAME_MACHINE}" = "mips" ; then + cat >$dummy.c </dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + else + # Either a pre-BFD a.out linker (linux-gnuoldld) + # or one that does not give us useful --help. + # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout. + # If ld does not provide *any* "supported emulations:" + # that means it is gnuoldld. + echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:" + test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0 + + case "${UNAME_MACHINE}" in + i?86) + VENDOR=pc; + ;; + *) + VENDOR=unknown; + ;; + esac + # Determine whether the default compiler is a.out or elf + cat >$dummy.c < +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif +#ifdef __ELF__ +# ifdef __GLIBC__ +# if __GLIBC__ >= 2 + printf ("%s-${VENDOR}-linux-gnu\n", argv[1]); +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +# else + printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]); +# endif +#else + printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]); +#endif + return 0; +} +EOF + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy + fi ;; +# 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. + i?86:DYNIX/ptx:4*:*) + echo i386-sequent-sysv4 + exit 0 ;; + 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 0 ;; + i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*) + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} + fi + exit 0 ;; + i?86:*:5:7*) + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585 + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE} + exit 0 ;; + 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|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit 0 ;; + pc:*:*:*) + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + 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 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*: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 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *: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 0 ;; + PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:*:6*) + echo mips-sony-newsos6 + exit 0 ;; + 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 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +#if !defined (ultrix) + printf ("vax-dec-bsd\n"); exit (0); +#else + printf ("vax-dec-ultrix\n"); exit (0); +#endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + esac +fi + +#echo '(Unable to guess system type)' 1>&2 + +exit 1 diff --git a/config.h.in b/config.h.in new file mode 100644 index 000000000..8113c4f9b --- /dev/null +++ b/config.h.in @@ -0,0 +1,242 @@ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if using alloca.c. */ +#undef C_ALLOCA + +/* Define to empty if the keyword does not work. */ +#undef const + +/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems. + This function is required for alloca.c support on those systems. */ +#undef CRAY_STACKSEG_END + +/* Define if you have alloca, as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define if you have and it should be used (not on Ultrix). */ +#undef HAVE_ALLOCA_H + +/* Define if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define if you have that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H + +/* Define as __inline if that's what the C compiler calls it. */ +#undef inline + +/* Define to `long' if doesn't define. */ +#undef off_t + +/* Define to `int' if doesn't define. */ +#undef pid_t + +/* Define if you need to in order for stat and other things to work. */ +#undef _POSIX_SOURCE + +/* Define to `unsigned' if doesn't define. */ +#undef size_t + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at run-time. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown + */ +#undef STACK_DIRECTION + +/* Define if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define if your declares struct tm. */ +#undef TM_IN_SYS_TIME + +#undef ENABLE_NLS +#undef HAVE_CATGETS +#undef HAVE_GETTEXT +#undef HAVE_LC_MESSAGES +#undef HAVE_STPCPY + +#undef HAVE_GDK_PIXBUF +#undef HAVE_GDK_IMLIB + +/* Whether to use multithread or not */ +#undef USE_THREADS + +/* Define if you want IPv6 support. */ +#undef INET6 + +/* Define if we use GPGME to support OpenPGP */ +#undef USE_GPGME + +/* Define to `unsigned int' if or doesn't define. */ +#undef wint_t + +#undef PACKAGE +#undef VERSION + +/* Define if you have the __argz_count function. */ +#undef HAVE___ARGZ_COUNT + +/* Define if you have the __argz_next function. */ +#undef HAVE___ARGZ_NEXT + +/* Define if you have the __argz_stringify function. */ +#undef HAVE___ARGZ_STRINGIFY + +/* Define if you have the dcgettext function. */ +#undef HAVE_DCGETTEXT + +/* Define if you have the fchmod function. */ +#undef HAVE_FCHMOD + +/* Define if you have the flock function. */ +#undef HAVE_FLOCK + +/* Define if you have the getcwd function. */ +#undef HAVE_GETCWD + +/* Define if you have the gethostname function. */ +#undef HAVE_GETHOSTNAME + +/* Define if you have the getpagesize function. */ +#undef HAVE_GETPAGESIZE + +/* Define if you have the inet_addr function. */ +#undef HAVE_INET_ADDR + +/* Define if you have the inet_aton function. */ +#undef HAVE_INET_ATON + +/* Define if you have the iswalnum function. */ +#undef HAVE_ISWALNUM + +/* Define if you have the iswspace function. */ +#undef HAVE_ISWSPACE + +/* Define if you have the lockf function. */ +#undef HAVE_LOCKF + +/* Define if you have the mkdir function. */ +#undef HAVE_MKDIR + +/* Define if you have the mkstemp function. */ +#undef HAVE_MKSTEMP + +/* Define if you have the mktime function. */ +#undef HAVE_MKTIME + +/* Define if you have the munmap function. */ +#undef HAVE_MUNMAP + +/* Define if you have the putenv function. */ +#undef HAVE_PUTENV + +/* Define if you have the setenv function. */ +#undef HAVE_SETENV + +/* Define if you have the setlocale function. */ +#undef HAVE_SETLOCALE + +/* Define if you have the socket function. */ +#undef HAVE_SOCKET + +/* Define if you have the stpcpy function. */ +#undef HAVE_STPCPY + +/* Define if you have the strcasecmp function. */ +#undef HAVE_STRCASECMP + +/* Define if you have the strchr function. */ +#undef HAVE_STRCHR + +/* Define if you have the strdup function. */ +#undef HAVE_STRDUP + +/* Define if you have the strstr function. */ +#undef HAVE_STRSTR + +/* Define if you have the towlower function. */ +#undef HAVE_TOWLOWER + +/* Define if you have the uname function. */ +#undef HAVE_UNAME + +/* Define if you have the wcscpy function. */ +#undef HAVE_WCSCPY + +/* Define if you have the wcslen function. */ +#undef HAVE_WCSLEN + +/* Define if you have the wcsncpy function. */ +#undef HAVE_WCSNCPY + +/* Define if you have the wcsstr function. */ +#undef HAVE_WCSSTR + +/* Define if you have the wcswcs function. */ +#undef HAVE_WCSWCS + +/* Define if you have the header file. */ +#undef HAVE_ARGZ_H + +/* Define if you have the header file. */ +#undef HAVE_DIRENT_H + +/* Define if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define if you have the header file. */ +#undef HAVE_LOCALE_H + +/* Define if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define if you have the header file. */ +#undef HAVE_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_NL_TYPES_H + +/* Define if you have the header file. */ +#undef HAVE_PATHS_H + +/* Define if you have the header file. */ +#undef HAVE_STRING_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_DIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_FILE_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_NDIR_H + +/* Define if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define if you have the header file. */ +#undef HAVE_WCTYPE_H + +/* Define if you have the compface library (-lcompface). */ +#undef HAVE_LIBCOMPFACE + +/* Define if you have the i library (-li). */ +#undef HAVE_LIBI + +/* Define if you have the jconv library (-ljconv). */ +#undef HAVE_LIBJCONV + +/* Define if you have the xpg4 library (-lxpg4). */ +#undef HAVE_LIBXPG4 diff --git a/config.sub b/config.sub new file mode 100644 index 000000000..2436b4534 --- /dev/null +++ b/config.sub @@ -0,0 +1,1215 @@ +#! /bin/sh +# Configuration validation subroutine script, version 1.1. +# Copyright (C) 1991, 92-97, 1998, 1999 Free Software Foundation, Inc. +# This file is (in principle) common to ALL GNU software. +# The presence of a machine in this file suggests that SOME GNU software +# can handle that machine. It does not imply ALL GNU software can. +# +# 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 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. + +# 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. + +# 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. + +if [ x$1 = x ] +then + echo Configuration name missing. 1>&2 + echo "Usage: $0 CPU-MFR-OPSYS" 1>&2 + echo "or $0 ALIAS" 1>&2 + echo where ALIAS is a recognized configuration type. 1>&2 + exit 1 +fi + +# First pass through any local machine types. +case $1 in + *local*) + echo $1 + exit 0 + ;; + *) + ;; +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 + linux-gnu*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + 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) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=vxworks + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -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/'` + ;; + -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*) + 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 + ;; +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. + tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ + | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | miprs64vr5000el \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ + | thumb | d10v) + basic_machine=$basic_machine-unknown + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65) + ;; + + # 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[34567]86) + 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. + vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ + | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* \ + | f301-* | armv*-* | t3e-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | c30-* ) + ;; + # 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 + ;; + 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 + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-cbm + ;; + amigaos | amigados) + basic_machine=m68k-cbm + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-cbm + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + 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 | ymp) + basic_machine=ymp-cray + os=-unicos + ;; + cray2) + basic_machine=cray2-cray + os=-unicos + ;; + [ctj]90-cray) + basic_machine=c90-cray + os=-unicos + ;; + crds | unos) + basic_machine=m68k-crds + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + 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 + ;; + 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 + os=-mvs + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i[34567]86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i[34567]86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i[34567]86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i[34567]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 + ;; + i386-go32 | go32) + basic_machine=i386-unknown + os=-go32 + ;; + i386-mingw32 | mingw32) + basic_machine=i386-unknown + os=-mingw32 + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | *MiNT) + basic_machine=m68k-atari + os=-mint + ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux-gnu + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux-gnu + ;; + 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 + ;; + msdos) + basic_machine=i386-unknown + os=-msdos + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-corel + 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 + ;; + np1) + basic_machine=np1-gould + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + 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 + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexen) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexen-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=rs6000-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) 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/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sparclite-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 + ;; + 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 + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + 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 + ;; + xmp) + basic_machine=xmp-cray + os=-unicos + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + z8k-*-coff) + basic_machine=z8k-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 + ;; + mips) + if [ x$os = x-linux-gnu ]; then + basic_machine=mips-unknown + else + basic_machine=mips-mips + fi + ;; + romp) + basic_machine=romp-ibm + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sparc | sparcv9) + 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 + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; + *) + 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. + -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* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -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|'` + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -ns2 ) + os=-nextstep2 + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -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) + os=-mint + ;; + -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 + *-acorn) + os=-riscix1.2 + ;; + arm*-corel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-ibm) + os=-aix + ;; + *-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 + ;; + f301-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 + ;; + -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*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -vxsim* | -vxworks*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -*MiNT) + vendor=atari + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os diff --git a/configure b/configure new file mode 100644 index 000000000..ba276c94f --- /dev/null +++ b/configure @@ -0,0 +1,6893 @@ +#! /bin/sh + +# Guess values for system-dependent variables and create Makefiles. +# Generated automatically using autoconf version 2.13 +# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. + +# Defaults: +ac_help= +ac_default_prefix=/usr/local +# Any additions from configure.in: +ac_help="$ac_help + --enable-shared[=PKGS] build shared libraries [default=yes]" +ac_help="$ac_help + --enable-static[=PKGS] build static libraries [default=yes]" +ac_help="$ac_help + --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" +ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" +ac_help="$ac_help + --disable-libtool-lock avoid locking (might break parallel builds)" +ac_help="$ac_help + --enable-maintainer-mode enable make rules and dependencies not useful + (and sometimes confusing) to the casual installer" +ac_help="$ac_help + --disable-nls do not use Native Language Support" +ac_help="$ac_help + --with-included-gettext use the GNU gettext library included here" +ac_help="$ac_help + --with-catgets use catgets functions if available" +ac_help="$ac_help + --with-glib-prefix=PFX Prefix where GLIB is installed (optional)" +ac_help="$ac_help + --with-glib-exec-prefix=PFX Exec prefix where GLIB is installed (optional)" +ac_help="$ac_help + --disable-glibtest Do not try to compile and run a test GLIB program" +ac_help="$ac_help + --with-gtk-prefix=PFX Prefix where GTK is installed (optional)" +ac_help="$ac_help + --with-gtk-exec-prefix=PFX Exec prefix where GTK is installed (optional)" +ac_help="$ac_help + --disable-gtktest Do not try to compile and run a test GTK program" +ac_help="$ac_help + --disable-gdk-pixbuf Do not use gdk-pixbuf" +ac_help="$ac_help + --disable-imlib Do not use imlib" +ac_help="$ac_help + --with-gdk-pixbuf-prefix=PFX Prefix where GDK_PIXBUF is installed (optional)" +ac_help="$ac_help + --with-gdk-pixbuf-exec-prefix=PFX Exec prefix where GDK_PIXBUF is installed (optional)" +ac_help="$ac_help + --disable-gdk_pixbuftest Do not try to compile and run a test GDK_PIXBUF program" +ac_help="$ac_help + --with-imlib-prefix=PFX Prefix where IMLIB is installed (optional)" +ac_help="$ac_help + --with-imlib-exec-prefix=PFX Exec prefix where IMLIB is installed (optional)" +ac_help="$ac_help + --disable-imlibtest Do not try to compile and run a test IMLIB program" +ac_help="$ac_help + --enable-gpgme Enable GnuPG support using GPGME [default=no]" +ac_help="$ac_help + --with-gpgme-prefix=PFX Prefix where gpgme is installed (optional)" +ac_help="$ac_help + --disable-gpgmetest Do not try to compile and run a test gpgme program" +ac_help="$ac_help + --disable-compface Do not use compface (X-Face)" +ac_help="$ac_help + --disable-jconv Do not use libjconv" +ac_help="$ac_help + --enable-threads Enable multithread support [default=no]" +ac_help="$ac_help + --enable-ipv6 Enable IPv6 support [default=no]" + +# Initialize some variables set by options. +# The variables have the same names as the options, with +# dashes changed to underlines. +build=NONE +cache_file=./config.cache +exec_prefix=NONE +host=NONE +no_create= +nonopt=NONE +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +target=NONE +verbose= +x_includes=NONE +x_libraries=NONE +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +# Initialize some other variables. +subdirs= +MFLAGS= MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} +# Maximum number of lines to put in a shell here document. +ac_max_here_lines=12 + +ac_prev= +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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) ac_optarg= ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case "$ac_option" in + + -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 ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build="$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" ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir="$ac_optarg" ;; + + -disable-* | --disable-*) + ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + eval "enable_${ac_feature}=no" ;; + + -enable-* | --enable-*) + ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } + fi + ac_feature=`echo $ac_feature| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "enable_${ac_feature}='$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) + # 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 << EOF +Usage: configure [options] [host] +Options: [defaults in brackets after descriptions] +Configuration: + --cache-file=FILE cache test results in FILE + --help print this message + --no-create do not create output files + --quiet, --silent do not print \`checking...' messages + --version print the version of autoconf that created configure +Directory and file names: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [same as prefix] + --bindir=DIR user executables in DIR [EPREFIX/bin] + --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] + --libexecdir=DIR program executables in DIR [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data in DIR + [PREFIX/share] + --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data in DIR + [PREFIX/com] + --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] + --libdir=DIR object code libraries in DIR [EPREFIX/lib] + --includedir=DIR C header files in DIR [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] + --infodir=DIR info documentation in DIR [PREFIX/info] + --mandir=DIR man documentation in DIR [PREFIX/man] + --srcdir=DIR find the sources in DIR [configure dir or ..] + --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 +EOF + cat << EOF +Host type: + --build=BUILD configure for building on BUILD [BUILD=HOST] + --host=HOST configure for HOST [guessed] + --target=TARGET configure for TARGET [TARGET=HOST] +Features and packages: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR +EOF + if test -n "$ac_help"; then + echo "--enable and --with options recognized:$ac_help" + fi + exit 0 ;; + + -host | --host | --hos | --ho) + ac_prev=host ;; + -host=* | --host=* | --hos=* | --ho=*) + host="$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" ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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) + 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" ;; + + -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 ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target="$ac_optarg" ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers) + echo "configure generated by autoconf version 2.13" + exit 0 ;; + + -with-* | --with-*) + ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + case "$ac_option" in + *=*) ;; + *) ac_optarg=yes ;; + esac + eval "with_${ac_package}='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`echo $ac_option|sed -e 's/-*without-//'` + # Reject names that are not valid shell variable names. + if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then + { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } + fi + ac_package=`echo $ac_package| sed 's/-/_/g'` + eval "with_${ac_package}=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" ;; + + -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + ;; + + *) + if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then + echo "configure: warning: $ac_option: invalid host type" 1>&2 + fi + if test "x$nonopt" != xNONE; then + { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } + fi + nonopt="$ac_option" + ;; + + esac +done + +if test -n "$ac_prev"; then + { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } +fi + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 6 checking for... messages and results +# 5 compiler messages saved in config.log +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>./config.log + +echo "\ +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. +" 1>&5 + +# Strip out --no-create and --no-recursion so they do not pile up. +# Also quote any args containing shell metacharacters. +ac_configure_args= +for ac_arg +do + case "$ac_arg" in + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c) ;; + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ac_configure_args="$ac_configure_args '$ac_arg'" ;; + *) ac_configure_args="$ac_configure_args $ac_arg" ;; + esac +done + +# NLS nuisances. +# Only set these to C if already set. These must not be set unconditionally +# because not all systems understand e.g. LANG=C (notably SCO). +# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! +# Non-C LC_CTYPE values break the ctype check. +if test "${LANG+set}" = set; then LANG=C; export LANG; fi +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi +if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo > confdefs.h + +# A filename unique to this package, relative to the directory that +# configure is in, which we can look for to find out if srcdir is correct. +ac_unique_file=src/main.c + +# 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 its parent. + ac_prog=$0 + ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` + test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + 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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + else + { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + fi +fi +srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` + +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + echo "loading site script $ac_site_file" + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +ac_exeext= +ac_objext=o +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + + +PACKAGE=sylpheed + +MAJOR_VERSION=0 +MINOR_VERSION=4 +MICRO_VERSION=65 +INTERFACE_AGE=65 +BINARY_AGE=65 +EXTRA_VERSION=cvs3 +VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION + +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 + fi +done +if test -z "$ac_aux_dir"; then + { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } +fi +ac_config_guess=$ac_aux_dir/config.guess +ac_config_sub=$ac_aux_dir/config.sub +ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + +# 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 +# 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" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:627: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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 + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +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. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&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_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether build environment is sane""... $ac_c" 1>&6 +echo "configure:680: checking whether build environment is sane" >&5 +# Just in case +sleep 1 +echo timestamp > conftestfile +# 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 ( + set X `ls -Lt $srcdir/configure conftestfile 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftestfile` + fi + if test "$*" != "X $srcdir/configure conftestfile" \ + && test "$*" != "X conftestfile $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". + { echo "configure: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" 1>&2; exit 1; } + fi + + test "$2" = conftestfile + ) +then + # Ok. + : +else + { echo "configure: error: newly created file is older than distributed files! +Check your system clock" 1>&2; exit 1; } +fi +rm -f conftest* +echo "$ac_t""yes" 1>&6 +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +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" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:737: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + + +PACKAGE=$PACKAGE + +VERSION=$VERSION + +if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then + { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } +fi + + + +missing_dir=`cd $ac_aux_dir && pwd` +echo $ac_n "checking for working aclocal""... $ac_c" 1>&6 +echo "configure:776: checking for working aclocal" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (aclocal --version) < /dev/null > /dev/null 2>&1; then + ACLOCAL=aclocal + echo "$ac_t""found" 1>&6 +else + ACLOCAL="$missing_dir/missing aclocal" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoconf""... $ac_c" 1>&6 +echo "configure:789: checking for working autoconf" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoconf --version) < /dev/null > /dev/null 2>&1; then + AUTOCONF=autoconf + echo "$ac_t""found" 1>&6 +else + AUTOCONF="$missing_dir/missing autoconf" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working automake""... $ac_c" 1>&6 +echo "configure:802: checking for working automake" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (automake --version) < /dev/null > /dev/null 2>&1; then + AUTOMAKE=automake + echo "$ac_t""found" 1>&6 +else + AUTOMAKE="$missing_dir/missing automake" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working autoheader""... $ac_c" 1>&6 +echo "configure:815: checking for working autoheader" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (autoheader --version) < /dev/null > /dev/null 2>&1; then + AUTOHEADER=autoheader + echo "$ac_t""found" 1>&6 +else + AUTOHEADER="$missing_dir/missing autoheader" + echo "$ac_t""missing" 1>&6 +fi + +echo $ac_n "checking for working makeinfo""... $ac_c" 1>&6 +echo "configure:828: checking for working makeinfo" >&5 +# Run test in a subshell; some versions of sh will print an error if +# an executable is not found, even if stderr is redirected. +# Redirect stdin to placate older versions of autoconf. Sigh. +if (makeinfo --version) < /dev/null > /dev/null 2>&1; then + MAKEINFO=makeinfo + echo "$ac_t""found" 1>&6 +else + MAKEINFO="$missing_dir/missing makeinfo" + echo "$ac_t""missing" 1>&6 +fi + + +cat >> confdefs.h <> confdefs.h </dev/null 2>&1; then : +else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } +fi + +echo $ac_n "checking host system type""... $ac_c" 1>&6 +echo "configure:939: checking host system type" >&5 + +host_alias=$host +case "$host_alias" in +NONE) + case $nonopt in + NONE) + if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : + else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } + fi ;; + *) host_alias=$nonopt ;; + esac ;; +esac + +host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$host" 1>&6 + +echo $ac_n "checking build system type""... $ac_c" 1>&6 +echo "configure:960: checking build system type" >&5 + +build_alias=$build +case "$build_alias" in +NONE) + case $nonopt in + NONE) build_alias=$host_alias ;; + *) build_alias=$nonopt ;; + esac ;; +esac + +build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` +build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` +echo "$ac_t""$build" 1>&6 + +# Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:980: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" +fi +fi +RANLIB="$ac_cv_prog_RANLIB" +if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1010: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +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 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1040: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_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 $# -gt 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 + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1091: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1123: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1134 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1165: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1170: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1198: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 + +# Check whether --with-gnu-ld or --without-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 + +ac_prog=ld +if test "$ac_cv_prog_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 +echo "configure:1241: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + 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 + echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 +echo "configure:1265: checking for GNU ld" >&5 +else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 +echo "configure:1268: checking for non-GNU ld" >&5 +fi +if eval "test \"`echo '$''{'ac_cv_path_LD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&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 + ac_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. + if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + ac_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$ac_cv_path_LD" +if test -n "$LD"; then + echo "$ac_t""$LD" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } +echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 +echo "configure:1303: checking if the linker ($LD) is GNU ld" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gnu_ld'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 &5; then + ac_cv_prog_gnu_ld=yes +else + ac_cv_prog_gnu_ld=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gnu_ld" 1>&6 + + +echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 +echo "configure:1319: checking for BSD-compatible nm" >&5 +if eval "test \"`echo '$''{'ac_cv_path_NM'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$NM"; then + # Let the user override the test. + ac_cv_path_NM="$NM" +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + ac_cv_path_NM="$ac_dir/nm -p" + break + else + ac_cv_path_NM=${ac_cv_path_NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm +fi +fi + +NM="$ac_cv_path_NM" +echo "$ac_t""$NM" 1>&6 + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1355: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + +case "$target" in +NONE) lt_target="$host" ;; +*) lt_target="$target" ;; +esac + +# Check for any special flags to pass to ltconfig. +libtool_flags="--cache-file=$cache_file" +test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" +test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" +test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" +test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" +test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" + + +# Check whether --enable-libtool-lock or --disable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then + enableval="$enable_libtool_lock" + : +fi + +test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" +test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case "$lt_target" in +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 1404 "configure"' > conftest.$ac_ext + if { (eval echo configure:1405: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + case "`/usr/bin/file conftest.o`" in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 +echo "configure:1426: checking whether the C compiler needs -belf" >&5 +if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + lt_cv_cc_needs_belf=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + lt_cv_cc_needs_belf=no +fi +rm -f conftest* +fi + +echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; + + +esac + + +# Save cache, so that ltconfig can load it +cat > confcache <<\EOF +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# 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. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + + +# Actually configure libtool. ac_aux_dir is where install-sh is found. +CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ +LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ +LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" \ +DLLTOOL="$DLLTOOL" AS="$AS" OBJDUMP="$OBJDUMP" \ +${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ +$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $lt_target \ +|| { echo "configure: error: libtool configure failed" 1>&2; exit 1; } + +# Reload cache, that may have been modified by ltconfig +if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file +else + echo "creating cache $cache_file" + > $cache_file +fi + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + +# Redirect the config.log output again, so that the ltconfig log is not +# clobbered by the next message. +exec 5>>./config.log + +echo $ac_n "checking whether to enable maintainer-specific portions of Makefiles""... $ac_c" 1>&6 +echo "configure:1540: checking whether to enable maintainer-specific portions of Makefiles" >&5 + # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then + enableval="$enable_maintainer_mode" + USE_MAINTAINER_MODE=$enableval +else + USE_MAINTAINER_MODE=no +fi + + echo "$ac_t""$USE_MAINTAINER_MODE" 1>&6 + + +if test $USE_MAINTAINER_MODE = yes; then + MAINTAINER_MODE_TRUE= + MAINTAINER_MODE_FALSE='#' +else + MAINTAINER_MODE_TRUE='#' + MAINTAINER_MODE_FALSE= +fi + MAINT=$MAINTAINER_MODE_TRUE + + + +if test "$program_transform_name" = s,x,x,; then + program_transform_name= +else + # Double any \ or $. echo might interpret backslashes. + cat <<\EOF_SED > conftestsed +s,\\,\\\\,g; s,\$,$$,g +EOF_SED + program_transform_name="`echo $program_transform_name|sed -f conftestsed`" + rm -f conftestsed +fi +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" + +# sed with no file args requires a program. +test "$program_transform_name" = "" && program_transform_name="s,x,x," + +# Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1585: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="gcc" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +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 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1615: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_prog_rejected=no + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + break + fi + done + IFS="$ac_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 $# -gt 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 + set dummy "$ac_dir/$ac_word" "$@" + shift + ac_cv_prog_CC="$@" + fi +fi +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test -z "$CC"; then + case "`uname -s`" in + *win32* | *WIN32*) + # Extract the first word of "cl", so it can be a program name with args. +set dummy cl; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:1666: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_CC="cl" + break + fi + done + IFS="$ac_save_ifs" +fi +fi +CC="$ac_cv_prog_CC" +if test -n "$CC"; then + echo "$ac_t""$CC" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + ;; + esac + fi + test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } +fi + +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 +echo "configure:1698: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 + +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +cat > conftest.$ac_ext << EOF + +#line 1709 "configure" +#include "confdefs.h" + +main(){return(0);} +EOF +if { (eval echo configure:1714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + ac_cv_prog_cc_works=yes + # If we can't run a trivial program, we are probably using a cross compiler. + if (./conftest; exit) 2>/dev/null; then + ac_cv_prog_cc_cross=no + else + ac_cv_prog_cc_cross=yes + fi +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + ac_cv_prog_cc_works=no +fi +rm -fr conftest* +ac_ext=c +# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. +ac_cpp='$CPP $CPPFLAGS' +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' +ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' +cross_compiling=$ac_cv_prog_cc_cross + +echo "$ac_t""$ac_cv_prog_cc_works" 1>&6 +if test $ac_cv_prog_cc_works = no; then + { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } +fi +echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 +echo "configure:1740: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 +cross_compiling=$ac_cv_prog_cc_cross + +echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 +echo "configure:1745: checking whether we are using GNU C" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + ac_cv_prog_gcc=yes +else + ac_cv_prog_gcc=no +fi +fi + +echo "$ac_t""$ac_cv_prog_gcc" 1>&6 + +if test $ac_cv_prog_gcc = yes; then + GCC=yes +else + GCC= +fi + +ac_test_CFLAGS="${CFLAGS+set}" +ac_save_CFLAGS="$CFLAGS" +CFLAGS= +echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 +echo "configure:1773: checking whether ${CC-cc} accepts -g" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo 'void f(){}' > conftest.c +if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then + ac_cv_prog_cc_g=yes +else + ac_cv_prog_cc_g=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_prog_cc_g" 1>&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 + +echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6 +echo "configure:1805: checking for POSIXized ISC" >&5 +if test -d /etc/conf/kconfig.d && + grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1 +then + echo "$ac_t""yes" 1>&6 + ISC=yes # If later tests want to check for ISC. + cat >> confdefs.h <<\EOF +#define _POSIX_SOURCE 1 +EOF + + if test "$GCC" = yes; then + CC="$CC -posix" + else + CC="$CC -Xp" + fi +else + echo "$ac_t""no" 1>&6 + ISC= +fi + + + + +echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6 +echo "configure:1829: checking for ${CC-cc} option to accept ANSI C" >&5 +if eval "test \"`echo '$''{'am_cv_prog_cc_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + am_cv_prog_cc_stdc=no +ac_save_CC="$CC" +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + cat > conftest.$ac_ext < +#include +#include +#include +/* 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; +} +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; } +EOF +if { (eval echo configure:1882: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + am_cv_prog_cc_stdc="$ac_arg"; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done +CC="$ac_save_CC" + +fi + +if test -z "$am_cv_prog_cc_stdc"; then + echo "$ac_t""none needed" 1>&6 +else + echo "$ac_t""$am_cv_prog_cc_stdc" 1>&6 +fi +case "x$am_cv_prog_cc_stdc" in + x|xno) ;; + *) CC="$CC $am_cv_prog_cc_stdc" ;; +esac + +# 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 +# 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" +# ./install, which can be erroneously created by make from ./install.sh. +echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 +echo "configure:1917: checking for a BSD compatible install" >&5 +if test -z "$INSTALL"; then +if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" + for ac_dir in $PATH; do + # Account for people who put trailing slashes in PATH elements. + case "$ac_dir/" in + /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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 + if test -f $ac_dir/$ac_prog; then + if test $ac_prog = install && + grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + else + ac_cv_path_install="$ac_dir/$ac_prog -c" + break 2 + fi + fi + done + ;; + esac + done + IFS="$ac_save_IFS" + +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. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" + fi +fi +echo "$ac_t""$INSTALL" 1>&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_PROGRAM}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 +echo "configure:1970: checking whether ln -s works" >&5 +if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + rm -f conftestdata +if ln -s X conftestdata 2>/dev/null +then + rm -f conftestdata + ac_cv_prog_LN_S="ln -s" +else + ac_cv_prog_LN_S=ln +fi +fi +LN_S="$ac_cv_prog_LN_S" +if test "$ac_cv_prog_LN_S" = "ln -s"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + +echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 +echo "configure:1991: checking whether ${MAKE-make} sets \${MAKE}" >&5 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftestmake <<\EOF +all: + @echo 'ac_maketemp="${MAKE}"' +EOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftestmake +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$ac_t""yes" 1>&6 + SET_MAKE= +else + echo "$ac_t""no" 1>&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 +echo "configure:2018: checking how to run the C preprocessor" >&5 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then +if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + # This must be in double quotes, not single quotes, because CPP may get + # substituted into the Makefile and "${CC-cc}" will confuse make. + CPP="${CC-cc} -E" + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2039: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -E -traditional-cpp" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2056: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP="${CC-cc} -nologo -E" + cat > conftest.$ac_ext < +Syntax Error +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2073: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + : +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CPP=/lib/cpp +fi +rm -f conftest* +fi +rm -f conftest* +fi +rm -f conftest* + ac_cv_prog_CPP="$CPP" +fi + CPP="$ac_cv_prog_CPP" +else + ac_cv_prog_CPP="$CPP" +fi +echo "$ac_t""$CPP" 1>&6 + + + + test -n "$ACLOCAL_FLAGS" && ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS" + + for k in ac ; do ACLOCAL="$ACLOCAL -I $k" ; done + + +ALL_LINGUAS="cs de el es fr it ja ko nl pt_BR ru zh_CN.GB2312 zh_TW.Big5" +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:2106: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2119: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + 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 > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + 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 > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#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)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:2186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:2210: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:2264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for inline""... $ac_c" 1>&6 +echo "configure:2285: checking for inline" >&5 +if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_inline=$ac_kw; break +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 +fi +rm -f conftest* +done + +fi + +echo "$ac_t""$ac_cv_c_inline" 1>&6 +case "$ac_cv_c_inline" in + inline | yes) ;; + no) cat >> confdefs.h <<\EOF +#define inline +EOF + ;; + *) cat >> confdefs.h <&6 +echo "configure:2325: checking for off_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_off_t=yes +else + rm -rf conftest* + ac_cv_type_off_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_off_t" 1>&6 +if test $ac_cv_type_off_t = no; then + cat >> confdefs.h <<\EOF +#define off_t long +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:2358: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 +echo "configure:2393: checking for working alloca.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char *p = alloca(2 * sizeof(int)); +; return 0; } +EOF +if { (eval echo configure:2405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_header_alloca_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_alloca_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 +if test $ac_cv_header_alloca_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 +EOF + +fi + +echo $ac_n "checking for alloca""... $ac_c" 1>&6 +echo "configure:2426: checking for alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int main() { +char *p = (char *) alloca(1); +; return 0; } +EOF +if { (eval echo configure:2459: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_func_alloca_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_func_alloca_works=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 +if test $ac_cv_func_alloca_works = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF + +fi + +if test $ac_cv_func_alloca_works = no; then + # The SVR3 libPW and SVR4 libucb both contain incompatible functions + # that cause trouble. Some versions do not even contain alloca or + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + ALLOCA=alloca.${ac_objext} + cat >> confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF + + +echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 +echo "configure:2491: checking whether alloca needs Cray hooks" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5 | + egrep "webecray" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_os_cray=yes +else + rm -rf conftest* + ac_cv_os_cray=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_os_cray" 1>&6 +if test $ac_cv_os_cray = yes; then +for ac_func in _getb67 GETB67 getb67; do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2521: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2549: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <&6 +fi + +done +fi + +echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 +echo "configure:2576: checking stack direction for C alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat > conftest.$ac_ext < addr) ? 1 : -1; +} +main () +{ + exit (find_stack_direction() < 0); +} +EOF +if { (eval echo configure:2603: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_stack_direction=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_stack_direction=-1 +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 +cat >> confdefs.h <&6 +echo "configure:2628: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2638: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in getpagesize +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2667: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + +echo $ac_n "checking for working mmap""... $ac_c" 1>&6 +echo "configure:2720: checking for working mmap" >&5 +if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_func_mmap_fixed_mapped=no +else + cat > conftest.$ac_ext < +#include +#include + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef HAVE_UNISTD_H +# include +# endif + +/* Assume that all systems that can run configure have sys/param.h. */ +# ifndef HAVE_SYS_PARAM_H +# define HAVE_SYS_PARAM_H 1 +# endif + +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +#ifdef __cplusplus +extern "C" { void *malloc(unsigned); } +#else +char *malloc(); +#endif + +int +main() +{ + char *data, *data2, *data3; + int i, pagesize; + int fd; + + pagesize = getpagesize(); + + /* + * First, make a file with some known garbage in it. + */ + data = malloc(pagesize); + if (!data) + exit(1); + for (i = 0; i < pagesize; ++i) + *(data + i) = rand(); + umask(0); + fd = creat("conftestmmap", 0600); + if (fd < 0) + exit(1); + if (write(fd, data, pagesize) != pagesize) + exit(1); + close(fd); + + /* + * Next, try to mmap the file at a fixed address which + * already has something else allocated at it. If we can, + * also make sure that we see the same garbage. + */ + fd = open("conftestmmap", O_RDWR); + if (fd < 0) + exit(1); + data2 = malloc(2 * pagesize); + if (!data2) + exit(1); + data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); + if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + exit(1); + + /* + * Finally, make sure that changes to the mapped area + * do not percolate back to the file as seen by read(). + * (This is a bug on some variants of i386 svr4.0.) + */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = malloc(pagesize); + if (!data3) + exit(1); + if (read(fd, data3, pagesize) != pagesize) + exit(1); + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + exit(1); + close(fd); + unlink("conftestmmap"); + exit(0); +} + +EOF +if { (eval echo configure:2868: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_func_mmap_fixed_mapped=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_func_mmap_fixed_mapped=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_func_mmap_fixed_mapped" 1>&6 +if test $ac_cv_func_mmap_fixed_mapped = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_MMAP 1 +EOF + +fi + + + for ac_hdr in argz.h limits.h locale.h nl_types.h malloc.h string.h \ +unistd.h sys/param.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:2896: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:2906: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + for ac_func in getcwd munmap putenv setenv setlocale strchr strcasecmp \ +strdup __argz_count __argz_stringify __argz_next +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2936: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:2964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + + if test "${ac_cv_func_stpcpy+set}" != "set"; then + for ac_func in stpcpy +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:2993: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3021: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + fi + if test "${ac_cv_func_stpcpy}" = "yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_STPCPY 1 +EOF + + fi + + if test $ac_cv_header_locale_h = yes; then + echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6 +echo "configure:3055: checking for LC_MESSAGES" >&5 +if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +return LC_MESSAGES +; return 0; } +EOF +if { (eval echo configure:3067: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + am_cv_val_LC_MESSAGES=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + am_cv_val_LC_MESSAGES=no +fi +rm -f conftest* +fi + +echo "$ac_t""$am_cv_val_LC_MESSAGES" 1>&6 + if test $am_cv_val_LC_MESSAGES = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_LC_MESSAGES 1 +EOF + + fi + fi + echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6 +echo "configure:3088: checking whether NLS is requested" >&5 + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes +fi + + echo "$ac_t""$USE_NLS" 1>&6 + + + USE_INCLUDED_LIBINTL=no + + if test "$USE_NLS" = "yes"; then + cat >> confdefs.h <<\EOF +#define ENABLE_NLS 1 +EOF + + echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6 +echo "configure:3108: checking whether included gettext is requested" >&5 + # Check whether --with-included-gettext or --without-included-gettext was given. +if test "${with_included_gettext+set}" = set; then + withval="$with_included_gettext" + nls_cv_force_use_gnu_gettext=$withval +else + nls_cv_force_use_gnu_gettext=no +fi + + echo "$ac_t""$nls_cv_force_use_gnu_gettext" 1>&6 + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + nls_cv_header_intl= + nls_cv_header_libgt= + CATOBJEXT=NONE + + ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for libintl.h""... $ac_c" 1>&6 +echo "configure:3127: checking for libintl.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3137: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + echo $ac_n "checking for gettext in libc""... $ac_c" 1>&6 +echo "configure:3154: checking for gettext in libc" >&5 +if eval "test \"`echo '$''{'gt_cv_func_gettext_libc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +return (int) gettext ("") +; return 0; } +EOF +if { (eval echo configure:3166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + gt_cv_func_gettext_libc=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + gt_cv_func_gettext_libc=no +fi +rm -f conftest* +fi + +echo "$ac_t""$gt_cv_func_gettext_libc" 1>&6 + + if test "$gt_cv_func_gettext_libc" != "yes"; then + echo $ac_n "checking for bindtextdomain in -lintl""... $ac_c" 1>&6 +echo "configure:3182: checking for bindtextdomain in -lintl" >&5 +ac_lib_var=`echo intl'_'bindtextdomain | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lintl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + echo $ac_n "checking for gettext in libintl""... $ac_c" 1>&6 +echo "configure:3217: checking for gettext in libintl" >&5 +if eval "test \"`echo '$''{'gt_cv_func_gettext_libintl'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6 +echo "configure:3222: checking for gettext in -lintl" >&5 +ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lintl $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + gt_cv_func_gettext_libintl=yes +else + echo "$ac_t""no" 1>&6 +gt_cv_func_gettext_libintl=no +fi + +fi + +echo "$ac_t""$gt_cv_func_gettext_libintl" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + + if test "$gt_cv_func_gettext_libc" = "yes" \ + || test "$gt_cv_func_gettext_libintl" = "yes"; then + cat >> confdefs.h <<\EOF +#define HAVE_GETTEXT 1 +EOF + + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3280: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test -n "$MSGFMT"; then + echo "$ac_t""$MSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + if test "$MSGFMT" != "no"; then + for ac_func in dcgettext +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:3314: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3369: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_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 + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3405: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + CATOBJEXT=.gmo + DATADIRNAME=share +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + CATOBJEXT=.mo + DATADIRNAME=lib +fi +rm -f conftest* + INSTOBJEXT=.mo + fi + fi + +else + echo "$ac_t""no" 1>&6 +fi + + + if test "$CATOBJEXT" = "NONE"; then + echo $ac_n "checking whether catgets can be used""... $ac_c" 1>&6 +echo "configure:3468: checking whether catgets can be used" >&5 + # Check whether --with-catgets or --without-catgets was given. +if test "${with_catgets+set}" = set; then + withval="$with_catgets" + nls_cv_use_catgets=$withval +else + nls_cv_use_catgets=no +fi + + echo "$ac_t""$nls_cv_use_catgets" 1>&6 + + if test "$nls_cv_use_catgets" = "yes"; then + echo $ac_n "checking for main in -li""... $ac_c" 1>&6 +echo "configure:3481: checking for main in -li" >&5 +ac_lib_var=`echo i'_'main | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-li $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo i | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + echo $ac_n "checking for catgets""... $ac_c" 1>&6 +echo "configure:3524: checking for catgets" >&5 +if eval "test \"`echo '$''{'ac_cv_func_catgets'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char catgets(); + +int main() { + +/* 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_catgets) || defined (__stub___catgets) +choke me +#else +catgets(); +#endif + +; return 0; } +EOF +if { (eval echo configure:3552: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_catgets=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_catgets=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'catgets`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_CATGETS 1 +EOF + + INTLOBJS="\$(CATOBJS)" + # Extract the first word of "gencat", so it can be a program name with args. +set dummy gencat; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3574: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GENCAT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GENCAT" in + /*) + ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GENCAT="$GENCAT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GENCAT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GENCAT" && ac_cv_path_GENCAT="no" + ;; +esac +fi +GENCAT="$ac_cv_path_GENCAT" +if test -n "$GENCAT"; then + echo "$ac_t""$GENCAT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + if test "$GENCAT" != "no"; then + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3610: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + if test "$GMSGFMT" = "no"; then + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3647: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="no" + ;; +esac +fi +GMSGFMT="$ac_cv_path_GMSGFMT" +if test -n "$GMSGFMT"; then + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + fi + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3682: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.cat + INSTOBJEXT=.cat + DATADIRNAME=lib + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi +else + echo "$ac_t""no" 1>&6 +fi + + fi + fi + + if test "$CATOBJEXT" = "NONE"; then + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + INTLOBJS="\$(GETTOBJS)" + # Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3740: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$MSGFMT" in + /*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then + ac_cv_path_MSGFMT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="msgfmt" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test -n "$MSGFMT"; then + echo "$ac_t""$MSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3774: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GMSGFMT" in + /*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GMSGFMT="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_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 + echo "$ac_t""$GMSGFMT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + # Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:3810: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$XGETTEXT" in + /*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word" + break + fi + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test -n "$XGETTEXT"; then + echo "$ac_t""$XGETTEXT" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + + USE_INCLUDED_LIBINTL=yes + CATOBJEXT=.gmo + INSTOBJEXT=.mo + DATADIRNAME=share + INTLDEPS='$(top_builddir)/intl/libintl.a' + INTLLIBS=$INTLDEPS + LIBS=`echo $LIBS | sed -e 's/-lintl//'` + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header /dev/null 2> /dev/null; then + : ; + else + echo "$ac_t""found xgettext program is not GNU xgettext; ignore it" 1>&6 + XGETTEXT=":" + fi + fi + + # We need to process the po/ directory. + POSUB=po + else + DATADIRNAME=share + nls_cv_header_intl=intl/libintl.h + nls_cv_header_libgt=intl/libgettext.h + fi + + + + + # If this is used in GNU gettext we have to set USE_NLS to `yes' + # because some of the sources are only built for this goal. + if test "$PACKAGE" = gettext; then + USE_NLS=yes + USE_INCLUDED_LIBINTL=yes + fi + + for lang in $ALL_LINGUAS; do + GMOFILES="$GMOFILES $lang.gmo" + POFILES="$POFILES $lang.po" + done + + + + + + + + + + + + + + + if test "x$CATOBJEXT" != "x"; then + if test "x$ALL_LINGUAS" = "x"; then + LINGUAS= + else + echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6 +echo "configure:3903: checking for catalogs to be installed" >&5 + NEW_LINGUAS= + for lang in ${LINGUAS=$ALL_LINGUAS}; do + case "$ALL_LINGUAS" in + *$lang*) NEW_LINGUAS="$NEW_LINGUAS $lang" ;; + esac + done + LINGUAS=$NEW_LINGUAS + echo "$ac_t""$LINGUAS" 1>&6 + fi + + if test -n "$LINGUAS"; then + for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done + fi + fi + + if test $ac_cv_header_locale_h = yes; then + INCLUDE_LOCALE_H="#include " + else + INCLUDE_LOCALE_H="\ +/* The system does not provide the header . Take care yourself. */" + fi + + + test -d intl || mkdir intl + if test "$CATOBJEXT" = ".cat"; then + ac_safe=`echo "linux/version.h" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for linux/version.h""... $ac_c" 1>&6 +echo "configure:3931: checking for linux/version.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:3941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + msgformat=linux +else + echo "$ac_t""no" 1>&6 +msgformat=xopen +fi + + + sed -e '/^#/d' $srcdir/intl/$msgformat-msg.sed > intl/po2msg.sed + fi + sed -e '/^#.*[^\\]$/d' -e '/^#$/d' \ + $srcdir/intl/po2tbl.sed.in > intl/po2tbl.sed + + if test "$PACKAGE" = "gettext"; then + GT_NO="#NO#" + GT_YES= + else + GT_NO= + GT_YES="#YES#" + fi + + + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + l= + + + test -d po || mkdir po + if test "x$srcdir" != "x."; then + if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then + posrcprefix="$srcdir/" + else + posrcprefix="../$srcdir/" + fi + else + posrcprefix="../" + fi + rm -f po/POTFILES + sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ + < $srcdir/po/POTFILES.in > po/POTFILES + +localedir='${prefix}/${DATADIRNAME}/locale' + + +manualdir='${prefix}/${DATADIRNAME}/${PACKAGE}/manual' + + +# Check whether --with-glib-prefix or --without-glib-prefix was given. +if test "${with_glib_prefix+set}" = set; then + withval="$with_glib_prefix" + glib_config_prefix="$withval" +else + glib_config_prefix="" +fi + +# Check whether --with-glib-exec-prefix or --without-glib-exec-prefix was given. +if test "${with_glib_exec_prefix+set}" = set; then + withval="$with_glib_exec_prefix" + glib_config_exec_prefix="$withval" +else + glib_config_exec_prefix="" +fi + +# Check whether --enable-glibtest or --disable-glibtest was given. +if test "${enable_glibtest+set}" = set; then + enableval="$enable_glibtest" + : +else + enable_glibtest=yes +fi + + + if test x$glib_config_exec_prefix != x ; then + glib_config_args="$glib_config_args --exec-prefix=$glib_config_exec_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_exec_prefix/bin/glib-config + fi + fi + if test x$glib_config_prefix != x ; then + glib_config_args="$glib_config_args --prefix=$glib_config_prefix" + if test x${GLIB_CONFIG+set} != xset ; then + GLIB_CONFIG=$glib_config_prefix/bin/glib-config + fi + fi + + for module in . gthread + do + case "$module" in + gmodule) + glib_config_args="$glib_config_args gmodule" + ;; + gthread) + glib_config_args="$glib_config_args gthread" + ;; + esac + done + + # Extract the first word of "glib-config", so it can be a program name with args. +set dummy glib-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:4064: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GLIB_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GLIB_CONFIG" in + /*) + ac_cv_path_GLIB_CONFIG="$GLIB_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GLIB_CONFIG="$GLIB_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GLIB_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GLIB_CONFIG" && ac_cv_path_GLIB_CONFIG="no" + ;; +esac +fi +GLIB_CONFIG="$ac_cv_path_GLIB_CONFIG" +if test -n "$GLIB_CONFIG"; then + echo "$ac_t""$GLIB_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + min_glib_version=1.2.6 + echo $ac_n "checking for GLIB - version >= $min_glib_version""... $ac_c" 1>&6 +echo "configure:4099: checking for GLIB - version >= $min_glib_version" >&5 + no_glib="" + if test "$GLIB_CONFIG" = "no" ; then + no_glib=yes + else + GLIB_CFLAGS=`$GLIB_CONFIG $glib_config_args --cflags` + GLIB_LIBS=`$GLIB_CONFIG $glib_config_args --libs` + glib_config_major_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + glib_config_minor_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + glib_config_micro_version=`$GLIB_CONFIG $glib_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_glibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$GLIB_LIBS $LIBS" + rm -f conf.glibtest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat > conftest.$ac_ext < +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.glibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_glib_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_glib_version"); + exit(1); + } + + if ((glib_major_version != $glib_config_major_version) || + (glib_minor_version != $glib_config_minor_version) || + (glib_micro_version != $glib_config_micro_version)) + { + printf("\n*** 'glib-config --version' returned %d.%d.%d, but GLIB (%d.%d.%d)\n", + $glib_config_major_version, $glib_config_minor_version, $glib_config_micro_version, + glib_major_version, glib_minor_version, glib_micro_version); + printf ("*** was found! If glib-config was correct, then it is best\n"); + printf ("*** to remove the old version of GLIB. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If glib-config was wrong, set the environment variable GLIB_CONFIG\n"); + printf("*** to point to the correct copy of glib-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } + else if ((glib_major_version != GLIB_MAJOR_VERSION) || + (glib_minor_version != GLIB_MINOR_VERSION) || + (glib_micro_version != GLIB_MICRO_VERSION)) + { + printf("*** GLIB header files (version %d.%d.%d) do not match\n", + GLIB_MAJOR_VERSION, GLIB_MINOR_VERSION, GLIB_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + glib_major_version, glib_minor_version, glib_micro_version); + } + else + { + if ((glib_major_version > major) || + ((glib_major_version == major) && (glib_minor_version > minor)) || + ((glib_major_version == major) && (glib_minor_version == minor) && (glib_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GLIB (%d.%d.%d) was found.\n", + glib_major_version, glib_minor_version, glib_micro_version); + printf("*** You need a version of GLIB newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GLIB is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the glib-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GLIB, but you can also set the GLIB_CONFIG environment to point to the\n"); + printf("*** correct copy of glib-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} + +EOF +if { (eval echo configure:4198: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + no_glib=yes +fi +rm -fr conftest* +fi + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_glib" = x ; then + echo "$ac_t""yes" 1>&6 + : + else + echo "$ac_t""no" 1>&6 + if test "$GLIB_CONFIG" = "no" ; then + echo "*** The glib-config script installed by GLIB could not be found" + echo "*** If GLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GLIB_CONFIG environment variable to the" + echo "*** full path to glib-config." + else + if test -f conf.glibtest ; then + : + else + echo "*** Could not run GLIB test program, checking why..." + CFLAGS="$CFLAGS $GLIB_CFLAGS" + LIBS="$LIBS $GLIB_LIBS" + cat > conftest.$ac_ext < +#include + +int main() { + return ((glib_major_version) || (glib_minor_version) || (glib_micro_version)); +; return 0; } +EOF +if { (eval echo configure:4242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GLIB or finding the wrong" + echo "*** version of GLIB. If it is not finding GLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" + echo "***" + echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" + echo "*** came with the system with the command" + echo "***" + echo "*** rpm --erase --nodeps gtk gtk-devel" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GLIB was incorrectly installed" + echo "*** or that you have moved GLIB since it was installed. In the latter case, you" + echo "*** may want to edit the glib-config script: $GLIB_CONFIG" +fi +rm -f conftest* + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GLIB_CFLAGS="" + GLIB_LIBS="" + { echo "configure: error: Test for GLIB failed. See the file 'INSTALL' for help." 1>&2; exit 1; } + fi + + + rm -f conf.glibtest + +# Check whether --with-gtk-prefix or --without-gtk-prefix was given. +if test "${with_gtk_prefix+set}" = set; then + withval="$with_gtk_prefix" + gtk_config_prefix="$withval" +else + gtk_config_prefix="" +fi + +# Check whether --with-gtk-exec-prefix or --without-gtk-exec-prefix was given. +if test "${with_gtk_exec_prefix+set}" = set; then + withval="$with_gtk_exec_prefix" + gtk_config_exec_prefix="$withval" +else + gtk_config_exec_prefix="" +fi + +# Check whether --enable-gtktest or --disable-gtktest was given. +if test "${enable_gtktest+set}" = set; then + enableval="$enable_gtktest" + : +else + enable_gtktest=yes +fi + + + for module in . + do + case "$module" in + gthread) + gtk_config_args="$gtk_config_args gthread" + ;; + esac + done + + if test x$gtk_config_exec_prefix != x ; then + gtk_config_args="$gtk_config_args --exec-prefix=$gtk_config_exec_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_exec_prefix/bin/gtk-config + fi + fi + if test x$gtk_config_prefix != x ; then + gtk_config_args="$gtk_config_args --prefix=$gtk_config_prefix" + if test x${GTK_CONFIG+set} != xset ; then + GTK_CONFIG=$gtk_config_prefix/bin/gtk-config + fi + fi + + # Extract the first word of "gtk-config", so it can be a program name with args. +set dummy gtk-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:4330: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GTK_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GTK_CONFIG" in + /*) + ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GTK_CONFIG="$GTK_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GTK_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GTK_CONFIG" && ac_cv_path_GTK_CONFIG="no" + ;; +esac +fi +GTK_CONFIG="$ac_cv_path_GTK_CONFIG" +if test -n "$GTK_CONFIG"; then + echo "$ac_t""$GTK_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + min_gtk_version=1.2.6 + echo $ac_n "checking for GTK - version >= $min_gtk_version""... $ac_c" 1>&6 +echo "configure:4365: checking for GTK - version >= $min_gtk_version" >&5 + no_gtk="" + if test "$GTK_CONFIG" = "no" ; then + no_gtk=yes + else + GTK_CFLAGS=`$GTK_CONFIG $gtk_config_args --cflags` + GTK_LIBS=`$GTK_CONFIG $gtk_config_args --libs` + gtk_config_major_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + gtk_config_minor_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + gtk_config_micro_version=`$GTK_CONFIG $gtk_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_gtktest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$GTK_LIBS $LIBS" + rm -f conf.gtktest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat > conftest.$ac_ext < +#include +#include + +int +main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gtktest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_gtk_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gtk_version"); + exit(1); + } + + if ((gtk_major_version != $gtk_config_major_version) || + (gtk_minor_version != $gtk_config_minor_version) || + (gtk_micro_version != $gtk_config_micro_version)) + { + printf("\n*** 'gtk-config --version' returned %d.%d.%d, but GTK+ (%d.%d.%d)\n", + $gtk_config_major_version, $gtk_config_minor_version, $gtk_config_micro_version, + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf ("*** was found! If gtk-config was correct, then it is best\n"); + printf ("*** to remove the old version of GTK+. You may also be able to fix the error\n"); + printf("*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n"); + printf("*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n"); + printf("*** required on your system.\n"); + printf("*** If gtk-config was wrong, set the environment variable GTK_CONFIG\n"); + printf("*** to point to the correct copy of gtk-config, and remove the file config.cache\n"); + printf("*** before re-running configure\n"); + } +#if defined (GTK_MAJOR_VERSION) && defined (GTK_MINOR_VERSION) && defined (GTK_MICRO_VERSION) + else if ((gtk_major_version != GTK_MAJOR_VERSION) || + (gtk_minor_version != GTK_MINOR_VERSION) || + (gtk_micro_version != GTK_MICRO_VERSION)) + { + printf("*** GTK+ header files (version %d.%d.%d) do not match\n", + GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); + printf("*** library (version %d.%d.%d)\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + } +#endif /* defined (GTK_MAJOR_VERSION) ... */ + else + { + if ((gtk_major_version > major) || + ((gtk_major_version == major) && (gtk_minor_version > minor)) || + ((gtk_major_version == major) && (gtk_minor_version == minor) && (gtk_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** An old version of GTK+ (%d.%d.%d) was found.\n", + gtk_major_version, gtk_minor_version, gtk_micro_version); + printf("*** You need a version of GTK+ newer than %d.%d.%d. The latest version of\n", + major, minor, micro); + printf("*** GTK+ is always available from ftp://ftp.gtk.org.\n"); + printf("***\n"); + printf("*** If you have already installed a sufficiently new version, this error\n"); + printf("*** probably means that the wrong copy of the gtk-config shell script is\n"); + printf("*** being found. The easiest way to fix this is to remove the old version\n"); + printf("*** of GTK+, but you can also set the GTK_CONFIG environment to point to the\n"); + printf("*** correct copy of gtk-config. (In this case, you will have to\n"); + printf("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); + printf("*** so that the correct libraries are found at run-time))\n"); + } + } + return 1; +} + +EOF +if { (eval echo configure:4466: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + no_gtk=yes +fi +rm -fr conftest* +fi + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gtk" = x ; then + echo "$ac_t""yes" 1>&6 + : + else + echo "$ac_t""no" 1>&6 + if test "$GTK_CONFIG" = "no" ; then + echo "*** The gtk-config script installed by GTK could not be found" + echo "*** If GTK was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GTK_CONFIG environment variable to the" + echo "*** full path to gtk-config." + else + if test -f conf.gtktest ; then + : + else + echo "*** Could not run GTK test program, checking why..." + CFLAGS="$CFLAGS $GTK_CFLAGS" + LIBS="$LIBS $GTK_LIBS" + cat > conftest.$ac_ext < +#include + +int main() { + return ((gtk_major_version) || (gtk_minor_version) || (gtk_micro_version)); +; return 0; } +EOF +if { (eval echo configure:4510: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GTK or finding the wrong" + echo "*** version of GTK. If it is not finding GTK, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" + echo "***" + echo "*** If you have a RedHat 5.0 system, you should remove the GTK package that" + echo "*** came with the system with the command" + echo "***" + echo "*** rpm --erase --nodeps gtk gtk-devel" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GTK was incorrectly installed" + echo "*** or that you have moved GTK since it was installed. In the latter case, you" + echo "*** may want to edit the gtk-config script: $GTK_CONFIG" +fi +rm -f conftest* + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GTK_CFLAGS="" + GTK_LIBS="" + { echo "configure: error: Test for GTK failed. See the file 'INSTALL' for help." 1>&2; exit 1; } + fi + + + rm -f conf.gtktest + + +# Check whether --enable-gdk-pixbuf or --disable-gdk-pixbuf was given. +if test "${enable_gdk_pixbuf+set}" = set; then + enableval="$enable_gdk_pixbuf" + ac_cv_disable_gdk_pixbuf=disable +else + ac_cv_disable_gdk_pixbuf=no +fi + +# Check whether --enable-imlib or --disable-imlib was given. +if test "${enable_imlib+set}" = set; then + enableval="$enable_imlib" + ac_cv_disable_imlib=disable +else + ac_cv_disable_imlib=no +fi + + +if test "$ac_cv_disable_gdk_pixbuf" = no; then + # Check whether --with-gdk-pixbuf-prefix or --without-gdk-pixbuf-prefix was given. +if test "${with_gdk_pixbuf_prefix+set}" = set; then + withval="$with_gdk_pixbuf_prefix" + gdk_pixbuf_prefix="$withval" +else + gdk_pixbuf_prefix="" +fi + +# Check whether --with-gdk-pixbuf-exec-prefix or --without-gdk-pixbuf-exec-prefix was given. +if test "${with_gdk_pixbuf_exec_prefix+set}" = set; then + withval="$with_gdk_pixbuf_exec_prefix" + gdk_pixbuf_exec_prefix="$withval" +else + gdk_pixbuf_exec_prefix="" +fi + +# Check whether --enable-gdk_pixbuftest or --disable-gdk_pixbuftest was given. +if test "${enable_gdk_pixbuftest+set}" = set; then + enableval="$enable_gdk_pixbuftest" + : +else + enable_gdk_pixbuftest=yes +fi + + + if test x$gdk_pixbuf_exec_prefix != x ; then + gdk_pixbuf_args="$gdk_pixbuf_args --exec-prefix=$gdk_pixbuf_exec_prefix" + if test x${GDK_PIXBUF_CONFIG+set} = xset ; then + GDK_PIXBUF_CONFIG=$gdk_pixbuf_exec_prefix/gdk-pixbuf-config + fi + fi + if test x$gdk_pixbuf_prefix != x ; then + gdk_pixbuf_args="$gdk_pixbuf_args --prefix=$gdk_pixbuf_prefix" + if test x${GDK_PIXBUF_CONFIG+set} = xset ; then + GDK_PIXBUF_CONFIG=$gdk_pixbuf_prefix/bin/gdk-pixbuf-config + fi + fi + + # Extract the first word of "gdk-pixbuf-config", so it can be a program name with args. +set dummy gdk-pixbuf-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:4608: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GDK_PIXBUF_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GDK_PIXBUF_CONFIG" in + /*) + ac_cv_path_GDK_PIXBUF_CONFIG="$GDK_PIXBUF_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GDK_PIXBUF_CONFIG="$GDK_PIXBUF_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GDK_PIXBUF_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GDK_PIXBUF_CONFIG" && ac_cv_path_GDK_PIXBUF_CONFIG="no" + ;; +esac +fi +GDK_PIXBUF_CONFIG="$ac_cv_path_GDK_PIXBUF_CONFIG" +if test -n "$GDK_PIXBUF_CONFIG"; then + echo "$ac_t""$GDK_PIXBUF_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + min_gdk_pixbuf_version=0.8.0 + echo $ac_n "checking for GDK_PIXBUF - version >= $min_gdk_pixbuf_version""... $ac_c" 1>&6 +echo "configure:4643: checking for GDK_PIXBUF - version >= $min_gdk_pixbuf_version" >&5 + no_gdk_pixbuf="" + if test "$GDK_PIXBUF_CONFIG" = "no" ; then + no_gdk_pixbuf=yes + else + GDK_PIXBUF_CFLAGS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --cflags` + GDK_PIXBUF_LIBS=`$GDK_PIXBUF_CONFIG $gdk_pixbufconf_args --libs` + + gdk_pixbuf_major_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + gdk_pixbuf_minor_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + gdk_pixbuf_micro_version=`$GDK_PIXBUF_CONFIG $gdk_pixbuf_config_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` + if test "x$enable_gdk_pixbuftest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" + LIBS="$LIBS $GDK_PIXBUF_LIBS" + rm -f conf.gdk_pixbuftest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat > conftest.$ac_ext < +#include +#include +#include + +char* +my_strdup (char *str) +{ + char *new_str; + + if (str) + { + new_str = malloc ((strlen (str) + 1) * sizeof(char)); + strcpy (new_str, str); + } + else + new_str = NULL; + + return new_str; +} + +int main () +{ + int major, minor, micro; + char *tmp_version; + + system ("touch conf.gdk_pixbuftest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = my_strdup("$min_gdk_pixbuf_version"); + if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { + printf("%s, bad version string\n", "$min_gdk_pixbuf_version"); + exit(1); + } + + if (($gdk_pixbuf_major_version > major) || + (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version > minor)) || + (($gdk_pixbuf_major_version == major) && ($gdk_pixbuf_minor_version == minor) && ($gdk_pixbuf_micro_version >= micro))) + { + return 0; + } + else + { + printf("\n*** 'gdk-pixbuf-config --version' returned %d.%d.%d, but the minimum version\n", $gdk_pixbuf_major_version, $gdk_pixbuf_minor_version, $gdk_pixbuf_micro_version); + printf("*** of GDK_PIXBUF required is %d.%d.%d. If gdk-pixbuf-config is correct, then it is\n", major, minor, micro); + printf("*** best to upgrade to the required version.\n"); + printf("*** If gdk-pixbuf-config was wrong, set the environment variable GDK_PIXBUF_CONFIG\n"); + printf("*** to point to the correct copy of gdk-pixbuf-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + + +EOF +if { (eval echo configure:4725: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + no_gdk_pixbuf=yes +fi +rm -fr conftest* +fi + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gdk_pixbuf" = x ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_GDK_PIXBUF 1 +EOF + + else + echo "$ac_t""no" 1>&6 + if test "$GDK_PIXBUF_CONFIG" = "no" ; then + echo "*** The gdk-pixbuf-config script installed by GDK_PIXBUF could not be found" + echo "*** If GDK_PIXBUF was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GDK_PIXBUF_CONFIG environment variable to the" + echo "*** full path to gdk-pixbuf-config." + else + if test -f conf.gdk_pixbuftest ; then + : + else + echo "*** Could not run GDK_PIXBUF test program, checking why..." + CFLAGS="$CFLAGS $GDK_PIXBUF_CFLAGS" + LIBS="$LIBS $GDK_PIXBUF_LIBS" + cat > conftest.$ac_ext < +#include + +int main() { + return 0; +; return 0; } +EOF +if { (eval echo configure:4772: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding GDK_PIXBUF or finding the wrong" + echo "*** version of GDK_PIXBUF. If it is not finding GDK_PIXBUF, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means GDK_PIXBUF was incorrectly installed" + echo "*** or that you have moved GDK_PIXBUF since it was installed. In the latter case, you" + echo "*** may want to edit the gdk-pixbuf-config script: $GDK_PIXBUF_CONFIG" +fi +rm -f conftest* + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GDK_PIXBUF_CFLAGS="" + GDK_PIXBUF_LIBS="" + ac_cv_disable_gdk_pixbuf=disable + fi + + + rm -f conf.gdk_pixbuftest + +fi +if test "$ac_cv_disable_gdk_pixbuf" = disable -a "$ac_cv_disable_imlib" = no; then + # Check whether --with-imlib-prefix or --without-imlib-prefix was given. +if test "${with_imlib_prefix+set}" = set; then + withval="$with_imlib_prefix" + imlib_prefix="$withval" +else + imlib_prefix="" +fi + +# Check whether --with-imlib-exec-prefix or --without-imlib-exec-prefix was given. +if test "${with_imlib_exec_prefix+set}" = set; then + withval="$with_imlib_exec_prefix" + imlib_exec_prefix="$withval" +else + imlib_exec_prefix="" +fi + +# Check whether --enable-imlibtest or --disable-imlibtest was given. +if test "${enable_imlibtest+set}" = set; then + enableval="$enable_imlibtest" + : +else + enable_imlibtest=yes +fi + + + if test x$imlib_exec_prefix != x ; then + imlib_args="$imlib_args --exec-prefix=$imlib_exec_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_exec_prefix/bin/imlib-config + fi + fi + if test x$imlib_prefix != x ; then + imlib_args="$imlib_args --prefix=$imlib_prefix" + if test x${IMLIB_CONFIG+set} != xset ; then + IMLIB_CONFIG=$imlib_prefix/bin/imlib-config + fi + fi + + # Extract the first word of "imlib-config", so it can be a program name with args. +set dummy imlib-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:4848: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_IMLIB_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$IMLIB_CONFIG" in + /*) + ac_cv_path_IMLIB_CONFIG="$IMLIB_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_IMLIB_CONFIG="$IMLIB_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_IMLIB_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_IMLIB_CONFIG" && ac_cv_path_IMLIB_CONFIG="no" + ;; +esac +fi +IMLIB_CONFIG="$ac_cv_path_IMLIB_CONFIG" +if test -n "$IMLIB_CONFIG"; then + echo "$ac_t""$IMLIB_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + min_imlib_version=1.9 + echo $ac_n "checking for IMLIB - version >= $min_imlib_version""... $ac_c" 1>&6 +echo "configure:4883: checking for IMLIB - version >= $min_imlib_version" >&5 + no_imlib="" + if test "$IMLIB_CONFIG" = "no" ; then + no_imlib=yes + else + GDK_IMLIB_CFLAGS=`$IMLIB_CONFIG $imlibconf_args --cflags-gdk` + GDK_IMLIB_LIBS=`$IMLIB_CONFIG $imlibconf_args --libs-gdk` + + imlib_major_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` + imlib_minor_version=`$IMLIB_CONFIG $imlib_args --version | \ + sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` + if test "x$enable_imlibtest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" + rm -f conf.imlibtest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat > conftest.$ac_ext < +#include +#include + +int main () +{ + int major, minor; + char *tmp_version; + + system ("touch conf.gdkimlibtest"); + + /* HP/UX 9 (%@#!) writes to sscanf strings */ + tmp_version = g_strdup("$min_imlib_version"); + if (sscanf(tmp_version, "%d.%d", &major, &minor) != 2) { + printf("%s, bad version string\n", "$min_imlib_version"); + exit(1); + } + + if (($imlib_major_version > major) || + (($imlib_major_version == major) && ($imlib_minor_version >= minor))) + { + return 0; + } + else + { + printf("\n*** 'imlib-config --version' returned %d.%d, but the minimum version\n", $imlib_major_version, $imlib_minor_version); + printf("*** of IMLIB required is %d.%d. If imlib-config is correct, then it is\n", major, minor); + printf("*** best to upgrade to the required version.\n"); + printf("*** If imlib-config was wrong, set the environment variable IMLIB_CONFIG\n"); + printf("*** to point to the correct copy of imlib-config, and remove the file\n"); + printf("*** config.cache before re-running configure\n"); + return 1; + } +} + + +EOF +if { (eval echo configure:4945: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + no_imlib=yes +fi +rm -fr conftest* +fi + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_imlib" = x ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define HAVE_GDK_IMLIB 1 +EOF + + else + echo "$ac_t""no" 1>&6 + if test "$IMLIB_CONFIG" = "no" ; then + echo "*** The imlib-config script installed by IMLIB could not be found" + echo "*** If IMLIB was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the IMLIB_CONFIG environment variable to the" + echo "*** full path to imlib-config." + else + if test -f conf.gdkimlibtest ; then + : + else + echo "*** Could not run IMLIB test program, checking why..." + CFLAGS="$CFLAGS $GDK_IMLIB_CFLAGS" + LIBS="$LIBS $GDK_IMLIB_LIBS" + cat > conftest.$ac_ext < +#include + +int main() { + return 0; +; return 0; } +EOF +if { (eval echo configure:4992: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding IMLIB or finding the wrong" + echo "*** version of IMLIB. If it is not finding IMLIB, you'll need to set your" + echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" + echo "*** to the installed location Also, make sure you have run ldconfig if that" + echo "*** is required on your system" + echo "***" + echo "*** If you have an old version installed, it is best to remove it, although" + echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured. This usually means IMLIB was incorrectly installed" + echo "*** or that you have moved IMLIB since it was installed. In the latter case, you" + echo "*** may want to edit the imlib-config script: $IMLIB_CONFIG" +fi +rm -f conftest* + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + IMLIB_CFLAGS="" + IMLIB_LIBS="" + ac_cv_disable_imlib=disable + fi + + + rm -f conf.gdkimlibtest + +fi +if test "$ac_cv_disable_gdk_pixbuf" = disable -a "$ac_cv_disable_imlib" = disable; then + echo "configure: warning: *** Built-in image view will not be supported ***" 1>&2 +fi + +# Check whether --enable-gpgme or --disable-gpgme was given. +if test "${enable_gpgme+set}" = set; then + enableval="$enable_gpgme" + ac_cv_enable_gpgme=$enableval +else + ac_cv_enable_gpgme=no +fi + +if test $ac_cv_enable_gpgme = yes; then + # Check whether --with-gpgme-prefix or --without-gpgme-prefix was given. +if test "${with_gpgme_prefix+set}" = set; then + withval="$with_gpgme_prefix" + gpgme_config_prefix="$withval" +else + gpgme_config_prefix="" +fi + + # Check whether --enable-gpgmetest or --disable-gpgmetest was given. +if test "${enable_gpgmetest+set}" = set; then + enableval="$enable_gpgmetest" + : +else + enable_gpgmetest=yes +fi + + + if test x$gpgme_config_prefix != x ; then + gpgme_config_args="$gpgme_config_args --prefix=$gpgme_config_prefix" + if test x${GPGME_CONFIG+set} != xset ; then + GPGME_CONFIG=$gpgme_config_prefix/bin/gpgme-config + fi + fi + + # Extract the first word of "gpgme-config", so it can be a program name with args. +set dummy gpgme-config; ac_word=$2 +echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 +echo "configure:5066: checking for $ac_word" >&5 +if eval "test \"`echo '$''{'ac_cv_path_GPGME_CONFIG'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + case "$GPGME_CONFIG" in + /*) + ac_cv_path_GPGME_CONFIG="$GPGME_CONFIG" # Let the user override the test with a path. + ;; + ?:/*) + ac_cv_path_GPGME_CONFIG="$GPGME_CONFIG" # Let the user override the test with a dos path. + ;; + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_path_GPGME_CONFIG="$ac_dir/$ac_word" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_path_GPGME_CONFIG" && ac_cv_path_GPGME_CONFIG="no" + ;; +esac +fi +GPGME_CONFIG="$ac_cv_path_GPGME_CONFIG" +if test -n "$GPGME_CONFIG"; then + echo "$ac_t""$GPGME_CONFIG" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi + + min_gpgme_version=0.1.4 + echo $ac_n "checking for gpgme - version >= $min_gpgme_version""... $ac_c" 1>&6 +echo "configure:5101: checking for gpgme - version >= $min_gpgme_version" >&5 + no_gpgme="" + if test "$GPGME_CONFIG" = "no" ; then + no_gpgme=yes + else + GPGME_CFLAGS=`$GPGME_CONFIG $gpgme_config_args --cflags` + GPGME_LIBS=`$GPGME_CONFIG $gpgme_config_args --libs` + gpgme_config_version=`$GPGME_CONFIG $gpgme_config_args --version` + if test "x$enable_gpgmetest" = "xyes" ; then + ac_save_CFLAGS="$CFLAGS" + ac_save_LIBS="$LIBS" + CFLAGS="$CFLAGS $GPGME_CFLAGS" + LIBS="$LIBS $GPGME_LIBS" + rm -f conf.gpgmetest + if test "$cross_compiling" = yes; then + echo $ac_n "cross compiling; assumed OK... $ac_c" +else + cat > conftest.$ac_ext < +#include +#include +#include + +int +main () +{ + system ("touch conf.gpgmetest"); + + if( strcmp( gpgme_check_version(NULL), "$gpgme_config_version" ) ) + { + printf("\n" +"*** 'gpgme-config --version' returned %s, but GPGME (%s) was found!\n", + "$gpgme_config_version", gpgme_check_version(NULL) ); + printf( +"*** If gpgme-config was correct, then it is best to remove the old\n" +"*** version of GPGME. You may also be able to fix the error\n" +"*** by modifying your LD_LIBRARY_PATH enviroment variable, or by editing\n" +"*** /etc/ld.so.conf. Make sure you have run ldconfig if that is\n" +"*** required on your system.\n" +"*** If gpgme-config was wrong, set the environment variable GPGME_CONFIG\n" +"*** to point to the correct copy of gpgme-config, \n" +"*** and remove the file config.cache before re-running configure\n" + ); + } + else if ( strcmp(gpgme_check_version(NULL), GPGME_VERSION ) ) + { + printf("\n*** GPGME header file (version %s) does not match\n", + GPGME_VERSION); + printf("*** library (version %s)\n", gpgme_check_version(NULL) ); + } + else + { + if ( gpgme_check_version( "$min_gpgme_version" ) ) + return 0; + printf("no\n" +"*** An old version of GPGME (%s) was found.\n", gpgme_check_version(NULL) ); + printf( +"*** You need a version of GPGME newer than %s.\n", "$min_gpgme_version" ); + printf( +"*** The latest version of GPGME is always available at\n" +"*** ftp://ftp.gnupg.org/pub/gcrypt/alpha/gpgme/\n" +"*** \n" +"*** If you have already installed a sufficiently new version, this error\n" +"*** probably means that the wrong copy of the gpgme-config shell script is\n" +"*** being found. The easiest way to fix this is to remove the old version\n" +"*** of GPGME, but you can also set the GPGME_CONFIG environment to point to\n" +"*** the correct copy of gpgme-config. (In this case, you will have to\n" +"*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n" +"*** so that the correct libraries are found at run-time).\n" + ); + } + return 1; +} + +EOF +if { (eval echo configure:5179: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + no_gpgme=yes +fi +rm -fr conftest* +fi + + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + if test "x$no_gpgme" = x ; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <<\EOF +#define USE_GPGME 1 +EOF + + else + if test -f conf.gpgmetest ; then + : + else + echo "$ac_t""no" 1>&6 + fi + if test "$GPGME_CONFIG" = "no" ; then + echo "*** The gpgme-config script installed by GPGME could not be found" + echo "*** If GPGME was installed in PREFIX, make sure PREFIX/bin is in" + echo "*** your path, or set the GPGME_CONFIG environment variable to the" + echo "*** full path to gpgme-config." + else + if test -f conf.gpgmetest ; then + : + else + echo "*** Could not run gpgme test program, checking why..." + CFLAGS="$CFLAGS $GPGME_CFLAGS" + LIBS="$LIBS $GPGME_LIBS" + cat > conftest.$ac_ext < +#include +#include +#include + +int main() { + gpgme_check_version(NULL); return 0 +; return 0; } +EOF +if { (eval echo configure:5232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + +echo "*** The test program compiled, but did not run. This usually means" +echo "*** that the run-time linker is not finding GPGME or finding the wrong" +echo "*** version of GPGME. If it is not finding GPGME, you'll need to set your" +echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" +echo "*** to the installed location Also, make sure you have run ldconfig if" +echo "*** that is required on your system" +echo "***" +echo "*** If you have an old version installed, it is best to remove it," +echo "*** although you may also be able to get things to work by" +echo "*** modifying LD_LIBRARY_PATH" +echo "***" + +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + +echo "*** The test program failed to compile or link. See the file config.log" +echo "*** for the exact error that occured. This usually means GPGME was" +echo "*** incorrectly installed or that you have moved GPGME since it was" +echo "*** installed. In the latter case, you may want to edit the" +echo "*** gpgme-config script: $GPGME_CONFIG" + +fi +rm -f conftest* + CFLAGS="$ac_save_CFLAGS" + LIBS="$ac_save_LIBS" + fi + fi + GPGME_CFLAGS="" + GPGME_LIBS="" + use_gpgme=no + fi + + + rm -f conf.gpgmetest + +fi + +# Check whether --enable-compface or --disable-compface was given. +if test "${enable_compface+set}" = set; then + enableval="$enable_compface" + ac_cv_disable_compface=disable +else + ac_cv_disable_compface=no +fi + +if test "$ac_cv_disable_compface" = no; then + echo $ac_n "checking for uncompface in -lcompface""... $ac_c" 1>&6 +echo "configure:5284: checking for uncompface in -lcompface" >&5 +ac_lib_var=`echo compface'_'uncompface | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lcompface $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo compface | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + +# Check whether --enable-jconv or --disable-jconv was given. +if test "${enable_jconv+set}" = set; then + enableval="$enable_jconv" + ac_cv_disable_jconv=disable +else + ac_cv_disable_jconv=no +fi + +if test "$ac_cv_disable_jconv" = no; then + echo $ac_n "checking for jconv_alloc_conv in -ljconv""... $ac_c" 1>&6 +echo "configure:5342: checking for jconv_alloc_conv in -ljconv" >&5 +ac_lib_var=`echo jconv'_'jconv_alloc_conv | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ljconv $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo jconv | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + +fi + +echo $ac_n "checking for setlocale in -lxpg4""... $ac_c" 1>&6 +echo "configure:5391: checking for setlocale in -lxpg4" >&5 +ac_lib_var=`echo xpg4'_'setlocale | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lxpg4 $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_lib=HAVE_LIB`echo xpg4 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ + -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` + cat >> confdefs.h <&6 +fi + + +# Check whether --enable-threads or --disable-threads was given. +if test "${enable_threads+set}" = set; then + enableval="$enable_threads" + use_threads=$enableval +else + use_threads=no +fi + + +echo $ac_n "checking whether to use threads""... $ac_c" 1>&6 +echo "configure:5448: checking whether to use threads" >&5 +if test x"$use_threads" = xyes ; then + echo "$ac_t""yes" 1>&6 + if test ! -z `$GLIB_CONFIG --help 2>&1 |grep 'gthread'` ; then + CFLAGS="$CFLAGS `$GLIB_CONFIG --cflags gthread`" + LIBS="$LIBS `$GLIB_CONFIG --libs gthread`" + cat >> confdefs.h <<\EOF +#define USE_THREADS 1 +EOF + + else + { echo "configure: error: Sylpheed requires GThread from GLib to use threading." 1>&2; exit 1; } + fi +else + echo "$ac_t""no" 1>&6 +fi + +# Check whether --enable-ipv6 or --disable-ipv6 was given. +if test "${enable_ipv6+set}" = set; then + enableval="$enable_ipv6" + ac_cv_enableipv6=$enableval +else + ac_cv_enableipv6=no +fi + + +if test x"$ac_cv_enableipv6" = xyes; then + echo $ac_n "checking for IPv6 support""... $ac_c" 1>&6 +echo "configure:5476: checking for IPv6 support" >&5 + if eval "test \"`echo '$''{'ac_cv_ipv6'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + cat > conftest.$ac_ext < + #include +int main() { +int x = IPPROTO_IPV6; struct in6_addr a; +; return 0; } +EOF +if { (eval echo configure:5491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_ipv6=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_ipv6=no +fi +rm -f conftest* + +fi + + echo "$ac_t""$ac_cv_ipv6" 1>&6 + if test $ac_cv_ipv6 = yes; then + cat >> confdefs.h <<\EOF +#define INET6 1 +EOF + + fi +fi + +ac_header_dirent=no +for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 +echo "configure:5518: checking for $ac_hdr that defines DIR" >&5 +if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include <$ac_hdr> +int main() { +DIR *dirp = 0; +; return 0; } +EOF +if { (eval echo configure:5531: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_dirent_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done +# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. +if test $ac_header_dirent = dirent.h; then +echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 +echo "configure:5556: checking for opendir in -ldir" >&5 +ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldir $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -ldir" +else + echo "$ac_t""no" 1>&6 +fi + +else +echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 +echo "configure:5597: checking for opendir in -lx" >&5 +ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-lx $LIBS" +cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + LIBS="$LIBS -lx" +else + echo "$ac_t""no" 1>&6 +fi + +fi + +echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 +echo "configure:5639: checking for ANSI C header files" >&5 +if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#include +#include +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5652: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + ac_cv_header_stdc=yes +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_stdc=no +fi +rm -f conftest* + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. +cat > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "memchr" >/dev/null 2>&1; then + : +else + rm -rf conftest* + 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 > conftest.$ac_ext < +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "free" >/dev/null 2>&1; then + : +else + rm -rf conftest* + 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 > conftest.$ac_ext < +#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#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)) exit(2); +exit (0); } + +EOF +if { (eval echo configure:5719: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + : +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_header_stdc=no +fi +rm -fr conftest* +fi + +fi +fi + +echo "$ac_t""$ac_cv_header_stdc" 1>&6 +if test $ac_cv_header_stdc = yes; then + cat >> confdefs.h <<\EOF +#define STDC_HEADERS 1 +EOF + +fi + +echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6 +echo "configure:5743: checking for sys/wait.h that is POSIX.1 compatible" >&5 +if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +#ifndef WEXITSTATUS +#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) +#endif +#ifndef WIFEXITED +#define WIFEXITED(stat_val) (((stat_val) & 255) == 0) +#endif +int main() { +int s; +wait (&s); +s = WIFEXITED (s) ? WEXITSTATUS (s) : 1; +; return 0; } +EOF +if { (eval echo configure:5764: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_header_sys_wait_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_sys_wait_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6 +if test $ac_cv_header_sys_wait_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_SYS_WAIT_H 1 +EOF + +fi + +for ac_hdr in fcntl.h sys/file.h unistd.h paths.h sys/param.h +do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "configure:5788: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:5798: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + + +echo $ac_n "checking for working const""... $ac_c" 1>&6 +echo "configure:5826: checking for working const" >&5 +if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <j = 5; +} +{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ + const int foo = 10; +} + +; return 0; } +EOF +if { (eval echo configure:5880: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_c_const=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_c_const=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_c_const" 1>&6 +if test $ac_cv_c_const = no; then + cat >> confdefs.h <<\EOF +#define const +EOF + +fi + +echo $ac_n "checking for off_t""... $ac_c" 1>&6 +echo "configure:5901: checking for off_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])off_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_off_t=yes +else + rm -rf conftest* + ac_cv_type_off_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_off_t" 1>&6 +if test $ac_cv_type_off_t = no; then + cat >> confdefs.h <<\EOF +#define off_t long +EOF + +fi + +echo $ac_n "checking for pid_t""... $ac_c" 1>&6 +echo "configure:5934: checking for pid_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_pid_t=yes +else + rm -rf conftest* + ac_cv_type_pid_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_pid_t" 1>&6 +if test $ac_cv_type_pid_t = no; then + cat >> confdefs.h <<\EOF +#define pid_t int +EOF + +fi + +echo $ac_n "checking for size_t""... $ac_c" 1>&6 +echo "configure:5967: checking for size_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])size_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_size_t=yes +else + rm -rf conftest* + ac_cv_type_size_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_size_t" 1>&6 +if test $ac_cv_type_size_t = no; then + cat >> confdefs.h <<\EOF +#define size_t unsigned +EOF + +fi + +echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 +echo "configure:6000: checking whether struct tm is in sys/time.h or time.h" >&5 +if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#include +int main() { +struct tm *tp; tp->tm_sec; +; return 0; } +EOF +if { (eval echo configure:6013: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then + rm -rf conftest* + ac_cv_struct_tm=time.h +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_struct_tm=sys/time.h +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_struct_tm" 1>&6 +if test $ac_cv_struct_tm = sys/time.h; then + cat >> confdefs.h <<\EOF +#define TM_IN_SYS_TIME 1 +EOF + +fi + +echo $ac_n "checking for wint_t""... $ac_c" 1>&6 +echo "configure:6034: checking for wint_t" >&5 +if eval "test \"`echo '$''{'ac_cv_type_wint_t'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +#if STDC_HEADERS +#include +#include +#endif +EOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + egrep "(^|[^a-zA-Z_0-9])wint_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_type_wint_t=yes +else + rm -rf conftest* + ac_cv_type_wint_t=no +fi +rm -f conftest* + +fi +echo "$ac_t""$ac_cv_type_wint_t" 1>&6 +if test $ac_cv_type_wint_t = no; then + cat >> confdefs.h <<\EOF +#define wint_t unsigned int +EOF + +fi + + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6 +echo "configure:6070: checking for working alloca.h" >&5 +if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +int main() { +char *p = alloca(2 * sizeof(int)); +; return 0; } +EOF +if { (eval echo configure:6082: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_header_alloca_h=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_header_alloca_h=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_header_alloca_h" 1>&6 +if test $ac_cv_header_alloca_h = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA_H 1 +EOF + +fi + +echo $ac_n "checking for alloca""... $ac_c" 1>&6 +echo "configure:6103: checking for alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +# define alloca _alloca +# else +# if HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +char *alloca (); +# endif +# endif +# endif +# endif +#endif + +int main() { +char *p = (char *) alloca(1); +; return 0; } +EOF +if { (eval echo configure:6136: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + ac_cv_func_alloca_works=yes +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + ac_cv_func_alloca_works=no +fi +rm -f conftest* +fi + +echo "$ac_t""$ac_cv_func_alloca_works" 1>&6 +if test $ac_cv_func_alloca_works = yes; then + cat >> confdefs.h <<\EOF +#define HAVE_ALLOCA 1 +EOF + +fi + +if test $ac_cv_func_alloca_works = no; then + # The SVR3 libPW and SVR4 libucb both contain incompatible functions + # that cause trouble. Some versions do not even contain alloca or + # contain a buggy version. If you still want to use their alloca, + # use ar to extract alloca.o from them instead of compiling alloca.c. + ALLOCA=alloca.${ac_objext} + cat >> confdefs.h <<\EOF +#define C_ALLOCA 1 +EOF + + +echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6 +echo "configure:6168: checking whether alloca needs Cray hooks" >&5 +if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <&5 | + egrep "webecray" >/dev/null 2>&1; then + rm -rf conftest* + ac_cv_os_cray=yes +else + rm -rf conftest* + ac_cv_os_cray=no +fi +rm -f conftest* + +fi + +echo "$ac_t""$ac_cv_os_cray" 1>&6 +if test $ac_cv_os_cray = yes; then +for ac_func in _getb67 GETB67 getb67; do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6198: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + cat >> confdefs.h <&6 +fi + +done +fi + +echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6 +echo "configure:6253: checking stack direction for C alloca" >&5 +if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + ac_cv_c_stack_direction=0 +else + cat > conftest.$ac_ext < addr) ? 1 : -1; +} +main () +{ + exit (find_stack_direction() < 0); +} +EOF +if { (eval echo configure:6280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +then + ac_cv_c_stack_direction=1 +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + ac_cv_c_stack_direction=-1 +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$ac_cv_c_stack_direction" 1>&6 +cat >> confdefs.h <&6 +echo "configure:6305: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +EOF +ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo configure:6315: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` + cat >> confdefs.h <&6 +fi +done + +for ac_func in gethostname mkdir mktime socket strstr \ + wcsstr wcswcs iswalnum iswspace towlower \ + wcslen wcscpy wcsncpy \ + uname flock lockf inet_aton inet_addr \ + fchmod mkstemp +do +echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 +echo "configure:6348: checking for $ac_func" >&5 +if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext < +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func(); + +int main() { + +/* 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_$ac_func) || defined (__stub___$ac_func) +choke me +#else +$ac_func(); +#endif + +; return 0; } +EOF +if { (eval echo configure:6376: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" +else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 +fi +done + + +trap '' 1 2 15 +cat > confcache <<\EOF +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# 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. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# Any assignment to VPATH causes Sun make to only execute +# the first set of double-colon rules, so remove it if not needed. +# If there is a colon in the path, we need to keep it. +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' +fi + +trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 + +DEFS=-DHAVE_CONFIG_H + +# Without the "./", some shells look in PATH for config.status. +: ${CONFIG_STATUS=./config.status} + +echo creating $CONFIG_STATUS +rm -f $CONFIG_STATUS +cat > $CONFIG_STATUS </dev/null | sed 1q`: +# +# $0 $ac_configure_args +# +# Compiler output produced by configure, useful for debugging +# configure, is in ./config.log if it exists. + +ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" +for ac_option +do + case "\$ac_option" in + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion" + exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;; + -version | --version | --versio | --versi | --vers | --ver | --ve | --v) + echo "$CONFIG_STATUS generated by autoconf version 2.13" + exit 0 ;; + -help | --help | --hel | --he | --h) + echo "\$ac_cs_usage"; exit 0 ;; + *) echo "\$ac_cs_usage"; exit 1 ;; + esac +done + +ac_given_srcdir=$srcdir +ac_given_INSTALL="$INSTALL" + +trap 'rm -fr `echo " +Makefile +sylpheed.spec +intl/Makefile +ac/Makefile +po/Makefile.in +libkcc/Makefile +src/Makefile +manual/Makefile +manual/ja/Makefile + config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 +EOF +cat >> $CONFIG_STATUS < conftest.subs <<\\CEOF +$ac_vpsub +$extrasub +s%@SHELL@%$SHELL%g +s%@CFLAGS@%$CFLAGS%g +s%@CPPFLAGS@%$CPPFLAGS%g +s%@CXXFLAGS@%$CXXFLAGS%g +s%@FFLAGS@%$FFLAGS%g +s%@DEFS@%$DEFS%g +s%@LDFLAGS@%$LDFLAGS%g +s%@LIBS@%$LIBS%g +s%@exec_prefix@%$exec_prefix%g +s%@prefix@%$prefix%g +s%@program_transform_name@%$program_transform_name%g +s%@bindir@%$bindir%g +s%@sbindir@%$sbindir%g +s%@libexecdir@%$libexecdir%g +s%@datadir@%$datadir%g +s%@sysconfdir@%$sysconfdir%g +s%@sharedstatedir@%$sharedstatedir%g +s%@localstatedir@%$localstatedir%g +s%@libdir@%$libdir%g +s%@includedir@%$includedir%g +s%@oldincludedir@%$oldincludedir%g +s%@infodir@%$infodir%g +s%@mandir@%$mandir%g +s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g +s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g +s%@INSTALL_DATA@%$INSTALL_DATA%g +s%@PACKAGE@%$PACKAGE%g +s%@VERSION@%$VERSION%g +s%@ACLOCAL@%$ACLOCAL%g +s%@AUTOCONF@%$AUTOCONF%g +s%@AUTOMAKE@%$AUTOMAKE%g +s%@AUTOHEADER@%$AUTOHEADER%g +s%@MAKEINFO@%$MAKEINFO%g +s%@SET_MAKE@%$SET_MAKE%g +s%@LT_RELEASE@%$LT_RELEASE%g +s%@LT_CURRENT@%$LT_CURRENT%g +s%@LT_REVISION@%$LT_REVISION%g +s%@LT_AGE@%$LT_AGE%g +s%@host@%$host%g +s%@host_alias@%$host_alias%g +s%@host_cpu@%$host_cpu%g +s%@host_vendor@%$host_vendor%g +s%@host_os@%$host_os%g +s%@build@%$build%g +s%@build_alias@%$build_alias%g +s%@build_cpu@%$build_cpu%g +s%@build_vendor@%$build_vendor%g +s%@build_os@%$build_os%g +s%@RANLIB@%$RANLIB%g +s%@CC@%$CC%g +s%@LN_S@%$LN_S%g +s%@LIBTOOL@%$LIBTOOL%g +s%@MAINTAINER_MODE_TRUE@%$MAINTAINER_MODE_TRUE%g +s%@MAINTAINER_MODE_FALSE@%$MAINTAINER_MODE_FALSE%g +s%@MAINT@%$MAINT%g +s%@CPP@%$CPP%g +s%@ALLOCA@%$ALLOCA%g +s%@USE_NLS@%$USE_NLS%g +s%@MSGFMT@%$MSGFMT%g +s%@GMSGFMT@%$GMSGFMT%g +s%@XGETTEXT@%$XGETTEXT%g +s%@GENCAT@%$GENCAT%g +s%@USE_INCLUDED_LIBINTL@%$USE_INCLUDED_LIBINTL%g +s%@CATALOGS@%$CATALOGS%g +s%@CATOBJEXT@%$CATOBJEXT%g +s%@DATADIRNAME@%$DATADIRNAME%g +s%@GMOFILES@%$GMOFILES%g +s%@INSTOBJEXT@%$INSTOBJEXT%g +s%@INTLDEPS@%$INTLDEPS%g +s%@INTLLIBS@%$INTLLIBS%g +s%@INTLOBJS@%$INTLOBJS%g +s%@POFILES@%$POFILES%g +s%@POSUB@%$POSUB%g +s%@INCLUDE_LOCALE_H@%$INCLUDE_LOCALE_H%g +s%@GT_NO@%$GT_NO%g +s%@GT_YES@%$GT_YES%g +s%@MKINSTALLDIRS@%$MKINSTALLDIRS%g +s%@l@%$l%g +s%@localedir@%$localedir%g +s%@manualdir@%$manualdir%g +s%@GLIB_CONFIG@%$GLIB_CONFIG%g +s%@GLIB_CFLAGS@%$GLIB_CFLAGS%g +s%@GLIB_LIBS@%$GLIB_LIBS%g +s%@GTK_CONFIG@%$GTK_CONFIG%g +s%@GTK_CFLAGS@%$GTK_CFLAGS%g +s%@GTK_LIBS@%$GTK_LIBS%g +s%@GDK_PIXBUF_CONFIG@%$GDK_PIXBUF_CONFIG%g +s%@GDK_PIXBUF_CFLAGS@%$GDK_PIXBUF_CFLAGS%g +s%@GDK_PIXBUF_LIBS@%$GDK_PIXBUF_LIBS%g +s%@IMLIB_CONFIG@%$IMLIB_CONFIG%g +s%@GDK_IMLIB_CFLAGS@%$GDK_IMLIB_CFLAGS%g +s%@GDK_IMLIB_LIBS@%$GDK_IMLIB_LIBS%g +s%@GPGME_CONFIG@%$GPGME_CONFIG%g +s%@GPGME_CFLAGS@%$GPGME_CFLAGS%g +s%@GPGME_LIBS@%$GPGME_LIBS%g + +CEOF +EOF + +cat >> $CONFIG_STATUS <<\EOF + +# Split the substitutions into bite-sized pieces for seds with +# small command number limits, like on Digital OSF/1 and HP-UX. +ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. +ac_file=1 # Number of current file. +ac_beg=1 # First line for current file. +ac_end=$ac_max_sed_cmds # Line after last line for current file. +ac_more_lines=: +ac_sed_cmds="" +while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file + else + sed "${ac_end}q" conftest.subs > conftest.s$ac_file + fi + if test ! -s conftest.s$ac_file; then + ac_more_lines=false + rm -f conftest.s$ac_file + else + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f conftest.s$ac_file" + else + ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" + fi + ac_file=`expr $ac_file + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_cmds` + fi +done +if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat +fi +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. + + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dir_suffix. + ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dir_suffix= ac_dots= + fi + + case "$ac_given_srcdir" in + .) srcdir=. + if test -z "$ac_dots"; then top_srcdir=. + else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; + /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; + *) # Relative path. + srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" + top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + case "$ac_given_INSTALL" in + [/$]*) INSTALL="$ac_given_INSTALL" ;; + *) INSTALL="$ac_dots$ac_given_INSTALL" ;; + esac + + echo creating "$ac_file" + rm -f "$ac_file" + configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." + case "$ac_file" in + *Makefile*) ac_comsub="1i\\ +# $configure_input" ;; + *) ac_comsub= ;; + esac + + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + sed -e "$ac_comsub +s%@configure_input@%$configure_input%g +s%@srcdir@%$srcdir%g +s%@top_srcdir@%$top_srcdir%g +s%@INSTALL@%$INSTALL%g +" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file +fi; done +rm -f conftest.s* + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' +ac_dC='\3' +ac_dD='%g' +# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". +ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='\([ ]\)%\1#\2define\3' +ac_uC=' ' +ac_uD='\4%g' +# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_eB='$%\1#\2define\3' +ac_eC=' ' +ac_eD='%g' + +if test "${CONFIG_HEADERS+set}" != set; then +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +fi +for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case "$ac_file" in + *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` + ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + *) ac_file_in="${ac_file}.in" ;; + esac + + echo creating $ac_file + + rm -f conftest.frag conftest.in conftest.out + ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` + cat $ac_file_inputs > conftest.in + +EOF + +# Transform confdefs.h into a sed script conftest.vals that substitutes +# the proper values into config.h.in to produce config.h. And first: +# Protect against being on the right side of a sed subst in config.status. +# Protect against being in an unquoted here document in config.status. +rm -f conftest.vals +cat > conftest.hdr <<\EOF +s/[\\&%]/\\&/g +s%[\\$`]%\\&%g +s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp +s%ac_d%ac_u%gp +s%ac_u%ac_e%gp +EOF +sed -n -f conftest.hdr confdefs.h > conftest.vals +rm -f conftest.hdr + +# This sed command replaces #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. +cat >> conftest.vals <<\EOF +s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% +EOF + +# Break up conftest.vals because some shells have a limit on +# the size of here documents, and old seds have small limits too. + +rm -f conftest.tail +while : +do + ac_lines=`grep -c . conftest.vals` + # grep -c gives empty output for an empty file on some AIX systems. + if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi + # Write a limited-size here document to conftest.frag. + echo ' cat > conftest.frag <> $CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS + echo 'CEOF + sed -f conftest.frag conftest.in > conftest.out + rm -f conftest.in + mv conftest.out conftest.in +' >> $CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail + rm -f conftest.vals + mv conftest.tail conftest.vals +done +rm -f conftest.vals + +cat >> $CONFIG_STATUS <<\EOF + rm -f conftest.frag conftest.h + echo "/* $ac_file. Generated automatically by configure. */" > conftest.h + cat conftest.in >> conftest.h + rm -f conftest.in + if cmp -s $ac_file conftest.h 2>/dev/null; then + echo "$ac_file is unchanged" + rm -f conftest.h + else + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` + if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then + # The file is in a subdirectory. + test ! -d "$ac_dir" && mkdir "$ac_dir" + fi + rm -f $ac_file + mv conftest.h $ac_file + fi +fi; done + +EOF + +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +srcdir=$ac_given_srcdir +while test -n "$ac_sources"; do + set $ac_dests; ac_dest=$1; shift; ac_dests=$* + set $ac_sources; ac_source=$1; shift; ac_sources=$* + + echo "linking $srcdir/$ac_source to $ac_dest" + + if test ! -r $srcdir/$ac_source; then + { echo "configure: error: $srcdir/$ac_source: File not found" 1>&2; exit 1; } + fi + rm -f $ac_dest + + # Make relative symlinks. + # Remove last slash and all that follows it. Not all systems have dirname. + ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'` + if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then + # The dest file is in a subdirectory. + test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir" + ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`" + # A "../" for each directory in $ac_dest_dir_suffix. + ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'` + else + ac_dest_dir_suffix= ac_dots= + fi + + case "$srcdir" in + [/$]*) ac_rel_source="$srcdir/$ac_source" ;; + *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;; + esac + + # Make a symlink if possible; otherwise try a hard link. + if ln -s $ac_rel_source $ac_dest 2>/dev/null || + ln $srcdir/$ac_source $ac_dest; then : + else + { echo "configure: error: can not link $ac_dest to $srcdir/$ac_source" 1>&2; exit 1; } + fi +done +EOF +cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF +test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h +case "$CONFIG_FILES" in *po/Makefile.in*) + sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile + esac + +exit 0 +EOF +chmod +x $CONFIG_STATUS +rm -fr confdefs* $ac_clean_files +test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 + diff --git a/configure.in b/configure.in new file mode 100644 index 000000000..74790ca5b --- /dev/null +++ b/configure.in @@ -0,0 +1,185 @@ +dnl Process this file with autoconf to produce a configure script. +AC_INIT(src/main.c) +PACKAGE=sylpheed + +dnl version number +MAJOR_VERSION=0 +MINOR_VERSION=4 +MICRO_VERSION=65 +INTERFACE_AGE=65 +BINARY_AGE=65 +EXTRA_VERSION=cvs3 +VERSION=$MAJOR_VERSION.$MINOR_VERSION.$MICRO_VERSION$EXTRA_VERSION + +dnl +AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define) +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE") +AC_DEFINE_UNQUOTED(VERSION, "$VERSION") + +dnl libtool versioning +LT_RELEASE=$MAJOR_VERSION.$MINOR_VERSION +LT_CURRENT=`expr $MICRO_VERSION - $INTERFACE_AGE` +LT_REVISION=$INTERFACE_AGE +LT_AGE=`expr $BINARY_AGE - $INTERFACE_AGE` +AC_SUBST(LT_RELEASE) +AC_SUBST(LT_CURRENT) +AC_SUBST(LT_REVISION) +AC_SUBST(LT_AGE) + +dnl Specify a header configuration file +AM_CONFIG_HEADER(config.h) + +AM_PROG_LIBTOOL +AM_MAINTAINER_MODE + +dnl Checks for programs. +AC_ARG_PROGRAM +AC_PROG_CC +AC_ISC_POSIX +AM_PROG_CC_STDC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AC_PROG_CPP +dnl AC_PROG_RANLIB + +SYLPHEED_ACLOCAL_INCLUDE(ac) + +dnl for gettext +ALL_LINGUAS="cs de el es fr it ja ko nl pt_BR ru zh_CN.GB2312 zh_TW.Big5" +AM_GNU_GETTEXT +dnl AC_CHECK_FUNC(gettext, AC_CHECK_LIB(intl, gettext)) +localedir='${prefix}/${DATADIRNAME}/locale' +AC_SUBST(localedir) + +manualdir='${prefix}/${DATADIRNAME}/${PACKAGE}/manual' +AC_SUBST(manualdir) + +dnl Checks for libraries. +AM_PATH_GLIB(1.2.6,, + AC_MSG_ERROR(Test for GLIB failed. See the file 'INSTALL' for help.), + gthread) +AM_PATH_GTK(1.2.6,, + AC_MSG_ERROR(Test for GTK failed. See the file 'INSTALL' for help.)) + +dnl Check for built-in image view support +AC_ARG_ENABLE(gdk-pixbuf, + [ --disable-gdk-pixbuf Do not use gdk-pixbuf], + [ac_cv_disable_gdk_pixbuf=disable], [ac_cv_disable_gdk_pixbuf=no]) +AC_ARG_ENABLE(imlib, + [ --disable-imlib Do not use imlib], + [ac_cv_disable_imlib=disable], [ac_cv_disable_imlib=no]) + +if test "$ac_cv_disable_gdk_pixbuf" = no; then + AM_PATH_GDK_PIXBUF(0.8.0, + AC_DEFINE(HAVE_GDK_PIXBUF), [ac_cv_disable_gdk_pixbuf=disable]) +fi +if test "$ac_cv_disable_gdk_pixbuf" = disable -a "$ac_cv_disable_imlib" = no; then + AM_PATH_GDK_IMLIB(1.9, + AC_DEFINE(HAVE_GDK_IMLIB), [ac_cv_disable_imlib=disable]) +fi +if test "$ac_cv_disable_gdk_pixbuf" = disable -a "$ac_cv_disable_imlib" = disable; then + AC_MSG_WARN(*** Built-in image view will not be supported ***) +fi + +dnl GPGME is used to support OpenPGP +AC_ARG_ENABLE(gpgme, + [ --enable-gpgme Enable GnuPG support using GPGME [default=no]], + [ac_cv_enable_gpgme=$enableval], [ac_cv_enable_gpgme=no]) +if test $ac_cv_enable_gpgme = yes; then + AM_PATH_GPGME(0.1.4, AC_DEFINE(USE_GPGME), [use_gpgme=no]) +fi + +dnl Check for X-Face support +AC_ARG_ENABLE(compface, + [ --disable-compface Do not use compface (X-Face)], + [ac_cv_disable_compface=disable], [ac_cv_disable_compface=no]) +if test "$ac_cv_disable_compface" = no; then + AC_CHECK_LIB(compface, uncompface) +fi + +dnl Check for libjconv +AC_ARG_ENABLE(jconv, + [ --disable-jconv Do not use libjconv], + [ac_cv_disable_jconv=disable], [ac_cv_disable_jconv=no]) +if test "$ac_cv_disable_jconv" = no; then + AC_CHECK_LIB(jconv, jconv_alloc_conv) +fi + +AC_CHECK_LIB(xpg4, setlocale) +dnl AC_CHECK_LIB(kcc, KCC_filter) + +dnl for GThread support +AC_ARG_ENABLE(threads, + [ --enable-threads Enable multithread support [default=no]], + [use_threads=$enableval], [use_threads=no]) + +AC_MSG_CHECKING([whether to use threads]) +if test x"$use_threads" = xyes ; then + AC_MSG_RESULT(yes) + if test ! -z `$GLIB_CONFIG --help 2>&1 |grep 'gthread'` ; then + CFLAGS="$CFLAGS `$GLIB_CONFIG --cflags gthread`" + LIBS="$LIBS `$GLIB_CONFIG --libs gthread`" + AC_DEFINE(USE_THREADS) + else + AC_MSG_ERROR([Sylpheed requires GThread from GLib to use threading.]) + fi +else + AC_MSG_RESULT(no) +fi + +dnl check for IPv6 option +AC_ARG_ENABLE(ipv6, + [ --enable-ipv6 Enable IPv6 support [default=no]], + [ac_cv_enableipv6=$enableval], [ac_cv_enableipv6=no]) + +dnl automated checks for IPv6 support. +if test x"$ac_cv_enableipv6" = xyes; then + AC_MSG_CHECKING([for IPv6 support]) + AC_CACHE_VAL(ac_cv_ipv6,[ + AC_TRY_COMPILE([#define INET6 + #include + #include ], + [int x = IPPROTO_IPV6; struct in6_addr a;], + ac_cv_ipv6=yes, ac_cv_ipv6=no) + ]) + AC_MSG_RESULT($ac_cv_ipv6) + if test $ac_cv_ipv6 = yes; then + AC_DEFINE(INET6) + fi +fi + +dnl Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_HEADER_SYS_WAIT +AC_CHECK_HEADERS(fcntl.h sys/file.h unistd.h paths.h sys/param.h) + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_STRUCT_TM +AC_CHECK_TYPE(wint_t, unsigned int) + +dnl Checks for library functions. +AC_FUNC_ALLOCA +AC_CHECK_HEADERS(wchar.h wctype.h) +AC_CHECK_FUNCS(gethostname mkdir mktime socket strstr \ + wcsstr wcswcs iswalnum iswspace towlower \ + wcslen wcscpy wcsncpy \ + uname flock lockf inet_aton inet_addr \ + fchmod mkstemp) + +AC_OUTPUT([ +Makefile +sylpheed.spec +intl/Makefile +ac/Makefile +po/Makefile.in +libkcc/Makefile +src/Makefile +manual/Makefile +manual/ja/Makefile +]) diff --git a/doc/manual/Makefile.am b/doc/manual/Makefile.am new file mode 100644 index 000000000..38057c64f --- /dev/null +++ b/doc/manual/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = ja diff --git a/doc/manual/Makefile.in b/doc/manual/Makefile.in new file mode 100644 index 000000000..cd0fa43d3 --- /dev/null +++ b/doc/manual/Makefile.in @@ -0,0 +1,330 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GDK_IMLIB_CFLAGS = @GDK_IMLIB_CFLAGS@ +GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GPGME_CFLAGS = @GPGME_CFLAGS@ +GPGME_CONFIG = @GPGME_CONFIG@ +GPGME_LIBS = @GPGME_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +IMLIB_CFLAGS = @IMLIB_CFLAGS@ +IMLIB_CONFIG = @IMLIB_CONFIG@ +IMLIB_LIBS = @IMLIB_LIBS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ +localedir = @localedir@ +manualdir = @manualdir@ + +SUBDIRS = ja +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign manual/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +# 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. + +@SET_MAKE@ + +all-recursive install-data-recursive install-exec-recursive \ +installdirs-recursive install-recursive uninstall-recursive \ +check-recursive installcheck-recursive info-recursive dvi-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; 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; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @set fnord $(MAKEFLAGS); amf=$$2; \ + dot_seen=no; \ + rev=''; list='$(SUBDIRS)'; for subdir in $$list; do \ + rev="$$subdir $$rev"; \ + test "$$subdir" = "." && dot_seen=yes; \ + done; \ + test "$$dot_seen" = "no" && rev=". $$rev"; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = manual + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign manual/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + for subdir in $(SUBDIRS); do \ + if test "$$subdir" = .; then :; else \ + test -d $(distdir)/$$subdir \ + || mkdir $(distdir)/$$subdir \ + || exit 1; \ + chmod 777 $(distdir)/$$subdir; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \ + || exit 1; \ + fi; \ + done +info-am: +info: info-recursive +dvi-am: +dvi: dvi-recursive +check-am: all-am +check: check-recursive +installcheck-am: +installcheck: installcheck-recursive +install-exec-am: +install-exec: install-exec-recursive + +install-data-am: +install-data: install-data-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-recursive +uninstall-am: +uninstall: uninstall-recursive +all-am: Makefile +all-redirect: all-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: installdirs-recursive +installdirs-am: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-tags mostlyclean-generic + +mostlyclean: mostlyclean-recursive + +clean-am: clean-tags clean-generic mostlyclean-am + +clean: clean-recursive + +distclean-am: distclean-tags distclean-generic clean-am + -rm -f libtool + +distclean: distclean-recursive + +maintainer-clean-am: maintainer-clean-tags maintainer-clean-generic \ + distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-recursive + +.PHONY: install-data-recursive uninstall-data-recursive \ +install-exec-recursive uninstall-exec-recursive installdirs-recursive \ +uninstalldirs-recursive all-recursive check-recursive \ +installcheck-recursive info-recursive dvi-recursive \ +mostlyclean-recursive distclean-recursive clean-recursive \ +maintainer-clean-recursive tags tags-recursive mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir info-am info \ +dvi-am dvi check check-am installcheck-am installcheck install-exec-am \ +install-exec install-data-am install-data install-am install \ +uninstall-am uninstall all-redirect all-am all installdirs-am \ +installdirs mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# 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: diff --git a/doc/manual/ja/Makefile.am b/doc/manual/ja/Makefile.am new file mode 100644 index 000000000..1a7a6040f --- /dev/null +++ b/doc/manual/ja/Makefile.am @@ -0,0 +1,26 @@ +manualdatadir = $(manualdir)/ja + +manualdata_DATA = \ + sylpheed-1.html \ + sylpheed-10.html \ + sylpheed-11.html \ + sylpheed-12.html \ + sylpheed-13.html \ + sylpheed-14.html \ + sylpheed-15.html \ + sylpheed-16.html \ + sylpheed-17.html \ + sylpheed-2.html \ + sylpheed-3.html \ + sylpheed-4.html \ + sylpheed-5.html \ + sylpheed-6.html \ + sylpheed-7.html \ + sylpheed-8.html \ + sylpheed-9.html \ + sylpheed.html \ + sylpheed.sgml + +# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'` + +EXTRA_DIST = $(manualdata_DATA) diff --git a/doc/manual/ja/Makefile.in b/doc/manual/ja/Makefile.in new file mode 100644 index 000000000..80cefa7d1 --- /dev/null +++ b/doc/manual/ja/Makefile.in @@ -0,0 +1,255 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = ../.. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GDK_IMLIB_CFLAGS = @GDK_IMLIB_CFLAGS@ +GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GPGME_CFLAGS = @GPGME_CFLAGS@ +GPGME_CONFIG = @GPGME_CONFIG@ +GPGME_LIBS = @GPGME_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +IMLIB_CFLAGS = @IMLIB_CFLAGS@ +IMLIB_CONFIG = @IMLIB_CONFIG@ +IMLIB_LIBS = @IMLIB_LIBS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ +localedir = @localedir@ +manualdir = @manualdir@ + +manualdatadir = $(manualdir)/ja + +manualdata_DATA = sylpheed-1.html sylpheed-10.html sylpheed-11.html sylpheed-12.html sylpheed-13.html sylpheed-14.html sylpheed-15.html sylpheed-16.html sylpheed-17.html sylpheed-2.html sylpheed-3.html sylpheed-4.html sylpheed-5.html sylpheed-6.html sylpheed-7.html sylpheed-8.html sylpheed-9.html sylpheed.html sylpheed.sgml + + +# generated by `ls -1 | sed -e 's/\(.*\)/ \1 \'` + +EXTRA_DIST = $(manualdata_DATA) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../../config.h +CONFIG_CLEAN_FILES = +DATA = $(manualdata_DATA) + +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +all: all-redirect +.SUFFIXES: +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign manual/ja/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +install-manualdataDATA: $(manualdata_DATA) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(manualdatadir) + @list='$(manualdata_DATA)'; for p in $$list; do \ + if test -f $(srcdir)/$$p; then \ + echo " $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manualdatadir)/$$p"; \ + $(INSTALL_DATA) $(srcdir)/$$p $(DESTDIR)$(manualdatadir)/$$p; \ + else if test -f $$p; then \ + echo " $(INSTALL_DATA) $$p $(DESTDIR)$(manualdatadir)/$$p"; \ + $(INSTALL_DATA) $$p $(DESTDIR)$(manualdatadir)/$$p; \ + fi; fi; \ + done + +uninstall-manualdataDATA: + @$(NORMAL_UNINSTALL) + list='$(manualdata_DATA)'; for p in $$list; do \ + rm -f $(DESTDIR)$(manualdatadir)/$$p; \ + done +tags: TAGS +TAGS: + + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = manual/ja + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign manual/ja/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: install-manualdataDATA +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-manualdataDATA +uninstall: uninstall-am +all-am: Makefile $(DATA) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(manualdatadir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: uninstall-manualdataDATA install-manualdataDATA tags distdir \ +info-am info dvi-am dvi check check-am installcheck-am installcheck \ +install-exec-am install-exec install-data-am install-data install-am \ +install uninstall-am uninstall all-redirect all-am all installdirs \ +mostlyclean-generic distclean-generic clean-generic \ +maintainer-clean-generic clean mostlyclean distclean maintainer-clean + + +# 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: diff --git a/doc/manual/ja/sylpheed-1.html b/doc/manual/ja/sylpheed-1.html new file mode 100644 index 000000000..981e1c8e6 --- /dev/null +++ b/doc/manual/ja/sylpheed-1.html @@ -0,0 +1,113 @@ + + + + + Sylpheed User's Manual: Sylpheed¤È¤Ï + + + + + +Next +Previous +Contents +
+

1. Sylpheed¤È¤Ï

+ +

1.1 Sylpheed ¤È¤Ï +

+ +

Sylpheed¤È¤ÏGNOME¤Ê¤É¤ËÍøÍѤµ¤ì¤Æ¤¤¤ëGTK+¤ò»ÈÍѤ·¡¢ +X Window System¾å¤ÇÆ°ºî¤¹¤ë +

    +
  • ·Ú²÷¤ÊÆ°ºî
  • +
  • Èþ¤·¤¯¡¢ÀöÎý¤µ¤ì¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹
  • +
  • ÍưפÊÀßÄꡦÁàºî
  • +
  • Ë­É٤ʵ¡Ç½
  • +
+ +¤òÌܻؤ·¤¿ÅŻҥ᡼¥ë¥¯¥é¥¤¥¢¥ó¥È&¥Ë¥å¡¼¥¹¥ê¡¼¥À¤Ç¤¹¡£ +

¤Þ¤À³«È¯ÅÓÃæ¤Ç¤¹¤Î¤Ç¡¢ ¤½¤ì¤Û¤É¹âµ¡Ç½¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢ +Version 1.0¤Ë¤ÏÁêÅö¤Îµ¡Ç½¤òÈ÷¤¨¤ëͽÄê¤Ç¤¹¡£ +

+

1.2 ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ +

+ +

¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï +

    +
  • Outlook Express
  • +
  • Becky!
  • +
  • Datula
  • +
+ +¤Ê¤É¤ÎWindows¤Ç¤ÎÄêÈ֥᡼¥é¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ +

Áàºî¤äµ¡Ç½Åù¤ÏMew¤äWanderlustÅù¤ÎEmacs·Ï¥á¡¼¥é¤ò +»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ +

+

1.3 ¼ç¤Êµ¡Ç½ +

+ +

¼ç¤Êµ¡Ç½¤È¤·¤Æ¤Ï¡¢ +

    +
  • ̵À©¸Â¤ÎÊ£¿ô¥¢¥«¥¦¥ó¥È´ÉÍý
  • +
  • ¥¹¥ì¥Ã¥Éɽ¼¨
  • +
  • ¿¶¤êʬ¤±µ¡Ç½
  • +
  • XML¥Ù¡¼¥¹¤Î¥¢¥É¥ì¥¹Ä¢
  • +
  • ¿·Ã塦̤ÆÉ´ÉÍý
  • +
  • ¥Ë¥å¡¼¥¹¥ê¡¼¥À¡¼µ¡Ç½(¸½ºß¤Ïread¤Î¤ß²Äǽ)
  • +
  • APOPǧ¾Ú
  • +
  • UIDLÂбþ
  • +
  • ¥­¡¼¥Ü¡¼¥É¤Î¤ß¤Ë¤è¤ëÁàºî¤¬²Äǽ(Mew/Wanderlust ¥é¥¤¥¯¤Ê¥­¡¼¥Ð¥¤¥ó¥É)
  • +
  • ¥ª¥Õ¥é¥¤¥ó´Ä¶­¤ò¹Íθ¤·¤¿¡¢Á÷¿®ÂÔ¤Á¤«¤é¤ÎÁ÷¿®
  • +
  • multipart-MIME¤Ë¤è¤ëźÉÕ¥Õ¥¡¥¤¥ë¤Î±ÜÍ÷/Á÷¿®(Base64, quoted-printable)
  • +
+ +Åù¤¬¤¢¤²¤é¤ì¡¢Â¾¤ÎÊØÍø¤Êµ¡Ç½¤È¤·¤Æ¤Ï¡¢ +
    +
  • MLÅù¤Ç¥¹¥ì¥Ã¥É¤¬ÀÚ¤ì¤Æ¤¤¤ë¤È¤­ÊØÍø¤Ê¡Ö·ï̾¤Ç´ó¤»¤ë¡×µ¡Ç½
  • +
  • mbox ¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È²Äǽ
  • +
  • Á´³Ñ±Ñ¿ô»ú¤òȾ³Ñ±Ñ¿ô»ú¤ËÊÑ´¹¤¹¤ëµ¡Ç½
  • +
  • ¥¯¥ê¥Ã¥«¥Ö¥ëURI
  • +
  • ³°Éô¥¨¥Ç¥£¥¿Âбþ
  • +
  • X-FaceÂбþ(compface»ÈÍÑ»þ)
  • +
  • IPv6
  • +
  • UTF-8(Unicode)¤ò´Þ¤à¿¿ô¤Î¸À¸ì¤ËÂбþ(libjconv»ÈÍÑ»þ)
  • +
  • ²èÁüɽ¼¨µ¡Ç½¤òÆâ¡(gdk-fixbuf¤¢¤ë¤¤¤Ïimlib»ÈÍÑ»þ)
  • +
+ +Åù¤¬¤¢¤ê¤Þ¤¹¡£ +

+

1.4 ¥á¥Ã¥»¡¼¥¸¤Î´ÉÍýÊý¼° +

+ +

MH·Á¼°¤Ç´ÉÍý¤·¤Æ¤ª¤ê¡¢Â¾¤ÎMH·Á¼°¤ò»ÈÍѤ·¤¿¥á¡¼¥é(MewÅù)¤ÈÊ»ÍѤ¹¤ë¤³¤È¤¬ +²Äǽ¤Ç¤¹¡£ +¥×¥í¥È¥³¥ë¤Ï¸½ºßPOP3(APOPǧ¾Ú²Ä)¤¬»ÈÍѲÄǽ¤Ç¤¹¡£ +¼õ¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤Î»ÈÍѤâ²Äǽ¤Ç¤¹¡£ +

+

1.5 ¼Â¸½Í½Äê¤Îµ¡Ç½ +

+ +

+

    +
  • ¿·Ãå¥á¡¼¥ë¤ÎÄê´üŪ¥Á¥§¥Ã¥¯
  • +
  • ¥Ë¥å¡¼¥¹¥¯¥é¥¤¥¢¥ó¥Èµ¡Ç½¤Î½¼¼Â
  • +
  • ¥Ø¥Ã¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º
  • +
  • ¥É¥é¥Ã¥° & ¥É¥í¥Ã¥×
  • +
  • MH, mbox°Ê³°¤Î·Á¼°¤Ø¤ÎÂбþ
  • +
  • ¥á¥Ã¥»¡¼¥¸¤ÎÁ´Ê¸¸¡º÷ (namazu ¤È¤ÎÏ¢·È)
  • +
  • ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¥Þ¥Í¡¼¥¸¥ã
  • +
  • PGP/GPG IMAP4 SSLÂбþ
  • +
  • °µ½Ì¥Õ¥©¥ë¥À
  • +
+ +¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£ +¤â¤·¼ÂÁõ¤µ¤ì¤¿Êý¤¬¤¤¤é¤Ã¤·¤ã¤¤¤Þ¤·¤¿¤é¡¢ +Sylpheed ML¤Ë¤Ç¤âpatch¤òÁ÷¤Ã¤Æ失¤ì¤Ð¹¬¤¤¤Ç¤¹¡£ +

+


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-10.html b/doc/manual/ja/sylpheed-10.html new file mode 100644 index 000000000..aa6c311d6 --- /dev/null +++ b/doc/manual/ja/sylpheed-10.html @@ -0,0 +1,63 @@ + + + + + Sylpheed User's Manual: ¥á¥Ã¥»¡¼¥¸¤Î¿¶¤êʬ¤± + + + + + +Next +Previous +Contents +
+

10. ¥á¥Ã¥»¡¼¥¸¤Î¿¶¤êʬ¤±

+ +

10.1 ¿¶¤êʬ¤±¤ÎÀßÄê +

+ +

+Á´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦¤ò³«¤­¡¢ +¿¶¤êʬ¤±¥¿¥Ö¤òÁªÂò¤·¤Þ¤¹¡£ +¿¶¤êʬ¤±¥ë¡¼¥ë¤òÀßÄꤷ¤¿¸å¡¢OK¤ò²¡¤·¤Þ¤¹¡£ +

¿¶¤êʬ¤±¥ë¡¼¥ë¤ÎÅÐÏ¿

+ +

ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë¤Î¥ê¥¹¥È¤Ç(¿·µ¬)¤òÁªÂò¤·¡¢ +"¥Ø¥Ã¥À"¤Î¤È¤³¤í¤Ç¿¶¤êʬ¤±Âоݤˤ·¤¿¤¤¥Ø¥Ã¥À¤òÁªÂò¤·¤Þ¤¹¡£ +¤³¤Î¤È¤­¡¢¥É¥í¥Ã¥×¥À¥¦¥ó¥á¥Ë¥å¡¼¤ÇÁªÂò¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¤¬¡¢ +¼êÆ°¤ÇÆþÎϤ·¤ÆǤ°Õ¤Î¥Ø¥Ã¥À¤òÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤½¤Î¸å¡¢¥­¡¼¥ï¡¼¥É¤òÆþÎϤ·¡¢½Ò¸ì¤òÁªÂò¤·¤Þ¤¹¡£ +

¤½¤·¤Æ¡¢¤â¤¦1¤ÄÀßÄꤷ¤¿¤¤¾ì¹ç¤Ï¡¢±é»»»Ò¤òÁªÂò¤·¡¢¤½¤ÎÉôʬ¤Ë¾å¤Îºî¶È¤ò·«¤êÊÖ¤·¤Þ¤¹¡£ +ÀßÄꤷ¤¿¤¯¤Ê¤¤¾ì¹ç¤ÏÆþÎϤ·¤Ê¤¤¤Ç¹½¤¤¤Þ¤»¤ó¡£ +

¤½¤Î¸å¡¢¿¶¤êʬ¤±Àè¤òÁªÂò¤¹¤ë¤«¡¢¼õ¿®¤·¤Ê¤¤¤òÁªÂò¤·¤¿¸å¡¢ +ÅÐÏ¿¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ +

"¼õ¿®¤·¤Ê¤¤"¤ÏSylpheed¤Ç¤Ï¼õ¿®¤µ¤ì¤º¡¢¥µ¡¼¥Ð¤Ë¤â»Ä¤ê¤Þ¤¹¡£ +

¿¶¤êʬ¤±¥ë¡¼¥ë¤ÎÃÖ´¹

+ +

ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë¤Î¥ê¥¹¥È¤«¤éÊѹ¹¤·¤¿¤¤¥ë¡¼¥ë¤òÁªÂò¤·¤Þ¤¹¡£ +¤¹¤ë¤È¾å¤Î¥Õ¥£¡¼¥ë¥É¤¬Ëä¤Þ¤ë¤Î¤Ç¡¢Êѹ¹¤·¤¿¤¤Éôʬ¤òÊѹ¹¤·¡¢ +˺¤ì¤º¤Ë"ÃÖ´¹"¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£ +

¿¶¤êʬ¤±¥ë¡¼¥ë¤Îºï½ü

+ +

ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë¤Î¥ê¥¹¥È¤«¤éºï½ü¤·¤¿¤¤¥ë¡¼¥ë¤òÁªÂò¤·¡¢ +ºï½ü¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ +

10.2 ¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï +

+ +

+

¼«Æ°Åª¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï

+ +

¼«Æ°Åª¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤·¤¿¤¤¥¢¥«¥¦¥ó¥È¤Î +¥¢¥«¥¦¥ó¥È¤ÎÀßÄê¤Ç¡¢ +¼õ¿®¥¿¥Ö¤ÎÃæ¤Ë¤¢¤ë¡Ö¼õ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë¡×¤ò¥ª¥ó¤Ë¤·¤Þ¤¹¡£ +

³«¤¤¤Æ¤¤¤ë¥Õ¥©¥ë¥À¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï

+ +

¥á¥Ë¥å¡¼¤Î"¥µ¥Þ¥ê¡ä¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë"¤òÁªÂò¤¹¤ë¤³¤È¤Ç¡¢ +ÀßÄꤵ¤ì¤¿¥ë¡¼¥ë¤ò¸µ¤Ë¿¶¤êʬ¤±¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-11.html b/doc/manual/ja/sylpheed-11.html new file mode 100644 index 000000000..1074f0c97 --- /dev/null +++ b/doc/manual/ja/sylpheed-11.html @@ -0,0 +1,55 @@ + + + + + Sylpheed User's Manual: ¾¥á¡¼¥ë(¥á¡¼¥ëÊݸ·Á¼°)¤«¤éSylpheed(MH¥Õ¥©¥ë¥À·Á¼°)¤Ø¤Î°Ü¹Ô + + + + + +Next +Previous +Contents +
+

11. ¾¥á¡¼¥ë(¥á¡¼¥ëÊݸ·Á¼°)¤«¤éSylpheed(MH¥Õ¥©¥ë¥À·Á¼°)¤Ø¤Î°Ü¹Ô

+ +

11.1 mbox·Á¼°¤Î¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¤Î¼è¤ê¹þ¤ß +

+ +

¥Õ¥¡¥¤¥ë¥á¥Ë¥å¡¼¤«¤émbox¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È¤òÁªÂò¤·¡¢ +¥¤¥ó¥Ý¡¼¥È¥Õ¥¡¥¤¥ë¤Ë¤Ï¥¤¥ó¥Ý¡¼¥È¤·¤¿¤¤mbox·Á¼°¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÁªÂò¤·¤Þ¤¹¡£ +

¥¤¥ó¥Ý¡¼¥ÈÀè¤Ë¤ÏÁªÂò¤·¤¿¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òŸ³«¤¹¤ë¥Õ¥©¥ë¥À¤ò»ØÄꤷ +OK¤ò²¡¤»¤Ð¥¤¥ó¥Ý¡¼¥È¤µ¤ì¤Þ¤¹¡£ +mbox·Á¼°¤Ï¡¢"mbox"¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Î¾¤Ë¤âNetscape Messenger¤Î /nsmail¤Î²¼¤Î¥Õ¥¡ +¥¤¥ë¡¢KMail¤Î /Mail°Ê²¼¤Î¥Õ¥¡¥¤¥ëÅù¤Ë¤âÍøÍѤµ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤òÍøÍÑ +¤¹¤ë¤³¤È¤Ç°Ü¹Ô¤Ç¤­¤Þ¤¹¡£ +

¤¿¤À¤·¡¢KMail¤ÏźÉÕ¥Õ¥¡¥¤¥ë¤òÊÌ¥Õ¥¡¥¤¥ë¤Ë¤·¤Æ¤·¤Þ¤¦»ÅÍͤ¬¤¢¤ë¤é¤·¤¯¡¢ +źÉÕ¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¡¢Àµ¤·¤¯¥³¥ó¥Ð¡¼¥È¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£ +

11.2 Windows¤Î¥á¡¼¥é(Becky!¤äAL-Mail, Outlook Express4Åù)¤«¤é¤Î°Ü¹Ô +

+ +

WindowsÍѥե꡼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¢¤ë +MailExp¤òÍøÍѤ·¤Æ +"ɸ½àUNIX From·Á¼°¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹"¤Ë¥¨¥¯¥¹¥Ý¡¼¥È¤·¤Þ¤¹¡£ +¤½¤Î¸å¤½¤Î¥Õ¥¡¥¤¥ë¤ò°ÜÆ°¤·¤½¤Î¥Õ¥¡¥¤¥ë¤ò +mbox·Á¼°¤È¤·¤Æ¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£ +MailExp¤Ï¤È¤Æ¤â¿¤¯¤Î¥á¡¼¥é¤«¤é¤Î¥¤¥ó¥Ý¡¼¥È¤¬²Äǽ¤Ç¤¹¡£ +

11.3 Outlook Express 5¤Îdbx·Á¼°¤«¤é¤Î°Ü¹Ô +

+ +

Outlook Express 5¤Î·Á¼°¤ÏMailExp¤Ç¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç +OE5Conv¤òÍøÍѤ·¤Æ +mbox·Á¼°¤Ø¥¨¥¯¥¹¥Ý¡¼¥È¤·¤¿¸å¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ò +mbox·Á¼°¤È¤·¤Æ¥¤¥ó¥Ý¡¼¥È¤·¤Þ¤¹¡£ +

11.4 NMail4(NTool)¤«¤é¤Î°Ü¹Ô +

+ +

GTK+/GNOME¤Î¥á¡¼¥é¤Ç¤¢¤ëNmail¤«¤é¤Î°Ü¹Ô¤Ï¡¢ +Nmail4 to Sylpheed¤¬¸ø³«¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¤½¤Á¤é¤ò»²¾È¤¯¤À¤µ¤¤¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-12.html b/doc/manual/ja/sylpheed-12.html new file mode 100644 index 000000000..f71b02c42 --- /dev/null +++ b/doc/manual/ja/sylpheed-12.html @@ -0,0 +1,67 @@ + + + + + Sylpheed User's Manual: NetNews¤Î¹ØÆÉ + + + + + +Next +Previous +Contents +
+

12. NetNews¤Î¹ØÆÉ

+ +

+

12.1 ¥µ¡¼¥Ð¤ÎÄɲᦺï½ü +

+ +

+

¥µ¡¼¥Ð¤ÎÄɲÃ

+ +

Netnews¤òÆɤà¤Ë¤Ï¥µ¡¼¥Ð¤òSylpheed¤ËÅÐÏ¿¤·¤Þ¤¹¡£ +¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Î¡¢"NetNews"¤È½ñ¤«¤ì¤¿¥Õ¥©¥ë¥À¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢"¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òÄɲÃ"¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¥À¥¤¥¢¥í¥°¤Ë¥Ë¥å¡¼¥¹¥µ¡¼¥Ð̾¤òÆþÎϤ·¤ÆOK¥Ü¥¿¥ó¤ò²¡¤»¤ÐÅÐÏ¿´°Î»¤Ç¤¹¡£ +¥µ¡¼¥Ð¤Ï¤¤¤¯¤Ä¤Ç¤âÅÐÏ¿¤Ç¤­¤Þ¤¹¡£ +

¥µ¡¼¥Ð¤Îºï½ü

+ +

ÅÐÏ¿¤µ¤ì¤¿¥µ¡¼¥Ð̾¤Î½ñ¤«¤ì¤¿¥Õ¥©¥ë¥À¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢ +"¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òºï½ü"¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤·¤Æ"¤Ï¤¤"¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢"¢ª"¡¢"Enter"¤ÇÅÐÏ¿¤«¤é¾Ã¤»¤Þ¤¹¡£ +

¥­¥ã¥Ã¥·¥å¾ðÊó¤ÏÉü¸µ¤Ç¤­¤Ê¤¤¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ +

¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤Ë´Ø¤¹¤ëTips

+ +

¸½ºß¤ÎSylpheed¤Ï¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤Ë1¤Ä1¤Ä¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê´ó¤»¤Æ¹Ô¤­¤Þ¤¹¡£ +¤½¤Î¤¿¤á¡¢¥À¥¤¥ä¥ë¥¢¥Ã¥×´Ä¶­¤Ç¤ÏÃÙ¤¤¤«¤âÃΤì¤Þ¤»¤ó¡£ +

¤½¤³¤Çleafnode+ ¤Î¤è¤¦¤Ê¥ª¥Õ¥é¥¤¥ó¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤ò»È¤¦¤³¤È¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£ +Vine Linux¤Ê¤éVinePlus, Kondara MNU/Linux¤Ê¤éKondara-Zoo, +¤Ê¤É¤«¤éÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

12.2 ¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ¡¦¹ØÆɲò½ü +

+ +

¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ

+ +

+¥µ¡¼¥Ð¤ÎÄɲäÇÄɲä·¤¿¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤ò +¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ç±¦¥¯¥ê¥Ã¥¯¤·¤Æ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢ +"¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ"¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£ +

¤½¤·¤Æ¤½¤³¤Ë"fj.os.linux"¤Î¤è¤¦¤ËÆþÎϤ·¤ÆOK¤ò²¡¤»¤Ð¡¢¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×̾¤Î¥Õ¥©¥ë¥À¤¬ÅÐÏ¿¤µ¤ìÆɤá¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ +

¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆɲò½ü

+ +

¹ØÆɤÇÄɲä·¤¿¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤ò±¦¥¯¥ê¥Ã¥¯¤·¤Æ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢ +"¤Ï¤¤"¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢"¢ª"¡¢"Enter"¤Ç²ò½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤³¤Î¾ì¹ç¤â¥­¥ã¥Ã¥·¥å¤ä̤ÆɾðÊó¤Ï¥¯¥ê¥¢¤µ¤ì¤Æ¤·¤Þ¤¦¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ +

12.3 ¥Ë¥å¡¼¥¹¤òÆɤà +

+ +

¥Ë¥å¡¼¥¹¤Ï¡¢ +¥á¡¼¥ë¤Î±ÜÍ÷¤ÈÁ´¤¯Æ±¤¸ÊýË¡¤ÇÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤¿¤À¤·¡¢¸½ºß¤ÎSylpheed¤Ç¤Ï¡¢µ­»ö¤ÎÅê¹Æ¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-13.html b/doc/manual/ja/sylpheed-13.html new file mode 100644 index 000000000..1fdf09296 --- /dev/null +++ b/doc/manual/ja/sylpheed-13.html @@ -0,0 +1,203 @@ + + + + + Sylpheed User's Manual: ¥«¥¹¥¿¥Þ¥¤¥º(Á´È̤ÎÀßÄê) + + + + + +Next +Previous +Contents +
+

13. ¥«¥¹¥¿¥Þ¥¤¥º(Á´È̤ÎÀßÄê)

+ +

13.1 Á´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦ +

+ +

Á´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦¤ò³«¤¯¤Ë¤Ï +

    +
  • ¥á¥Ë¥å¡¼¤«¤é"ÀßÄê¡äÁ´È̤ÎÀßÄê"
  • +
  • ¥Ä¡¼¥ë¥Ð¡¼¤«¤éÀßÄê¤ò¥¯¥ê¥Ã¥¯
  • +
+ +¤¹¤ë¤³¤È¤Ç³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

13.2 ³Æ¹àÌܤÎÀâÌÀ +

+ +

(¼õ¿®)¥¿¥Ö

+ +

³°Éô¥×¥í¥°¥é¥à

+ +

¥á¡¼¥ë¤Î¼õ¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢ +SylpheedËÜÂΤμõ¿®Éô¤ò»ÈÍѤ»¤º¤Ë¤½¤Î¥×¥í¥°¥é¥à¤òÍøÍѤ·¤Æ¼õ¿®¤ò¹Ô¤¤¤Þ¤¹¡£ +

¥í¡¼¥«¥ë¥¹¥×¡¼¥ë

+ +

¥¹¥×¡¼¥ë¤«¤é¼è¤ê¹þ¤à¤òÁªÂò¤¹¤ì¤Ð¡¢ +"[¥¹¥×¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê]/[¥æ¡¼¥¶Ì¾]"¤Î¥Õ¥¡¥¤¥ë¤«¤é¥á¥Ã¥»¡¼¥¸¤¬¼è¤ê¹þ¤Þ¤ì¤Þ¤¹¡£ +¼è¤ê¹þ¤ß»þ¤Ë¿¶¤êʬ¤±¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢¼è¤ê¹þ¤ß»þ¤Ë¿¶¤êʬ¤±¤é¤ì¤Þ¤¹¡£ +

¿·Ãå¥á¡¼¥ë¤ò¼«Æ°¥Á¥§¥Ã¥¯¤¹¤ë

+ +

̤¼ÂÁõ +

µ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¥Á¥§¥Ã¥¯¤¹¤ë

+ +

Sylpheedµ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¼«Æ°¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤ì¤Þ¤¹¡£ +

(Á÷¿®¥¿¥Ö)

+ +

+

³°Éô¥×¥í¥°¥é¥à

+ +

̤¼ÂÁõ +

Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤¨¤ËÊݸ¤¹¤ë

+ +

ÁªÂò¤¹¤ë¤ÈÁ÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤¨¤ËÊݸ¤·¤Æ¤¯¤ì¤Þ¤¹¡£ +

Á÷¿®¤Ë¼ºÇÔ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤ë

+ +

ÁªÂò¤¹¤ë¤ÈÁ÷¿®¤Ë¼ºÇÔ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤Æ¤¯¤ì¤Þ¤¹¡£ +"Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®"¤Ç¤â¤¦1ÅÙÁ÷¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

Á÷¿®¥³¡¼¥É¥»¥Ã¥È

+ +

libjconv¤ò¥ª¥ó¤Ë¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¤È¤­¡¢ +¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë¤È¤­¤Îʸ»ú¥³¡¼¥É¤òÁªÂò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

Ä̾ï¤Ï"¼«Æ°ÀßÄê"¤ò¿ä¾©¤·¤Þ¤¹¡£ +¤Á¤Ê¤ß¤Ë¡¢ja_JP¤Î¥í¥±¡¼¥ë¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ISO-2022-JP¤¬ÁªÂò¤µ¤ì¤Þ¤¹¡£ +ÆüËܸì¤ò»ÈÍѤ¹¤ë¤È¤­¤Ï¡¢"ISO-2022-JP"¤ÎÀßÄê¤âÌäÂê¤Ê¤¤¤Ç¤¹¡£ +

UTF8Åù¤â»ÈÍѤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬¡¢Áê¼ê¤¬Æɤá¤ë¤È³Îǧ¤Ç¤­¤ë¾ì¹ç¤Î¤ß +»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£ +

(ºîÀ®)¥¿¥Ö

+ +

°úÍÑ

+ +

°úÍÑÉä¤È°úÍѤηÁ¼°¤òÀßÄꤷ¤Þ¤¹¡£ +°úÍÑÉä¤ËÀßÄꤷ¤¿Ê¸»úÎ󤬡¢>¤Ç¡¢ +°úÍѤηÁ¼°¤¬ +

+On %d
+%f wrote:
+
+ +¤À¤Ã¤¿¾ì¹ç +
+On [ÆüÉÕ]
+[º¹½Ð¿Í] wrote:
+> ¸µ¤Î¥á¥Ã¥»¡¼¥¸¤Îʸ¾Ï
+> 2¹ÔÌÜ
+
+ +¤È¤¤¤¦¤è¤¦¤Ë°úÍѤ·¤ÆÊÖ¿®»þ¤Ë°úÍѤµ¤ì¤Þ¤¹¡£ +µ­¹æ¤ÎÀâÌÀ¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ì¤Ð¡¢%¤Ç»Ï¤Þ¤ë¤â¤Î¤ÎÀâÌÀ¤¬¤Ç¤Æ¤­¤Þ¤¹¡£ +¤Á¤Ê¤ß¤Ë¡¢¤³¤Î¥¦¥£¥ó¥É¥¦¤ÏÁ´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦¤òÊĤ¸¤Ê¤¤¤ÈÊĤ¸¤é¤ì¤Þ¤»¤ó¡£ +
    +
  • %d: ÆüÉÕ
  • +
  • %f: º¹½Ð¿Í
  • +
  • %s: ·ï̾
  • +
  • %t: °¸Àè
  • +
  • %i: ¥á¥Ã¥»¡¼¥¸ID
  • +
  • %%: %
  • +
+

½ð̾

+ +

¼«Æ°Åª¤Ë½ð̾¤òÁÞÆþ¤¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤ËºÇ¸å¤ÎÊý¤Ë +¼«Æ°Åª¤Ë½ð̾¤¬ÁÞÆþ¤µ¤ì¤Þ¤¹¡£ +

+[¤½¤Î»þ¤ËÀßÄꤵ¤ì¤Æ¤ë½ð̾¤Î¶èÀÚ¤ê]
+[³Æ¥¢¥«¥¦¥ó¥ÈÀßÄê¤Î½ð̾¥Õ¥¡¥¤¥ë]
+
+ +¤È¤¤¤¦¤è¤¦¤ËÁÞÆþ¤µ¤ì¤Þ¤¹¡£ +

(ɽ¼¨)¥¿¥Ö

+ +

¤³¤³¤Î¹àÌܤÏɽ¼¨¤À¤±¤Ç¤¢¤ê¡¢¥á¥Ã¥»¡¼¥¸ËÜÂΤ˱ƶÁ¤òÍ¿¤¨¤Þ¤»¤ó¡£ +

¥Õ¥©¥ó¥È

+ +

¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¥Õ¥©¥ó¥È¤òÀßÄê¤Ç¤­¤Þ¤¹¡£ +²£¤Î"..."¥Ü¥¿¥ó¤ò²¡¤»¤Ð¥Õ¥©¥ó¥ÈÁªÂò¥À¥¤¥¢¥í¥°¤ò¸Æ¤Ó½Ð¤»¤Þ¤¹¤¬¡¢ +¤¢¤Þ¤ê¤ªÁ¦¤á¤Ï¤·¤Þ¤»¤ó¡£ +

¤Á¤Ê¤ß¤Ë¡¢¥Þ¥Ë¥å¥¢¥ëºî¼Ô¤Ï +

+-alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0
+
+ +¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£´ðËÜŪ¤Ë¡¢¸ÇÄêÉý¥Õ¥©¥ó¥È¤ËÀßÄꤹ¤ë¤³¤È¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£ +¥á¥Ë¥å¡¼¤Ê¤É¤Î¥Õ¥©¥ó¥È¤òÀßÄꤹ¤ë¾ì¹ç¤Ë¤Ä¤¤¤Æ¤ÏFAQ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ +

¥á¥Ã¥»¡¼¥¸¤Î¿§¤òÍ­¸ú¤Ë¤¹¤ë

+ +

ÁªÂò¤¹¤ì¤Ð°úÍѤµ¤ì¤¿Éôʬ¤äURL¤ÎÉôʬ¤Î¿§¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢ +¤ß¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£ +

¥Ø¥Ã¥À¤Î¹àÌܤòËÝÌõ¤¹¤ë

+ +

From:¤ò°¸Àè: Subject: ¤ò·ï̾:¤Ë¤·¤Æɽ¼¨¤·¤¿¤ê¤·¤Þ¤¹¡£ +¹¥¤ß¤¬Ê¬¤«¤ì¤ë¤¿¤á¤Ë¡¢ÀßÄê¹àÌܤ¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£ +

¥µ¥Þ¥ê¤ò¥¹¥ì¥Ã¥Éɽ¼¨¤¹¤ë

+ +

¥µ¥Þ¥ê¤ò¥¹¥ì¥Ã¥Éɽ¼¨¤·¤Þ¤¹¡£ +¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥á¥Ë¥å¡¼¤Î"¥µ¥Þ¥ê¡ä¥¹¥ì¥Ã¥Éɽ¼¨", +"¥µ¥Þ¥ê¡ä¥¹¥ì¥Ã¥É²ò½ü"¤ÇÊѹ¹²Äǽ¤Ç¡¢¤É¤Á¤é¤ÇÀßÄꤷ¤Æ¤âξÊý¤ËÈ¿±Ç¤µ¤ì¤Þ¤¹¡£ +

2¥Ð¥¤¥È±Ñ¿ô»ú¤ò1¥Ð¥¤¥Èʸ»ú¤Çɽ¼¨¤¹¤ë

+ +

¤³¤ì¤â¹¥¤ß¤ÎÌäÂê¤Ç¤¹¤¬¡¢2¥Ð¥¤¥È±Ñ¿ô»ú¤ò1¥Ð¥¤¥Èʸ»ú¤Çɽ¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +̵ÍýÌðÍýɽ¼¨¤ÇÊѹ¹¤·¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¤º¤ì¤Æ¤·¤Þ¤¦¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ +

º¹½Ð¿Í¤¬¼«Ê¬¤Î¾ì¹ç¤Ï'º¹½Ð¿Í'¥«¥é¥à¤Ë°¸Àè¤òɽ¼¨¤¹¤ë

+ +

¥µ¥Þ¥ê¥Ó¥å¡¼¤Îº¹½Ð¿Í¥«¥é¥à¤Ç¡¢°¸Àè¿Í¤¬¸½ºß¤Î¥¢¥«¥¦¥ó¥ÈÀßÄê¤ÈƱ¤¸¾ì¹ç¡¢ +"--> °¸Àè"¤È¤¤¤¦¤è¤¦¤Ëɽ¼¨¤Ç¤­¤Þ¤¹¡£ +

¹Ô´Ö¤ò¶õ¤±¤ë

+ +

ÀßÄꤷ¤¿¥Ô¥¯¥»¥ëʬ¹Ô´Ö¤ò¶õ¤±¤Æɽ¼¨¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ +

¹ÔƬ¤ò¶õ¤±¤ë

+ +

¹ÔƬ¤ò¶õ¤±¤Æɽ¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë´Êά¥Ø¥Ã¥À¤òɽ¼¨¤¹¤ë

+ +

¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë´Êά¥Ø¥Ã¥À¤òɽ¼¨¤·¤Þ¤¹¡£ +¸½ºß¤Î¤È¤³¤í¡¢É½¼¨ÆâÍƤϥ½¡¼¥¹¥³¡¼¥É¤ò¤¤¤¸¤ë°Ê³°¤Ç¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¡£ +

¥µ¥Þ¥ê¤Îɽ¼¨¹àÌܤòÀßÄê...

+ +

¥µ¥Þ¥ê¤Îɽ¼¨¹àÌܤòÀßÄê¤Ç¤­¤Þ¤¹¡£ +¥¯¥ê¥Ã¥¯¤·¤Æ¡¢É¬Íפʤâ¤Î¤òÁªÂò¤·¤ÆOK¥Ü¥¿¥ó¤ò²¡¤·¤Æ´°Î»¤Ç¤¹¡£ +

(¿¶¤êʬ¤±)¥¿¥Ö

+ +

+¿¶¤êʬ¤±¤ÎÀßÄê¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ +

(¥¤¥ó¥¿¥Õ¥§¡¼¥¹)¥¿¥Ö

+ +

+

Emacs¾å¤Î¥á¡¼¥é¤Î¥Þ¥¦¥¹Áàºî»þ¤ÎµóÆ°¤ò¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë

+ +

¥µ¥Þ¥ê¥Ó¥å¡¼¤ò±¦¥¯¥ê¥Ã¥¯¤Ç¤Ï¤Ê¤¯¡¢Ãæ¥Ü¥¿¥ó¥¯¥ê¥Ã¥¯¤À¤±¤Ç¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ç¹¹¿·¤Ç¤­¤Þ¤¹¡£ +

¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤¯

+ +

¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤±¤Þ¤¹¡£ +ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¸åEnter¥­¡¼¤äÃæ¥Ü¥¿¥ó¥¯¥ê¥Ã¥¯¤Çɽ¼¨¤ò¹¹¿·¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢ +¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËÀèƬ¤Î̤ÆɤΥե饰¤ò¾Ã¤·¤Æ¤·¤Þ¤¦¿´ÇÛ¤¬¤¢¤ê¤Þ¤»¤ó¡£ +

½ªÎ»»þ

+ +

½ªÎ»»þ¤Ë³Îǧ¤¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢Sylpheed¤ò½ªÎ»¤¹¤ë¤È¤­¤Ë¡¢ +ËÜÅö¤Ë½ªÎ»¤·¤Æ¤¤¤¤¤«¤É¤¦¤«¼ÁÌ䤷¤Æ¤­¤Þ¤¹¡£ +

½ªÎ»»þ¤Ë¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢ +½ªÎ»»þ¤Ë¥´¥ßÈ¢¤ò¶õ¤Ë¤·¤Æ¤¯¤ì¤Þ¤¹¡£ +¶õ¤Ë¤¹¤ëÁ°¤Ë¿Ò¤Í¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢¿Ò¤Í¤Æ¤¯¤ì¤Þ¤¹¡£ +

(¤½¤Î¾)¥¿¥Ö

+ +

+

³°Éô¥Ö¥é¥¦¥¶

+ +

³°Éô¥Ö¥é¥¦¥¶¤Î¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Þ¤¹¡£ +%s¤ÏURI¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£¥Þ¥Ë¥å¥¢¥ëɽ¼¨¤äURI¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤Ç»ÈÍѤµ¤ì¤Þ¤¹¡£ +¤¿¤À¤·¡¢¥Ç¥Õ¥©¥ë¥È¤Înetscape -remote 'openURL(%s,raise)'¤Ç¤Ï¡¢netscape¤¬ +ºÇ½é¤«¤éµ¯Æ°¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤¿¤á¡¢Êѹ¹¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£ +

°õºþ

+ +

°õºþ¤Ë»ÈÍѤ¹¤ë¥³¥Þ¥ó¥É¤òÁªÂò¤Ç¤­¤Þ¤¹¡£%s¤¬¥á¥Ã¥»¡¼¥¸¤Î¥Õ¥¡¥¤¥ë¤ËÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£ +hoge < %s | lpr¤È¤¤¤¦¤è¤¦¤Ë¤·¤Æ¥Õ¥£¥ë¥¿¤òÀßÄꤹ¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ +

³°Éô¥¨¥Ç¥£¥¿

+ +

³°Éô¥¨¥Ç¥£¥¿¤òÁªÂò¤Ç¤­¤Þ¤¹¡£%s¤Ï°ì»þ¥Õ¥¡¥¤¥ë¤Î¥Õ¥¡¥¤¥ë̾¤ËÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-14.html b/doc/manual/ja/sylpheed-14.html new file mode 100644 index 000000000..eb5f96de1 --- /dev/null +++ b/doc/manual/ja/sylpheed-14.html @@ -0,0 +1,208 @@ + + + + + Sylpheed User's Manual: ¥ê¥Õ¥¡¥ì¥ó¥¹ + + + + + +Next +Previous +Contents +
+

14. ¥ê¥Õ¥¡¥ì¥ó¥¹

+ +

+

14.1 ¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¥ê¥¹¥È +

+ +

+

°ìÈÌŪ¤Ê¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼

+ +

+

    +
  • Ctrl+x ÀÚ¤ê¼è¤ê
  • +
  • Ctrl+c ¥³¥Ô¡¼
  • +
  • Ctrl+v Ž¤êÉÕ¤±
  • +
  • Ctrl+a (¥á¥Ã¥»¡¼¥¸Æâ¤Îʸ»ú¤ò)¤¹¤Ù¤Æ¤òÁªÂò
  • +
  • Ctrl+s ¸¡º÷
  • +
  • Alt+l ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®
  • +
  • Alt+n ¿·µ¬¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®
  • +
  • Alt+r ÊÖ¿®
  • +
  • Ctrl+q °úÍѤ·¤ÆÊÖ¿®
  • +
  • Ctrl+f žÁ÷
  • +
  • Ctrl+h ¤¹¤Ù¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨
  • +
  • Alt+x (¥Þ¡¼¥¯¤ò)¼Â¹Ô
  • +
  • Alt+u ºÇ¿·¤Î¾õÂ֤˹¹¿·
  • +
  • Alt+g Ê̤Υե©¥ë¥À¤Ø°ÜÆ°
  • +
  • Ctrl+t ¥¹¥ì¥Ã¥Éɽ¼¨
  • +
  • Ctrl+Shift+t ¥¹¥ì¥Ã¥Éɽ¼¨²ò½ü
  • +
  • Ctrl+n ¿Ê¤à
  • +
  • Ctrl+p Ìá¤ë
  • +
  • Alt+a ¥¢¥É¥ì¥¹Ä¢
  • +
  • Alt+l ¥í¥°¥¦¥£¥ó¥É¥¦
  • +
  • Alt+w ÊĤ¸¤ë(¸½ºß¤Ç¤Ï½ªÎ»¤ÈƱ¤¸)
  • +
  • Alt+q Sylpheed¤Î½ªÎ»
  • +
+

1ʸ»ú¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼

+ +

¼ç¤Ë¡¢Mew/Wanderlust ¥­¡¼¥Ð¥¤¥ó¥É¤Ç¤¹¡£ +±ÜÍ÷ÍѤǤÏ","¤Ç¶èÀÚ¤é¤ì¤¿¤â¤Î¤Ï2¤Ä¤È¤â»ÈÍѲġ¢Âçʸ»ú¤Ï¼ç¤ËShift¤ò²¡¤·¤¿¾ì¹ç¤Ç¤¹¡£ +(CapsLock¤Ç¤â²Ä) +

    +
  • ¥¹¥Ú¡¼¥¹¥­¡¼ ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤ò²¼¥¹¥¯¥í¡¼¥ë+¼¡¤Î̤Æɥ᡼¥ë¤Ø¥¸¥ã¥ó¥×(¥Õ¥©¥ë¥À±Û¤·²Ä)
  • +
  • ¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¥­¡¼ ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤ò¾å¥¹¥¯¥í¡¼¥ë
  • +
  • Delete¥­¡¼ ¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¥­¡¼¤ËƱ¤¸
  • +
  • n,N¥­¡¼ ¼¡¤Î¥á¥Ã¥»¡¼¥¸¤Ë¿Ê¤à
  • +
  • p,P¥­¡¼ Á°¤Î¥á¥Ã¥»¡¼¥¸¤ËÌá¤ë
  • +
  • v,V¥­¡¼ ¥µ¥Þ¥ê¤À¤±¤Î¥â¡¼¥É¤È¥µ¥Þ¥ê+¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Î¥â¡¼¥É¤ÎÀÚÂؤ¨
  • +
  • Return¥­¡¼ 1¹Ô¤À¤±²¼¥¹¥¯¥í¡¼¥ë(ɽ¼¨¹¹¿·¤ËÍøÍѲÄ)
  • +
  • Alt+Return Ìó1¹Ô¤À¤±¾å¥¹¥¯¥í¡¼¥ë
  • +
  • ²¼¥­¡¼ ¼¡¤Î¥á¥Ã¥»¡¼¥¸¤Ë¿Ê¤à(¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¹¹¿·Ìµ¤·)
  • +
  • ¾å¥­¡¼ Á°¤Î¥á¥Ã¥»¡¼¥¸¤ËÌá¤ë(¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¹¹¿·Ìµ¤·)
  • +
  • +¥­¡¼ ¥¹¥ì¥Ã¥É¤ò³«¤¯
  • +
  • -¥­¡¼ ¥¹¥ì¥Ã¥É¤òÊĤ¸¤ë
  • +
  • *¥­¡¼ ¥Þ¡¼¥¯(ÌÜ°õ¤À¤±)¤òÉÕ¤±¤ë
  • +
  • d¥­¡¼ ¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë¥Þ¡¼¥¯¤òÉÕ¤±¤ë
  • +
  • o¥­¡¼ ¥á¥Ã¥»¡¼¥¸¤Î°ÜÆ°ÀèÁªÂò+°ÜÆ°¤¹¤ë¥Þ¡¼¥¯¤òÉÕ¤±¤ë
  • +
  • u¥­¡¼ ¥Þ¡¼¥¯¤ò²ò½ü¤¹¤ë
  • +
  • x¥­¡¼ ³Æ¼ï¥Þ¡¼¥¯¤ò¼ÂºÝ¤Ë¼Â¹Ô¤¹¤ë
  • +
  • !¥­¡¼ ̤Æɤˤ¹¤ë
  • +
  • w¥­¡¼ ¿·¤·¤¤¥á¥Ã¥»¡¼¥¸¤ò½ñ¤¯
  • +
  • a¥­¡¼ ÊÖ¿®¤¹¤ë
  • +
  • A¥­¡¼ °úÍѤ·¤ÆÊÖ¿®¤¹¤ë
  • +
  • f,F¥­¡¼ žÁ÷¤¹¤ë
  • +
  • y¥­¡¼ ¥á¥Ã¥»¡¼¥¸¤òÊݸ¤¹¤ë
  • +
  • D¥­¡¼ ¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë
  • +
  • º¸, Escape¥­¡¼ ¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ø¥Õ¥©¡¼¥«¥¹°ÜÆ°
  • +
  • (źÉÕlist¤Ç)t ¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨
  • +
  • (źÉÕlist¤Ç)y ̾Á°¤òÉÕ¤±¤ÆÊݸ
  • +
  • Q¥­¡¼ Sylpheed¤Î½ªÎ»
  • +
+

¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼

+ +

+

    +
  • Ctrl+m źÉÕ¥Õ¥¡¥¤¥ë¤ÎÄɲÃ
  • +
  • (źÉեꥹ¥È¤Ç)Delete¥­¡¼ źÉÕ¤ò²ò½ü
  • +
  • Ctrl+l ¥á¥Ã¥»¡¼¥¸ËÜʸ¤Ë¥Õ¥¡¥¤¥ë¤òÁÞÆþ
  • +
  • Ctrl+g ¥á¥Ã¥»¡¼¥¸ËÜʸ¤Ë½ð̾¤òÁÞÆþ
  • +
  • Alt+s ¥á¡¼¥ë¤òÁ÷¿®
  • +
  • Alt+a ¥¢¥É¥ì¥¹Ä¢
  • +
  • Alt+w ÊĤ¸¤ë
  • +
+

¥¢¥É¥ì¥¹Ä¢¤Ç¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼

+ +

+

    +
  • Alt+n ¿·µ¬¥¢¥É¥ì¥¹¤ÎÄɲÃ
  • +
  • Alt+g ¿·µ¬¥°¥ë¡¼¥×¤ÎºîÀ®
  • +
  • Alt+r ¿·µ¬¥Õ¥©¥ë¥À¤ÎºîÀ®
  • +
  • Alt+return ¥¢¥É¥ì¥¹¾ðÊó¤ÎÊÔ½¸
  • +
  • Alt+w ÊĤ¸¤ë
  • +
+

14.2 ¥¢¥É¥ì¥¹Ä¢¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È +

+ +

¤³¤³¤Ë$HOME/.sylpheed/addressbook.xml"¤ËÅÐÏ¿¤µ¤ì¤ë +¥¢¥É¥ì¥¹Ä¢¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼¨¤·¤Þ¤¹¡£ +

¥¿¥°¤Ï<Í×ÁÇ̾> Ãæ¿È </Í×ÁÇ̾>¤Ç¤«¤Ê¤é¤ºÊĤ¸¤Æ¤ª¤¯¤â¤Î¤È¤·¤Þ¤¹¡£ +ÊĤ¸¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¤Ïͽ´ü¤»¤ÌÆ°ºî¤òµ¯¤³¤¹¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ +

°À­¤Ï<¥¿¥°Ì¾ °À­="°À­¤ÎÆâÍÆ">¤È¤¤¤¦¤è¤¦¤ËÍøÍѤµ¤ì¤Þ¤¹¡£ +̵¤Î¾ì¹ç¤Ï¸ºß¤·¤Þ¤»¤ó¡£ +ÆâÍƤ¢¤ê ¤Ï³«¤­¥¿¥°¤ÈÊĤ¸¥¿¥°¤Î´Ö¤Ë¾ðÊó¤¬Â¸ºß¤¹¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£ +

Í×ÁǤβòÀâ

+ +

+

xmlÀë¸À

+ +

EUC-JP¤Î´Á»ú¥³¡¼¥É¤òÍøÍѤ¹¤ëSylpheed¥¢¥É¥ì¥¹Ä¢¥Ç¡¼¥¿¤ÎºÇ½é¤Î¹Ô¤Ï +

+<?xml version="1.0" encoding="EUC-JP"?>
+
+ +¤Ç»Ï¤Þ¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +

addressbook Í×ÁÇ(ɬ¿Ü)

+ +

°À­: ̵ +

addressbook¤ÎÎΰè¤òɽ¤·¤Þ¤¹¡£ +Sylpheed¤Î¥¢¥É¥ì¥¹Ä¢¤Î¾ì¹ç¤Ï2¹ÔÌܤË<addressbook>¤Ç +ºÇ½ª¹Ô¤¬</addressbook>¤È¤Ê¤ê¤Þ¤¹¡£ +

common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ(ɬ¿Ü)

+ +

°À­: ̵ +

¶¦Í­¥¢¥É¥ì¥¹¤È¸Ä¿ÍÍÑ¥¢¥É¥ì¥¹¤ò¼¨¤·¤Þ¤¹¡£ +

addressbookÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +

folder Í×ÁÇ

+ +

°À­: name(¥Õ¥©¥ë¥À̾) +

¥Õ¥©¥ë¥À̾¤ò¼¨¤·¤Þ¤¹¡£common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ, folderÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +

¤Þ¤¿¡¢folderÍ×ÁǤÎÃæ¤ËfolderÍ×ÁǤò´Þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

group Í×ÁÇ

+ +

°À­: name(¥°¥ë¡¼¥×̾) +

¥°¥ë¡¼¥×̾¤òɽ¤·¤Þ¤¹¡£common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ, folderÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +

groupÍ×ÁǤˤÏitemÍ×Áǰʳ°³ÊǼ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +

item Í×ÁÇ

+ +

°À­: ̵ +

¤½¤ì¤¾¤ì¤Î¥¢¥É¥ì¥¹¾ðÊó¤¬Ç¼¤á¤é¤ì¤ë¥¢¥¤¥Æ¥à¤ò¼¨¤·¤Þ¤¹¡£ +

common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ, folderÍ×ÁÇ, groupÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +

name Í×ÁÇ

+ +

°À­: ̵; ÆâÍƤ¢¤ê +

¤½¤Î¥¢¥É¥ì¥¹¾ðÊó¤Î̾Á°¤ò°ÕÌ£¤·¤Þ¤¹¡£ +

itemÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +

address Í×ÁÇ

+ +

°À­: ̵; ÆâÍƤ¢¤ê +

¤½¤Î¥¢¥É¥ì¥¹¾ðÊó¤Î¥á¡¼¥ë¥¢¥É¥ì¥¹¤ò°ÕÌ£¤·¤Þ¤¹¡£ +

itemÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +

remarks Í×ÁÇ

+ +

°À­: ̵; ÆâÍƤ¢¤ê +

¤½¤Î¥¢¥É¥ì¥¹¾ðÊó¤ÎÈ÷¹Í¤ò°ÕÌ£¤·¤Þ¤¹¡£ +

¥¢¥É¥ì¥¹Ä¢¥µ¥ó¥×¥ë

+ +

°Ê²¼¤Ë¥µ¥ó¥×¥ë¤ò¼¨¤·¤Þ¤¹¡£ +


+
+<?xml version="1.0" encoding="EUC-JP"?>
+<addressbook>
+
+<common_address>
+        <group name="¥Æ¥¹¥È¥°¥ë¡¼¥×">
+                <item>
+                        <name>¥Æ¥¹¥È¥¢¥É¥ì¥¹</name>
+                        <address>testtest@hogheoge.co.jp</address>
+                        <remarks>¤È¤¯¤Ë¤Ê¤·</remarks>
+                </item>
+        </group>
+        <item>
+                <name>Sylpheed-ML</name>
+                <address>sylpheed@silver-forest.com</address>
+                <remarks></remarks>
+        </item>
+</common_address>
+
+<personal_address>
+        <folder name="¥Æ¥¹¥È¥Õ¥©¥ë¥À">
+                <item>
+                        <name>A¤µ¤ó(²¾Ì¾)</name>
+                        <address>question_a.toka@dotcom.tokaiu.net.org</address>
+                        <remarks></remarks>
+                </item>
+        </folder>
+</personal_address>
+
+</addressbook>
+
+
+
+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-15.html b/doc/manual/ja/sylpheed-15.html new file mode 100644 index 000000000..c32f33d3c --- /dev/null +++ b/doc/manual/ja/sylpheed-15.html @@ -0,0 +1,63 @@ + + + + + Sylpheed User's Manual: FAQ + + + + + +Next +Previous +Contents +
+

15. FAQ

+ +

+

15.1 ¥Ë¥å¡¼¥¹¤Î¥á¥Ã¥»¡¼¥¸Ì¤ÆɾðÊó¤Ë¤Ä¤¤¤Æ +

+ +

Q. Sylpheed¤Ç¤ÏƱ¤¸Message¤Î̤ÆɾðÊó¤ò°Û¤Ê¤ë¥Õ¥©¥ë¥À´Ö¤Ç´ÉÍý¤·¤Æ¤¯¤ì¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«? +

+

A. ¸½ºß¤ÎSylpheed¤Ï̤ÆɾðÊó¤Ï¥Õ¥©¥ë¥Àñ°Ì¤Ç´ÉÍý¤·¤Æ¤¤¤ë¤¿¤á¡¢ +¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤´¤È¤Ë̤ÆɾðÊó¤ÏÊѤï¤Ã¤ÆÍè¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ +

15.2 MSN¤Î¥á¡¼¥ë¥¢¥«¥¦¥ó¥È¤Î»ÈÍѤˤĤ¤¤Æ +

+ +

Q. »ä¤ÏMSN¤òÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢Àµ¤·¤¯ÀßÄꤷ¤¿¤Ï¤º¤Ê¤Î¤Ë¼õ¿®¤Ç¤­¤Þ¤»¤ó¡£ +

+

A. MSN¤ÏÆȼ«¥×¥í¥È¥³¥ë¤òÍøÍѤ·¤Æ¤¤¤ë¤È¤¤¤¦ÏäʤΤǡ¢Sylpheed¤Ç¤ÏÂбþ¤·¤Æ¤¤¤Þ¤»¤ó¡£ +¾ðÊóÄ󶡤¤¤¿¤À¤±¤ì¤ÐÂбþ¤Ç¤­¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¡£ +

15.3 ¥á¥Ë¥å¡¼¤Ê¤É¤Î¥Õ¥©¥ó¥ÈÊѹ¹¤Ë¤Ä¤¤¤Æ +

+ +

Q. ¥á¥Ã¥»¡¼¥¸ËÜʸ¤Î¥Õ¥©¥ó¥È¤Ï +Á´È̤ÎÀßÄ꤫¤éÊѹ¹ +¤Ç¤­¤Þ¤·¤¿¤¬¡¢¥µ¥Þ¥ê¤ä¥á¥Ë¥å¡¼¤Ê¤É¤Î¥Õ¥©¥ó¥È¤ÏÊѹ¹¤Ç¤­¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«? +

+

A. ¤Ç¤­¤Þ¤¹¡£$HOME/.sylpheed/gtkrc¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£ +

+style "Sylpheed-Widget-font" {
+       fontset = "-adobe-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1,\
+                  -alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0"
+}
+class "GtkWidget" style "Sylpheed-Widget-font"
+
+ +¤È¤¤¤¦¤è¤¦¤Ê¥Õ¥¡¥¤¥ë¤Ç¤¹¡£ +

15.4 ¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤Î¥­¡¼¥Ð¥¤¥ó¥É¤ÎÊѹ¹ +

+ +

Q. ¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤Î¥­¡¼¥Ð¥¤¥ó¥É¤ÎÊѹ¹¤Ï½ÐÍè¤Þ¤¹¤«? +

+

A. ¥á¥Ë¥å¡¼¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¹àÌܤ˴ؤ·¤Æ¤Ï¤Ç¤­¤Þ¤¹¡£ +¥á¥Ë¥å¡¼¤ÇÊѹ¹¤·¤¿¤¤¹àÌܤ˥«¡¼¥½¥ë¤ò¹ç¤ï¤»¤Æ¤«¤é¡¢¤½¤ÎÉôʬ¤ÇÊѹ¹¤·¤¿¤¤¥­¡¼¤ò²¡¤»¤Ð¡¢ +³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£Backspace¥­¡¼¤ò²¡¤»¤Ð¡¢¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¤¿¤À¤·Êѹ¹¤ÏÊݸ¤µ¤ì¤Þ¤»¤ó¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-16.html b/doc/manual/ja/sylpheed-16.html new file mode 100644 index 000000000..9e001e466 --- /dev/null +++ b/doc/manual/ja/sylpheed-16.html @@ -0,0 +1,155 @@ + + + + + Sylpheed User's Manual: ¾ðÊó + + + + + +Next +Previous +Contents +
+

16. ¾ðÊó

+ +

+

16.1 Sylpheed ´ØÏ¢¥µ¥¤¥È +

+ +

+

Sylpheed ¥ª¥Õ¥£¥·¥ã¥ëWeb¥µ¥¤¥È

+ +

Sylpheed ¥ª¥Õ¥£¥·¥ã¥ëWeb¥µ¥¤¥È¤Î¾ì½ê¤Ï¡¢ +http://sylpheed.good-day.net/ +¤Ç¤¹¡£ +

Sylpheed ºÇ¿·ÈÇÆþ¼êÀè

+ +

+http://sylpheed.good-day.net/sylpheed/¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£ +

+

rpm¤ÎÆþ¼êÀè

+ +

+http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html

¤Ç¤Û¤È¤ó¤É¤ÎRedHat Package Manager(rpm)¤òÍøÍѤ·¤¿Linux Distribution¤ËÂбþ¤Ç¤­¤ë¤È»×¤ï¤ì¤ë +rpm¤¬¤¢¤ê¤Þ¤¹¡£¤½¤ì¤¾¤ì¤ÎDistributionÍѤΤâ¤Î¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ç¤³¤ì¤òÍøÍѤ·¤Æ¤â¤Û¤È¤ó¤ÉÌäÂê¤Ê¤¤¤Ç¤·¤ç¤¦¡£ +¿ʬºÇ¿·¤Ç¤¹¡£ +

³ÆDistributionÍѤȤ·¤Æ¤Ï¡¢ +Vine LinuxÍѤËVine Plus¡¢ +Kondara MNU/LinuxÍѤËKondara-Zoo¤Ê¤É¤¬Â¸ºß¤·¤Þ¤¹¡£ +

Debian Package¤ÎÆþ¼êÀè

+ +

Debian JP¤Îwoody-jp¤Ë¸ºß¤·¤Þ¤¹¡£ +

FreeBSD ports¤ÎÆþ¼êÀè

+ +

16.2 ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È +

+ +

Sylpheed ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ï good-day.net ¤Ç±¿ÍѤµ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ +

Sylpheed ¤Ë´Ø¤¹¤ëÁ´ÈÌŪ¤ÊÏÃÂê¤ò°·¤¦¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ç¤¹¡£ÆüËܸì +( +sylpheed-jp@good-day.net) ¤È +±Ñ¸ì ( +sylpheed@good-day.net) ¤Î2¼ïÎब¤¢¤ê¤Þ¤¹¡£ +

°Ê²¼¤Ï +sylpheed-jp@good-day.net ¤òÎã¤ËÀâÌÀ¤·¤Þ¤¹¤¬¡¢ +sylpheed@good-day.net ¤Î¾ì¹ç¤ÏŬµ¹ÆɤßÂؤ¨¤Æ¤¯¤À¤µ¤¤ +(sylpheed-jp ¢ª sylpheed, sylpheed-jp-ctl ¢ª sylpheed-ctl)¡£ +

+

»²²ÃÊýË¡

+ +

+

+

+subscribe ¤¢¤Ê¤¿¤Î»á̾
+
+ +¤ÈËÜʸ¤Ë½ñ¤¤¤¿¥á¡¼¥ë¤ò +sylpheed-jp-ctl@good-day.net °¸¤ËÁ÷¿®¤·¤Æ¤¯¤À¤µ¤¤¡£ +̾Á°¤ÏȾ³Ñ±Ñ¿ô»ú(¥í¡¼¥Þ»ú)¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +¤Þ¤¿Á´³Ñ¥¹¥Ú¡¼¥¹¤Ê¤É¤Î¥³¡¼¥É¤¬¤¢¤ë¤È¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ +

¤½¤Î°ìÅÙ¤á¤ÎÅÐÏ¿¥ê¥¯¥¨¥¹¥È¤ËÂФ·¼¡¤Î¤è¤¦¤Ê¥Õ¥ì¡¼¥º(¤³¤Î¿ô»ú¤Ï¤¢¤¯¤Þ¤Ç¤âÎã¤Ç¤¹) +

+confirm 84682771 Anne Shirley
+
+ +¤ò´Þ¤à¡Ø¤³¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤ËÅÐÏ¿¤ò¤·¤Æ¤â¤è¤¤¤«?¡Ù¤È¤¤¤¦³Îǧ¤òµá¤á¤ë¥á¡¼¥ë¤ò°ì +ÅÙÊÖ¤·¤Þ¤¹¡£ +¤³¤ì¤Ï¡Ö¾¡¼ê¤Ë¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤ØÅÐÏ¿¤µ¤ì¤Æ¤·¤Þ¤¦¡×Åù¤Î¤¤¤¿¤º¤é¤Ø¤ÎͽËɺö¤Ç¤¹¡£ +

¤¢¤Ê¤¿¤¬¤³¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ø¤Î»²²Ã³Îǧ¤Î¥á¡¼¥ë¤ò¼õ¤±¤È¤Ã¤¿¤Ê¤é¡¢ +

+confirm ¥Ñ¥¹¥ï¡¼¥É(¿ô»ú) ¤¢¤Ê¤¿¤Î̾Á°
+
+ +¤³¤Î¥Õ¥ì¡¼¥º¤ò´Þ¤à¥á¡¼¥ë¤ò¤â¤¦°ìÅÙÅÐÏ¿ÍѤΥ¢¥É¥ì¥¹ +sylpheed-jp-ctl@good-day.net +¤ØÁ÷¿®¤·¤Æ²¼¤µ¤¤¡£¤½¤¦¤¹¤ë¤È¤¢¤Ê¤¿¤Î³Îǧ¤¬ÆÀ¤é¤ì¤¿¤È¤ß¤Ê¤·¡¢¥µ¡¼¥Ð¤Ï¤¢¤Ê¤¿¤òÅÐ +Ï¿¤·¤Þ¤¹¡£ +

Åê¹ÆÀè¤Ï +sylpheed-jp@good-day.net ¤Ç¤¹¡£ +

Ãí°Õ: ¤â¤·¡¢ +

+confirm ¥Ñ¥¹¥ï¡¼¥É(¿ô»ú) ¤¢¤Ê¤¿¤Î̾Á°
+
+ +¤Î¥á¡¼¥ë¤ò¤Ê¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¤È¤«¡¢Ê¬¤«¤é¤Ê¤¯¤Ê¤Ã¤Æ¤­¤¿¤Î¤ÇºÇ½é¤«¤é¤ä¤ê¤Ê¤ª¤·¤¿¤¤ +¤È¤¤¤¦¾ì¹ç¤Ï¡¢¡ÖºÇ½é¤«¤é¡×¡¢¤Ä¤Þ¤ê +
+subscribe Anne Shirley
+
+ +¤òÁ÷¤ë¤³¤È¤«¤é¤ä¤êľ¤·¤Æ²¼¤µ¤¤¡£ +

+

Âà²ñÊýË¡

+ +

+

+unsubscribe
+
+ +¤ÈËÜʸ¤Ë½ñ¤¤¤¿¥á¡¼¥ë¤ò +sylpheed-jp-ctl@good-day.net °¸¤ËÁ÷¿®¤·¤Æ¤¯¤À¤µ¤¤¡£ +

²áµî¥í¥°¤Ï +http://www.tmtm.org/sylpheed/ml/¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£ +

16.3 Anonymous CVS +

+ +

Sylpheed¤Î³«È¯¤Ë¤ÏCVS¤¬ÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£ +CVS¤ÎÀâÌÀ¤Ë´Ø¤·¤Æ¤Ï¡¢ +http://kahori.com/j-cvsbook/¤Ê¤É¤Î¥µ¥¤¥È¤ä½ñÀÒ¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ +

CVS¤«¤éºÇ¿·¤ÎSylpheed¤òÆþ¼ê¤¹¤ë¤Ë¤Ï, +´Ä¶­ÊÑ¿ôCVSROOT¤Ë:pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ +(cvs¤Î-d¥ª¥×¥·¥ç¥ó¤ÇľÀÜ»ØÄꤹ¤ë¾ì¹ç¤ÏɬÍפ¢¤ê¤Þ¤»¤ó) +

+csh·Ï:
+        setenv CVSROOT :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed
+sh·Ï(bash¤Ê¤É):
+        export CVSROOT=':pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed'
+
+

¤½¤Î¸å¡¢ +

+$ cvs login
+CVS password: [enter]
+
+ +¤Ç¥í¥°¥¤¥ó¤·¤Þ¤¹¡£password¤Ï̵¤·¤Ç¤¹¡£ +

ŬÅö¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ÜÆ°¤·¡¢ +

+$ cvs -z3 checkout sylpheed
+
+ +¤Ç¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ësylpheed¤È¤¤¤¦¥½¡¼¥¹¥Ä¥ê¡¼¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£ +

ºÇ¿·¤Î¥½¡¼¥¹¥Ä¥ê¡¼¤Ë¥¢¥Ã¥×¥Ç¡¼¥È¤¹¤ë¤Ë¤Ï¡¢ +

+$ cvs -z3 update
+
+ +¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ +

+


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-17.html b/doc/manual/ja/sylpheed-17.html new file mode 100644 index 000000000..96f5a77b9 --- /dev/null +++ b/doc/manual/ja/sylpheed-17.html @@ -0,0 +1,444 @@ + + + + + Sylpheed User's Manual: ¤³¤Îʸ½ñ¤Ë¤Ä¤¤¤Æ + + + + +Next +Previous +Contents +
+

17. ¤³¤Îʸ½ñ¤Ë¤Ä¤¤¤Æ

+ +

17.1 Copyright notice +

+ +

Copyright (C) 2000 Yoichi Imai <yoichi@silver-forest.com>, All rights reserved. +¤³¤Îʸ½ñ¤ÎÃøºî¸¢¤Ïº£°æ ÍÛ°ì <yoichi@silver-forest.com> ¤Ë¤¢¤ê¤Þ¤¹¡£ +

¤¢¤Ê¤¿¤Ï¡¢Free Software Foundation¤¬¸øɽ¤·¤¿GNU General Public License¤Îversion 2 +°¿¤Ï¤½¤ì°Ê¹ß¤Î³Æ¥Ð¡¼¥¸¥ç¥ó¤Î¤¤¤º¤ì¤«¤òÁªÂò¤·¡¢¤½¤Î¥Ð¡¼¥¸¥ç¥ó¤¬Äê¤á¤ë¾ò¹à¤Ë¤·¤¿¤¬¤Ã¤Æ +ËÜʸ½ñ¤òºÆÈÒÉÛ¤Þ¤¿¤ÏÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤³¤Îʸ½ñ¤ÏÍ­ÍѤȤϻפ¤¤Þ¤¹¤¬¡¢ÈÒÉۤˤ¢¤¿¤Ã¤Æ¤Ï¡¢»Ô¾ìÀ­µÚ¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤Ë¤Ä¤¤¤Æ¤Î +°ÅÌÛ¤ÎÊݾڤò´Þ¤á¤Æ¡¢¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤Ê¤¤¤Þ¤»¤ó¡£ +¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤ÏGNU General Public License version 2¤ò¤ªÆɤߤ¯¤À¤µ¤¤¡£ +

¤¢¤Ê¤¿¤Ï¡¢ËÜ¥×¥í¥°¥é¥à¤È°ì½ï¤ËGNU °ìÈ̸øÍ­»ÈÍѵöÂú¤Î¼Ì¤·¤ò¼õ¤±¼è¤Ã¤Æ¤¤ +¤ë¤Ï¤º¤Ç¤¹¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA ¤Ø¼ê»æ¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£ +

+

17.2 GNU General Public License +

+ +

+

+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+        Appendix: How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) 19yy  <name of author>
+
+    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
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) 19yy name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Library General
+Public License instead of this License.
+
+

17.3 ¤³¤Î¥É¥­¥å¥á¥ó¥È¤ÎºÇ¿·ÈǤÎÆþ¼êÀè +

+ +

ºÇ¿·ÈǤÏ, +http://members.linuxstart.com/~sunnyone/sylpheed-doc/ +¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£ +

¤Þ¤¿ +http://members.linuxstart.com/~sunnyone/sylpheed-doc/sylpheed-doc.tar.bz2 +¤è¤êºÇ¿·ÈǤΥ¢¡¼¥«¥¤¥Ö¤òÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

17.4 ¤ª¤ï¤ê¤Ë +

+ +

¤³¤Î¥É¥­¥å¥á¥ó¥È¤òÆɤó¤Ç, +¤³¤³¤Ï¤³¤¦¤·¤¿¤Û¤¦¤¬¤¤¤¤¤ó¤¸¤ã¤Ê¤¤¤«, ¤È¸À¤Ã¤¿¤è¤¦¤Ê°Õ¸«¤¬¤¢¤ê¤Þ¤·¤¿¤é, +yoichi@silver-forest.com +¤Ø¤ªÁ÷¤ê¤¤¤¿¤À¤±¤ì¤Ð¹¬¤¤¤Ç¤¹¡£ +

¤Þ¤¿, Copyright notice¤Çµö²Ä¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¤Èɽµ­¤·¤Þ¤·¤¿¤¬¡¢ +Linux distribution¤Ë¼ýÏ¿¤¹¤ë¤Ê¤É, Èæ³ÓŪ¿¿ô¤Î¿Í¤ËÆɤޤì¤ë¤³¤È¤¬Í½ÁÛ¤µ¤ì¤ë¾ì¹ç¤Ë¤Ï¡¢ +»ö¸å¤Ç·ë¹½¤Ç¤¹¤Î¤ÇÊó¹ð¤·¤Æ¤¤¤¿¤À¤±¤ì¤Ð¡¢¤³¤Îʸ½ñ¤Î´°À®ÅÙ¤ò¾å¤²¤ë¤³¤È¤¬¤Ç¤­¤ë¤È»×¤¤¤Þ¤¹¡£ +

ËÝÌõ¤Ê¤É¤â´¿·Þ¤Ç¤¹¡£ +

17.5 ¹¹¿·ÍúÎò +

+ +

+

+2000-08-06      Yoichi Imai <yoichi@silver-forest.com>
+        * Version 0.1
+        * ¹¹¿·ÍúÎò¤òÄɲÃ
+        * ¥é¥¤¥»¥ó¥¹¤òGPL2¤ËÊѹ¹
+2000-08-06      Yoichi Imai <yoichi@silver-forest.com>
+        * Version 0.1.2
+        * KMail¤ÎÃí°Õ½ñ¤­¤òÄɲÃ
+        * ¶çÅÀ¤Î¥Ý¥ê¥·¡¼¤òÊѹ¹
+
+2000-09-13      Yoichi Imai <yoichi@silver-forest.com>
+        * Version 0.1.3
+        * ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®Éôʬ¤òµ­½Ò
+        * ¥¢¥«¥¦¥ó¥ÈÀßÄê¤ÇCc, Bcc, Reply-To¥Õ¥£¡¼¥ë¥É¼«Æ°»ØÄê¤Îµ­½Ò
+
+2000-09-27      Yoichi Imai <yoichi@silver-forest.com>
+        * Version 0.2
+        * Hiro's page¤òÊѹ¹
+        * imlib, faces¤ÎÃí°Õ½ñ¤­¤òÄɲÃ
+        * sylpheed/devel¥Ç¥£¥ì¥¯¥È¥ê¤Î¸ºß¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò¤òºï½ü
+        * cvs¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò
+        * ¥¿¥°->Í×ÁÇ
+        * ¿¶¤êʬ¤±¤ÎÀßÄê
+        * Á´È̤ÎÀßÄê
+        * FAQ¤Ëgtkrc¤ÎÀßÄê, ¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤ÎÊѹ¹¤òÄɲÃ
+        * µ¡Ç½¤òÄɲÃ
+        * Æ°ºî³Îǧ´Ä¶­¤òÄɲÃ
+        * ¤Ê¤·(¥í¡¼¥«¥ë)¤òÄɲÃ
+        * ³°Éô¥¨¥Ç¥£¥¿¤Î»È¤¤Êý¤òµ­½Ò
+2000-09-27      Yoichi Imai <yoichi@silver-forest.com>
+        * Version 0.2.1
+        * ¼õ¿®»þ¤Îtypo¤ò½¤Àµ
+        * ctrl+n,p
+        * $HOME
+2000-11-09      Yoichi Imai <yoichi@silver-forest.com>
+        * Version 0.2.2
+        * ML¤Î°ÆÆâ¤òÊѹ¹
+        * ChangeLog¤Î·Á¼°¤òÊѹ¹
+
+
+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-2.html b/doc/manual/ja/sylpheed-2.html new file mode 100644 index 000000000..d52bf4f32 --- /dev/null +++ b/doc/manual/ja/sylpheed-2.html @@ -0,0 +1,321 @@ + + + + + Sylpheed User's Manual: ¥¤¥ó¥¹¥È¡¼¥ë + + + + + +Next +Previous +Contents +
+

2. ¥¤¥ó¥¹¥È¡¼¥ë

+ +

+

2.1 ɬÍפʴĶ­ +

+ +

¤³¤Î¥×¥í¥°¥é¥à¤Î¥³¥ó¥Ñ¥¤¥ë/¼Â¹Ô¤Ë¤Ï +

    +
  • Linux ¤¢¤ë¤¤¤Ï¾¤Î UNIX like OS
  • +
  • GTK+ 1.2.6 °Ê¹ß
  • +
  • GNU make
  • +
+ +¤¬É¬ÍפǤ¹¡£ +¤¢¤ì¤ÐÊØÍø¤Ê¤â¤Î¤Ï¡¢ +
    +
  • gettext
  • +
  • imlib¤Þ¤¿¤Ïgdk-pixbuf
  • +
  • compface(faces)
  • +
+ +¤Ç¤¹¡£¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Ç¤Ïgettext¤ÏÆþ¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¡¢ +locale¤Ïja_JP.*¤È¤·¤Æµ­½Ò¤·¤Æ¤¢¤ê¤Þ¤¹¡£ +

+

2.2 Æ°ºî³Îǧ¤µ¤ì¤Æ¤¤¤ë´Ä¶­ +

+ +

°Ê²¼¤ÎOS/Linux Distribution¤ÇÆ°ºî¤¬³Îǧ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +¾¤Î´Ä¶­¤ÇÆ°ºî¤·¤¿¤È¤¤¤¦Êý¤Ï +Sylpheed ML¤ÇÊó¹ð失¤ì¤Ð¹¬¤¤¤Ç¤¹¡£ +

    +
  • Debian GNU/Linux (woody) (glibc 2.1.3) (³«È¯´Ä¶­)
  • +
  • Kondara MNU/Linux (glibc 2.1.x)
  • +
  • Vine Linux 1.1 (glibc 2.0.x + libwcsmbs)
  • +
  • Vine Linux 2.0 (glibc 2.1.x)
  • +
  • Laser5 Linux 6.0 (glibc 2.1.x)
  • +
  • Laser5 Linux 6.2 (glibc 2.1.x)
  • +
  • TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs)
  • +
  • TurboLinux 6.0 (glibc 2.1.2)
  • +
  • RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x)
  • +
  • RedHat Linux 6.2 (glibc 2.1.x)
  • +
  • RedHat Linux 6.2J (glibc 2.1.x)
  • +
  • LinuxPPC2000 + ÀãÉ÷(ÆüËܸ첽 kit)
  • +
  • Linux2000G (Intel, PowerPC)
  • +
  • Linux for PPC Japanese Edition 2.0 (glibc 2.1.x)
  • +
  • Linux MLD4
  • +
  • Plamo Linux 2.0
  • +
  • Linux Mandrake 7.0
  • +
  • Linux Mandrake 7.1
  • +
  • SuSE Linux 6.3 (glibc 2.1.2)
  • +
  • SuSE Linux 6.4
  • +
  • SuSE Linux 7.0
  • +
  • OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3)
  • +
  • FreeBSD 3.2-RELEASE
  • +
  • FreeBSD 3.4-RELEASE
  • +
  • FreeBSD 4.0-RELEASE
  • +
  • FreeBSD 4.1-RELEASE
  • +
  • FreeBSD 5.0-CURRENT
  • +
  • OpenBSD 2.7
  • +
  • Solaris 2.6
  • +
  • Solaris 7
  • +
  • IRIX 6.3
  • +
  • HP-UX 10.20
  • +
+

¤·¤«¤·¡¢´Ä¶­¤Ë¤è¤Ã¤Æ¤ÏÉÔ°ÂÄê¤Ê²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¥é¥¤¥Ö¥é¥ê¤Ï¤Ç¤­¤ë¤À¤±¿·¤·¤¤¤â¤Î¤ò¤ª»È¤¤¤¯¤À¤µ¤¤¡£ +

2.3 ´ðËÜŪ¤ÊinstallÊýË¡ +

+ +

¤³¤³¤Ë¼¨¤¹¤Î¤ÏUNIX¤Ê¤é¤Û¤Ü»È¤¨¤ë¤È»×¤ï¤ì¤ë¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤Ç¤¹¡£ +¤·¤«¤·¡¢OS¤Î»ý¤Ã¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë´ÉÍýµ¡¹½¤ò²õ¤¹²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢ +Åö¤Æ¤Ï¤Þ¤ë¤â¤Î¤¬²¼¤Ë¤¢¤ë¾ì¹ç¤Ï¡¢¤½¤ì¤òÍøÍѤ¹¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£ +

+

GTK+¤Î¥¤¥ó¥¹¥È¡¼¥ë

+ +

+

+

Sylpheed¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë

+ +

¤Þ¤º¡¢ +http://sylpheed.good-day.net/¤«¤é +sylpheed¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ +¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤é¡¢ +

+
+bzip2 -dc sylpheed-(¥Ð¡¼¥¸¥ç¥ó).tar.bz2 | tar xf - ¤È¤·¤Æ²òÅष¡¢
+$ cd sylpheed-(¥Ð¡¼¥¸¥ç¥ó)
+$ ./configure
+$ make
+$ su  
+Password: (¥Ñ¥¹¥ï¡¼¥ÉÆþÎÏ)
+# make install
+
+
+ +¤Ç¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£  +

+

+

2.4 rpm¤ò»ÈÍѤ·¤¿Linux Distribution¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +

+ +

rpm¤ò»ÈÍѤ·¤¿¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¸¥ç¥ó¤Ë¤Ï¡¢ +

    +
  • Red Hat Linux
  • +
  • Laser5 Linux
  • +
  • Vine Linux
  • +
  • Kondara MNU/Linux
  • +
+ +¤Ê¤É¤ò¼¨¤·¤Þ¤¹¡£ +

°ìÈÌŪ¤Ê¥¤¥ó¥¹¥È¡¼¥ë¼ê½ç(ºÇ¿·ÈǤòÍøÍѤ¹¤ë¾ì¹ç)

+ +

+

¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤òÍѤ¤¤ë¾ì¹ç

+ +

+

gtk+¤Î¥¤¥ó¥¹¥È¡¼¥ë/¥¢¥Ã¥×¥°¥ì¡¼¥É

+ +

¤Þ¤º¡¢gtk+¤Îrpm¤¬Æþ¤Ã¤Æ¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹¡£ +

+
+$ rpm -qa | grep gtk
+gtk+-1.2.6-1vl5
+(°Ê²¼Î¬)
+
+
+ +¤Î¤è¤¦¤Ëgtk+¤Îrpm¤¬´û¤ËÆþ¤Ã¤Æ¤¤¤Æ¡¢¤Ê¤ª¤«¤Ä1.2.6°Ê¾å¤Ç¤¢¤ì¤ÐÂç¾æÉפǤ¹¡£ +¸Å¤¤¾ì¹ç¤Ï¡¢¤½¤ÎDistribution¤òÇÛÉÛ¤·¤Æ¤¤¤ë¥µ¥¤¥ÈÅù¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +
+
+$ su
+Password: (¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ)
+# rpm -Uvh gtk+-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm
+
+
+ +¤Ç¥Ð¡¼¥¸¥ç¥ó¥¢¥Ã¥×¤·¤Æ¤¯¤À¤µ¤¤¡£ +

+

rpm¤Î¥¤¥ó¥¹¥È¡¼¥ë

+ +

+http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html +¤è¤ê¡¢ +

sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢ +

+
+$ su
+Password: (¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ)
+# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm
+
+
+ +¤Ç´°Î»¤Ç¤¹¡£ +¤Ê¤ª¡¢http://members.linuxstart.com/ sunnyone/mylinux/sylpheed.html¤Îrpm¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢ +`rpm -q glibc`¤È¼Â¹Ô¤·¤¿¤È¤­¤Ë¡¢ +glibc-2.1.2-17vl2¤Î¤è¤¦¤Ë¡¢glibc-2.1.x°Ê¹ß¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ +¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¾ì¹ç¡¢gtk+°Ê³°¤Ëimlib¤Îrpm¤¬É¬Íפˤʤë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ +

+

¥½¡¼¥¹¥Ñ¥Ã¥±¡¼¥¸¤òÍѤ¤¤ë¾ì¹ç

+ +

¤³¤ÎÊýË¡¤Ï¡¢¾åµ­¤Îglibc¤Î¥Ð¡¼¥¸¥ç¥ó¤¬Ä㤫¤Ã¤¿¾ì¹ç¤Ç¤âÍøÍѲÄǽ¤Ç¤¹¡£ +

gtk+¤Î¥¤¥ó¥¹¥È¡¼¥ë/¥¢¥Ã¥×¥°¥ì¡¼¥É

+ +

¤Þ¤º¡¢gtk+¤Îrpm¤¬Æþ¤Ã¤Æ¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹¡£ +

+
+$ rpm -qa | grep gtk
+gtk+-1.2.6-1vl5
+gtk+-devel-1.2.6-1vl5
+(°Ê²¼Î¬)
+
+
+ +¤Î¤è¤¦¤Ëgtk+µÚ¤Ógtk+-devel¤Îpackage¤¬´û¤ËÆþ¤Ã¤Æ¤¤¤Æ¡¢¤Ê¤ª¤«¤Ä1.2.6°Ê¾å¤Ç¤¢¤ì¤ÐÂç¾æÉפǤ¹¡£ +¸Å¤¤¾ì¹ç¤Ï¡¢¤½¤ÎDistribution¤òÇÛÉÛ¤·¤Æ¤¤¤ë¥µ¥¤¥ÈÅù¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +
+
+# rpm -Uvh gtk+-(¥Ð¡¼¥¸¥ç¥ó)-?.i386.rpm gtk+-devel-(¥Ð¡¼¥¸¥ç¥ó)-?.i386.rpm
+
+
+ +¤Ç¥Ð¡¼¥¸¥ç¥ó¥¢¥Ã¥×¤·¤Æ¤¯¤À¤µ¤¤¡£ +

+

rpm¤Îrebuild & install

+ +

¤½¤·¤Æ¡¢ +http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html¤è¤ê¡¢ +sylpheed-(¥Ð¡¼¥¸¥ç¥ó).src.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ +¼¡¤Ë²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£ +¤¿¤À¤·¡¢²¼µ­¤ÎÊýË¡¤Ç¤Ï¥³¥ó¥Ñ¥¤¥ë¤Ë¤âroot¤Ë¤Ê¤ë¤¿¤á¾¯¤·¤À¤±´í¸±¤Ç¤¹¡£ +¤Ê¤é¤Ê¤¯¤Æ¤âÎɤ¤´Ä¶­¤òÀ°¤¨¤Æ¤¤¤ëÊý¤Ï¡¢rpm --rebuild¤Î¤¿¤á¤Ësu¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£ +

+
+$ su
+Password: (¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ)
+# rpm --rebuild sylpheed-(¥Ð¡¼¥¸¥ç¥ó).src.rpm
+
+
+ +¤È¤¹¤ì¤Ð¥³¥ó¥Ñ¥¤¥ë¤¬³«»Ï¤µ¤ì¡¢ +
+
+(°Ê¾åά)
+½ñ¤­¹þ¤ßÃæ: /usr/src/redhat/RPMS/i386/sylpheed-0.3.3-1.i386.rpm
+(°Ê²¼Î¬)
+
+
+ +¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸(½ñ¤­¹þ¤ßÃæ:¤¬Wrote: ¤Ê¤É¤Ë¤Ê¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹)¤¬¸½¤ì¤Æ¡¢ +½ªÎ»¤·¤¿¤é¡¢¾åµ­¤Ë¼¨¤µ¤ì¤¿¥Õ¥¡¥¤¥ë(sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm)¤ò +
+
+# rpm -Uvh /usr/src/redhat/RPMS/i386/sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm
+
+
+ +¤Ç¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£ +

+

Vine Linux 1.1¤¢¤ë¤¤¤Ï1.0¤Ø¤ÎVine Plus¤òÍøÍѤ·¤¿¥¤¥ó¥¹¥È¡¼¥ë

+ +

+gtk¤Î¥Ð¡¼¥¸¥ç¥ó³Îǧ/¥¤¥ó¥¹¥È¡¼¥ë/¥¢¥Ã¥×¥°¥ì¡¼¥É¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£ +gtk+¤ÎÆþ¼êÀè¤Ë¤Ï¡¢ +VinePlus

¤¬ÍøÍѲÄǽ¤Ç¤¹¡£Vine Plus¤òÍøÍѤ·¤¿¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤Ï¡¢gtk+-devel¤Îrpm¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£ +gtk+-devel¤ÎÉôʬ¤ÏÈô¤Ð¤·¤Æ¹Í¤¨¤Æ¤¯¤À¤µ¤¤¡£ +

¼¡¤Ë¾åµ­¥µ¥¤¥È¤Ê¤É¤è¤ê¡¢Vine Plus¤Ë´Þ¤Þ¤ì¤ë +sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +

+
+# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm
+
+
+ +¤È¤¹¤ì¤Ð¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£ +

¤Ê¤ª¡¢Vine Linux 1.1Ëô¤Ï1.0ɸ½à¤À¤È¥Õ¥©¥ó¥È¤¬¾¯¤·Â礭¤¤¤Î¤Ç¡¢ +¥Õ¥©¥ó¥È»ØÄê¤Î¹à¤â¸«¤Æ¤ª¤¯¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ +

+

Vine Linux 2.0¤Ø¤ÎVine Plus¤òÍøÍѤ·¤¿¥¤¥ó¥¹¥È¡¼¥ë

+ +

X Window System¤òÁªÂò¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢ +gtk+¤Î¥Ð¡¼¥¸¥ç¥ó¤Î¾ò·ï¤â´û¤ËËþ¤¿¤·¤Æ¤¤¤ë¤Î¤Ç¡¢ +http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html +¤¢¤ë¤¤¤ÏVine Plus(2.0)¤«¤ésylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +

+
+# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm
+
+
+ +¤Ç´°Î»¤Ç¤¹¡£ +

¤Ê¤ª¡¢Vine2.0CR¤ËÉÕ°¤·¤Æ¤¤¤ëVine Plus¤ÎCD¤Ë´Þ¤Þ¤ì¤ësylpheed¤Îrpm¤Ï¥Ð¡¼¥¸¥ç¥ó¤¬¸Å¤¤¤Î¤Ç¡¢ +¤Ê¤ë¤Ù¤¯ºÇ¿·ÈǤòÆþ¤ì¤ë¤Ù¤­¤Ç¤·¤ç¤¦¡£ +

+

Vine Linux 2.1¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë

+ +

Vine Linux 2.1¤Ë¤Ï´û¤ËSylpheed¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ +¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Ø¤ÏVine Linux 2.0¤ÈƱ¤¸ÊýË¡¤ò¼è¤ë¤ÈÎɤ¤¤È»×¤¤¤Þ¤¹¡£ +Vine Plus¤Ë¤¢¤ì¤Ð»È¤Ã¤Æ¤âÎɤ¤¤Ç¤¹¤·¡¢ +¤â¤·¤â¤Ã¤È¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï +¥½¡¼¥¹¥Ñ¥Ã¥±¡¼¥¸¤«¤é¤Î¥¤¥ó¥¹¥È¡¼¥ë +¤ò»ÈÍѤ¹¤ë¤ÈÎɤ¤¤È»×¤¤¤Þ¤¹¡£ +

Vine Linux 2.0¤ÈVine Linux 2.1¤Ï¤¢¤Þ¤êÊѲ½¤¬Ìµ¤¤¤Î¤Ç¡¢ +libjconv¤ò»È¤¤¤¿¤¤¤Î¤Ç¤Ê¤±¤ì¤Ð¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤«¤é¤Î¥¤¥ó¥¹¥È¡¼¥ë¤â +»ÈÍѲÄǽ¤À¤È»×¤ï¤ì¤Þ¤¹¡£ +

Kondara MNU/Linux 1.0¤ª¤è¤Ó1.1¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë

+ +

Kondara MNU/Linux¤Ë¤ÏKondara-Zoo¤Ësylpheed¤Îrpm¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¡¢ +

+
+# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i586.rpm
+
+
+ +¤È¤¹¤ë¤«¡¢mph¤ò»È¤Ã¤Æ¡¢ +

+

+
+# mph-get install sylpheed
+
+
+ +¤Ç´°Î»¤Ç¤¹¡£ +

+

2.5 Debian GNU/Linux¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +

+ +

Debian GNU/Linux¤Îwoody/potato¤ò¤ª»È¤¤¤Ê¤é¤Ð¡¢ +Debian-JP(woody)¤Ë¡¢package¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢ +

+
+# apt-get install sylpheed
+
+
+ +¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤Þ¤¹¡£ +¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Ê¤é¤Ð¡¢gtk+¤â¸Å¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢ +´ðËÜŪ¤ÊinstallÊýË¡¤òÍøÍѤ¹¤ë¤ÈÎɤ¤¤«¤È»×¤ï¤ì¤Þ¤¹¡£ +

+

2.6 FreeBSD¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +

+ +
+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-3.html b/doc/manual/ja/sylpheed-3.html new file mode 100644 index 000000000..fc5b990b7 --- /dev/null +++ b/doc/manual/ja/sylpheed-3.html @@ -0,0 +1,56 @@ + + + + + Sylpheed User's Manual: µ¯Æ°¤È½ªÎ» + + + + + +Next +Previous +Contents +
+

3. µ¯Æ°¤È½ªÎ»

+ +

+

3.1 Sylpheed¤Îµ¯Æ° +

+ +

kterm,rxvt¤Ê¤É¤ÎüËö¥¨¥ß¥å¥ì¡¼¥¿¤òµ¯Æ°¤·¡¢ +

+
+$ sylpheed &
+
+
+ +¤È¥¿¥¤¥×¤·¤Þ¤¹¡£ +

+http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html¤Îrpm¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¾ì¹ç¤Ç +GNOME¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢ +¥á¥¤¥ó¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ¤«¤é" ¥¤¥ó¥¿¡¼¥Í¥Ã¥È ¡ä Sylpheed"¤ÈÁª¤Ö¤³¤È¤Çµ¯Æ°¤Ç¤­¤Þ¤¹¡£ +

GNOME¤ÎÈæ³ÓŪ¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¾ì¹ç¡¢ +"­Àץܥ¿¥ó¡ä¥×¥í¥°¥é¥à¡ä¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡äSylpheed" +¤Î¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ +

3.2 Sylpheed¤Î½ªÎ» +

+ +

°Ê²¼¤Î3¤Ä¤Î¤³¤È¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð½ªÎ»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

    +
  • Window¤ÎÊĤ¸¤ë¥Ü¥¿¥ó¤ò²¡¤¹
  • +
  • ¥Õ¥¡¥¤¥ë(F)¥á¥Ë¥å¡¼¤ò³«¤­¡¢½ªÎ»¤ò²¡¤¹
  • +
  • Alt+q¤Þ¤¿¤ÏShift+q¤ò²¡¤¹
  • +
+ +¤³¤Î3¤Ä¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð½ªÎ»¤¹¤ë¤«¤É¤¦¤«Ì䤤¹ç¤ï¤»¤Æ¤­¤Þ¤¹¤Î¤Ç¡¢ +Enter¥­¡¼¤«OK¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç½ªÎ»¤Ç¤­¤Þ¤¹¡£ +

¤Ê¤ª¤³¤ÎÌ䤤¹ç¤ï¤»¤Ï¡¢ÀßÄê-Á´È̤ÎÀßÄê¤Î"¥¤¥ó¥¿¥Õ¥§¡¼¥¹"¥¿¥Ö¤ÎÃæ¤Î¡¢ +"½ªÎ»»þ¤Ë³Îǧ¤¹¤ë"¤Î¥Á¥§¥Ã¥¯¤ò³°¤¹¤³¤È¤ÇÌ䤤¹ç¤ï¤»¤Ê¤¯¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ +

+


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-4.html b/doc/manual/ja/sylpheed-4.html new file mode 100644 index 000000000..79d6cba1b --- /dev/null +++ b/doc/manual/ja/sylpheed-4.html @@ -0,0 +1,59 @@ + + + + + Sylpheed User's Manual: Sylpheed¤Î¤µ¤Þ¤¶¤Þ¤Ê¾ì½ê¤Î̾¾Î + + + + + +Next +Previous +Contents +
+

4. Sylpheed¤Î¤µ¤Þ¤¶¤Þ¤Ê¾ì½ê¤Î̾¾Î

+ +

Sylpheed¤òºÇ½é¤Ëµ¯Æ°¤·¤¿²èÌ̤ò´ð½à¤Ë¤·¤Þ¤¹¡£ +

4.1 ¥á¥Ë¥å¡¼ +

+ +

¥¦¥£¥ó¥É¥¦¤Î¾å¤Ë¤Ä¤¤¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë(F)¤ä¡¢ÊÔ½¸(E)¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +ËÜʸ½ñ¤Ç¤Ï¥á¥Ë¥å¡¼¤Î"¥Õ¥¡¥¤¥ë(F)"¤ò¥¯¥ê¥Ã¥¯¤·¤Æ"ÊĤ¸¤ë(C)"¤òÁª¤Ö¤³¤È¤ò¡¢ +"¥Õ¥¡¥¤¥ë¡äÊĤ¸¤ë"¤Èɽµ­¤·¤¿¤ê¤·¤Þ¤¹¡£ +

4.2 ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼ +

+ +

±¦¥¯¥ê¥Ã¥¯¤·¤Æ½Ð¤ÆÍè¤ë¥á¥Ë¥å¡¼¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +¡Ø¡Á¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡Ù¤È¤¤¤Ã¤¿¤é +¡Á¤Î¾ì½ê¤Ç±¦¥¯¥ê¥Ã¥¯¤·¤Æ¤³¤Î¥á¥Ë¥å¡¼¤ò½Ð¤¹¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +

4.3 ¥À¥¤¥¢¥í¥° +

+ +

Sylpheed¤ò½ªÎ»¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ë½Ð¤ë¤è¤¦¤ÊÌ䤤¹ç¤ï¤»¤Î¥¦¥£¥ó¥É¥¦¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +ÀßÄê¤ò¤¹¤ë¥¦¥£¥ó¥É¥¦¤â¡¢¥À¥¤¥¢¥í¥°¤Ç¤¹¡£ +

4.4 ¥µ¥Þ¥ê¥Ó¥å¡¼ +

+ +

±¦¾å¤Ë¤¢¤ëÈֹ桢¥µ¥¤¥º¡¢ÆüÉդʤɤ¬½ñ¤«¤«¤ì¤Æ¤¤¤ë¥ê¥¹¥È¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +

4.5 ¥Õ¥©¥ë¥À¥Ó¥å¡¼ +

+ +

º¸Â¦¤Ë¤¢¤ë¥Õ¥©¥ë¥À¤Î¥Ä¥ê¡¼¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ëÉôʬ¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +

4.6 ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼ +

+ +

¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤ëÉôʬ¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +źÉÕ¥Õ¥¡¥¤¥ë¤â¤³¤³¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¤¬¡¢ +¤½¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÎºÜ¤Ã¤Æ¤¤¤ë¥ê¥¹¥È¤Î¤³¤È¤òźÉեꥹ¥È¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡£ +

4.7 ¥¢¥«¥¦¥ó¥È +

+ +

¥á¡¼¥ë¥µ¡¼¥Ð¤Ë¤¢¤ë¤½¤Î¥æ¡¼¥¶¤Î¸¢Íø¤Î¤³¤È¤Ç¤¹¡£ +¤ï¤«¤é¤Ê¤±¤ì¤Ð¡¢¥á¡¼¥ë¤ò¼õ¿®¤¹¤ë¤¿¤á¤Î¾ðÊ󡢤ȹͤ¨¤ÆÎɤ¤¤È»×¤¤¤Þ¤¹¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-5.html b/doc/manual/ja/sylpheed-5.html new file mode 100644 index 000000000..7f02c1274 --- /dev/null +++ b/doc/manual/ja/sylpheed-5.html @@ -0,0 +1,151 @@ + + + + + Sylpheed User's Manual: ¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷ + + + + + +Next +Previous +Contents +
+

5. ¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷

+ +

+

5.1 ÁªÂò +

+ +

¤½¤ÎÁªÂò¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤Þ¤¿¤Ï¥Õ¥©¥ë¥À¤òº¸¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤ÇÁªÂò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤Þ¤¿¡¢¥á¥Ã¥»¡¼¥¸¤òÊ£¿ôÁªÂò¤·¤¿¤¤¾ì¹ç¤Ç°ìÄê¤ÎÈϰϤò»ØÄꤷ¤¿¤¤¾ì¹ç¡¢ +ÈϰϤκǽé¤Î¥á¥Ã¥»¡¼¥¸¤òº¸¥¯¥ê¥Ã¥¯¤·¤ÆShift¥­¡¼¤ò²¡¤·¤Ê¤¬¤éÈϰϤκǸå¤Î¥á¡¼¥ë¤òº¸¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£ +

Ctrl¥­¡¼¤ò²¡¤·¤Ê¤¬¤éº¸¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢¤È¤Ó¤È¤Ó¤ËÁªÂò¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£ +ƱÍͤˡ¢Shift¥­¡¼¤ò²¡¤·¤Ê¤¬¤é´û¤ËÁªÂò¤µ¤ì¤¿Îΰè¤ÎÃæ¤òº¸¥¯¥ê¥Ã¥¯¤·¤ÆÈϰϤòºï¤ê¼è¤Ã¤¿¤ê¡¢ +Ctrl¤ò²¡¤·¤Ê¤¬¤éº¸¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¤½¤ÎÉôʬ¤òÈ´¤¤¤Æ¤·¤Þ¤Ã¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹ +

¤Þ¤¿¡¢¥µ¥Þ¥ê¥Ó¥å¡¼¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢"Á´¤ÆÁªÂò"¤òÁª¤Ö¤³¤È¤Ç +¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤Ç¤­¡¢"Á´ÁªÂò²ò½ü"¤òÁª¤Ö¤³¤È¤Ç¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ÎÁªÂò¤ò²ò½ü¤Ç¤­¤Þ¤¹¡£ +

5.2 ¥á¡¼¥ë¤ò¸«¤ë +

+ +

¥À¥¦¥ó¥í¡¼¥É¤µ¤ì¤¿¥á¡¼¥ë¤ò¸«¤ë¤Ë¤Ï¥µ¥Þ¥ê¥Ó¥å¡¼¤ÎÃ椫¤é +¸«¤¿¤¤¤â¤Î¤òÁªÂò¤·¤Þ¤¹¡£ +¾å¤Ë"U"¤È½ñ¤«¤ì¤Æ¤¤¤ëÉôʬ¤ËÀ֤δݤ¤¥Þ¡¼¥¯¤¬¤¢¤ë¾ì¹ç¤Ï¡¢¿·Ãå¥á¡¼¥ë +ÎФΥޡ¼¥¯¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ì¤Æɥ᡼¥ë¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£ +

°ìÅÙÁªÂò¤µ¤ì¤¿¤é¡¢"n"¤È"p"¥­¡¼¤ò»È¤Ã¤Æ¸½ºß¤Î¥á¡¼¥ë¤ò +²¼¤ä¾å¤ËÆ°¤«¤·¤ÆÁªÂò¤Ç¤­¤Þ¤¹¡£ +

¥¹¥Ú¡¼¥¹¥­¡¼¤ò»È¤¨¤Ð¡¢ +´û¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¥á¡¼¥ë¤¬¤Þ¤À³¤¤¤Æ¤ë¾ì¹ç¤Ï¥¹¥¯¥í¡¼¥ë¤Ç¤­¡¢ +¤½¤Î¥á¡¼¥ë¤Î°ìÈÖ²¼¤Þ¤Ç¹Ô¤Ã¤¿¾ì¹ç¤Ï¡¢ +¤½¤Î¥Õ¥©¥ë¥ÀÆâ¤Î¸½ºß¤Î°ÌÃÖ¤è¤ê²¼¤Ë»Ä¤Ã¤Æ¤¤¤ë̤ÆɤΥ᡼¥ë¤Þ¤Ç +Èô¤ó¤Ç¤¯¤ì¤Þ¤¹¡£ +¤µ¤é¤Ë¥Õ¥©¥ë¥ÀÆâ¤Ç°ìÈÖ²¼¤Ë¹Ô¤¯¤«¡¢¤½¤ì¤è¤ê²¼¤Ë̤Æɥ᡼¥ë¤¬Ìµ¤¯¤Ê¤Ã¤¿¾ì¹ç¡¢ +"̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£¼¡¤Î¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤·¤Þ¤¹¤«?" +¤Èʹ¤«¤ì¡¢¤½¤Î¤Þ¤Þ¥¹¥Ú¡¼¥¹¥­¡¼¤ò²¡¤»¤Ð"¤Ï¤¤"¤ò¥¯¥ê¥Ã¥¯¤·¤¿¤³¤È¤Ë¤Ê¤ê¡¢ +¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤¹¤ë¥Õ¥©¥ë¥À¤ØÈô¤ó¤Ç¡¢¤Þ¤¿Æ±¤¸¤³¤È¤¬½ÐÍè¤Þ¤¹. +

Íפ¹¤ë¤Ë¡¢¥¹¥Ú¡¼¥¹¥­¡¼¤òÂǤÁ³¤±¤ë¤³¤È¤Ç¡¢Ì¤Æɥ᡼¥ë¤À¤±¤òÁª¤ó¤Ç¡¢ +Á´ÉôÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

5.3 Æɤà¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë +

+ +

¥Õ¥©¥ë¥À¥Ó¥å¡¼¤ÎÃ椫¤é¹¥¤­¤Ê¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ì¤Ð¤½¤Î¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤Ç¤­¤Þ¤¹¡£ +

¥µ¥Þ¥ê¥Ó¥å¡¼¤ÇÁªÂò¤·¤Æ¤¤¤¿¾ì¹ç¡¢¥­¡¼¥Ü¡¼¥É¤Î¢«¥Ü¥¿¥ó¤ò²¡¤¹¤È¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ë +¥Õ¥©¡¼¥«¥¹¤¬°Ü¤ê¡¢¥­¡¼¥Ü¡¼¥É¤Ç¥Õ¥©¥ë¥À¤òÁªÂò¤Ç¤­¤ë¾õÂ֤ˤʤê¤Þ¤¹¡£ +¤½¤Î¸å¢¬¢­¥­¡¼¤Ç°ÜÆ°¤·¡¢Return¥­¡¼¤Ç¥Õ¥©¥ë¥À¤òÁªÂò¤Ç¤­¤Þ¤¹¡£ +

¥Õ¥©¥ë¥À¤Îʸ»ú¤¬ÀÖ¤¤¾ì¹ç¤Ï¡¢¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¡¢ +¹õ¤¤ÂÀ»ú¤Î¾ì¹ç¤Ï̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¤Þ¤¹¡£ +

¤Þ¤¿¡¢ +

    +
  • "g"¥­¡¼¤¢¤ë¤¤¤Ï¡¢Alt+g¤ò²¡¤¹
  • +
  • ¥á¥Ë¥å¡¼¤Ç"¥µ¥Þ¥ê¡äÊ̤Υե©¥ë¥À¤Ø°ÜÆ°"¤òÁªÂò¤¹¤ë
  • +
+ +¤Î¤É¤Á¤é¤«¤ò¤¹¤ë¤³¤È¤Ç¥Õ¥©¥ë¥ÀÁªÂò²èÌ̤ò¸Æ¤Ó¤À¤¹¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¢¬¢­¤Ç°ÜÆ°¤·¡¢ +Enter¤ÇÁªÂò¤Ç¤­¤Þ¤¹¡£ +

5.4 multipart MIME(źÉÕ¥Õ¥¡¥¤¥ë)¤ò¸«¤ë +

+ +

¤¿¤Þ¤Ë¥Õ¥¡¥¤¥ë¤¬ÅºÉÕ¤µ¤ì¤Æ¤¤¤ë¥á¡¼¥ë¤¬¤¢¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ +¤½¤Î¾ì¹ç¤Ï¡¢MIME¥¿¥¤¥×¡¢¥µ¥¤¥º¤Ê¤É¤¬½ñ¤¤¤Æ¤¢¤ëÉôʬ¤¬Â¸ºß¤·¤Þ¤¹¤Î¤Ç¡¢ +¤½¤Î¥ê¥¹¥È¤ÎÃ椫¤éÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£ +

°ìÈÌŪ¤ËÆɤá¤ë¤È»×¤ï¤ì¤Æ¤¤¤ë¤â¤Î¤Ï¡¢¥¯¥ê¥Ã¥¯¤¹¤ë¤À¤±¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ +¤¹¡£ +

Êݸ¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢ +̾Á°¤òÉÕ¤±¤ÆÊݸ¤òÁªÂò¤¹¤ë¤«¡¢'y'¥­¡¼¤ò²¡¤»¤ÐÊݸ¤Ç¤­¤Þ¤¹¡£ +

¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¤µ¤»¤¿¤¤¤È¤­¤ÏƱ¤¸¤è¤¦¤Ë¤·¤Æ¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¤òÁª¤Ö¤«¡¢ +'t'¥­¡¼¤ò²¡¤¹¤³¤È¤Çɽ¼¨¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ +

¤Þ¤¿multipart MIME¤È¤·¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤ª¤¤¤Æ¤â¡¢ +'n'¡¢'p'¥­¡¼¤ÇźÉÕ¥Õ¥¡¥¤¥ë/¥á¥Ã¥»¡¼¥¸¤ÎÁ°¸å°ÜÆ°¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¸½ºß¤ÎSylpheed¤Ç¤Ï¡¢quoted-printableËô¤Ïbase64¥¨¥ó¥³¡¼¥ÉÊý¼°¤ò +»ÈÍѤµ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò±ÜÍ÷¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

5.5 ¥¹¥ì¥Ã¥É¤Î¿­½Ì +

+ +

¤½¤Î¥¹¥ì¥Ã¥É¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤¿¸å¡¢ +-¥­¡¼¤Ç¥¹¥ì¥Ã¥É¤ò½Ì¤á¤¿¤ê¡¢+¥­¡¼¤ÇŸ³«¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

5.6 ¥á¥Ã¥»¡¼¥¸Áàºî(°ÜÆ°¡¢ºï½üÅù) +

+ +

Sylpheed¤Ç¤Î¥á¥Ã¥»¡¼¥¸Áàºî¤Ï´ðËÜŪ¤Ë"¥Þ¡¼¥¯¤ò¤Ä¤±¤ë"¤È¤¤¤¦ºî¶È¤ò¤·¤Æ¤«¤é¡¢ +"¼Â¹Ô"¤È¤¤¤¦Áàºî¤Ç¼ÂºÝ¤Ë¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤·¤¿¤êºï½ü¤·¤¿¤ê¤Ç¤­¤Þ¤¹¡£ +¤³¤Î"¥Þ¡¼¥¯"¤Ï¡¢¥Õ¥©¥ë¥À¤ò°ÜÆ°¤¹¤ë¤È¾Ã¤¨¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ +

¥á¥Ã¥»¡¼¥¸¤Îºï½ü

+ +

ºï½ü¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +

    +
  • "d"¥­¡¼¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æºï½ü¤òÁª¤Ö
  • +
+ +¤Î¤É¤Á¤é¤«¤Ç¥µ¥Þ¥ê¥Ó¥å¡¼¤Î"M"¤ÎÉôʬ¤Ëd¤Èɽ¼¨¤µ¤ì¡¢³¥¿§¤Ë¤Ê¤êºï½ü¥Þ¡¼¥¯¤¬¤Ä¤±¤é¤ì¤Þ¤¹¡£ +

¥á¥Ã¥»¡¼¥¸¤Î°ÜÆ°

+ +

°ÜÆ°¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +

    +
  • "o"¥­¡¼¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ°ÜÆ°¤òÁª¤Ö
  • +
+ +¤Î¤É¤Á¤é¤«¤ò¹Ô¤¨¤Ð°ÜÆ°Àè¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë¥À¥¤¥¢¥í¥°¤¬¸½¤ì¤ë¤Î¤Ç¡¢¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ì¤Ð¡¢ +°ÜÆ°¥Þ¡¼¥¯¤¬¤Ä¤±¤é¤ì¤Þ¤¹¡£ +

ÌÜ°õ¤Ë¥Þ¡¼¥¯¤¹¤ë

+ +

¥Þ¡¼¥¯¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +

    +
  • "*"¥­¡¼¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ"¥Þ¡¼¥¯"¤òÁªÂò¤¹¤ë
  • +
+ +¤Î¤É¤Á¤é¤«¤ò¤¹¤ì¤Ð¡¢ÌÜ°õ¤Ë¥Þ¡¼¥¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¤³¤Î"¥Þ¡¼¥¯"¤Ï¼Â¹Ô¤·¤Æ¤â²¿¤âµ¯¤³¤ê¤Þ¤»¤ó¡£ +

¥Þ¡¼¥¯¤ò²ò½ü¤¹¤ë

+ +

²ò½ü¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +

    +
  • "u"¥­¡¼¤ò²¡¤¹
  • +
  • ¤«¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ"¥Þ¡¼¥¯¤ò²ò½ü"¤òÁªÂò
  • +
+ +¤Î¤É¤Á¤é¤«¤ò¤¹¤ì¤Ð¡¢ºï½ü¡¢°ÜÆ°¡¢ÌÜ°õ¤Î¥Þ¡¼¥¯¤ò²ò½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¼Â¹Ô

+ +

ºï½ü¡¢°ÜÆ°¤Î¥Þ¡¼¥¯¤ò¤Ä¤±¤¿¤é¡¢ +

    +
  • "x"¥­¡¼¤Þ¤¿¤Ï"Alt+x"¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ"¼Â¹Ô"¤òÁªÂò
  • +
  • ¥á¥Ë¥å¡¼¤Ç"¥µ¥Þ¥ê¡ä¼Â¹Ô"¤òÁªÂò
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ +

5.7 ¥á¥Ã¥»¡¼¥¸Æâ¤ÎURL +

+ +

¥á¥Ã¥»¡¼¥¸Æâ¤ÎURL¤Ï¡¢(¥Þ¥¦¥¹¥«¡¼¥½¥ë¤ÏÊѲ½¤·¤Þ¤»¤ó¤¬)URLÉôʬ¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢ +Á´È̤ÎÀßÄê¤Ç»ØÄꤵ¤ì¤¿³°Éô¥Ö¥é¥¦¥¶¤¬µ¯Æ°¤·¤½¤Î¥µ¥¤¥È¤ò±ÜÍ÷¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-6.html b/doc/manual/ja/sylpheed-6.html new file mode 100644 index 000000000..43c75be95 --- /dev/null +++ b/doc/manual/ja/sylpheed-6.html @@ -0,0 +1,195 @@ + + + + + Sylpheed User's Manual: ¥¢¥«¥¦¥ó¥È¤ÎÀßÄê(¥á¡¼¥ë¤òÁ÷¼õ¿®¤¹¤ë¤¿¤á¤Î½àÈ÷) + + + + + +Next +Previous +Contents +
+

6. ¥¢¥«¥¦¥ó¥È¤ÎÀßÄê(¥á¡¼¥ë¤òÁ÷¼õ¿®¤¹¤ë¤¿¤á¤Î½àÈ÷)

+ +

+

6.1 ¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ® +

+ +

¤Þ¤º¡¢¥á¡¼¥ë¤ò¼õ¿®/Á÷¿®¤¹¤ë¤¿¤á¤Ë¤Ï¥¢¥«¥¦¥ó¥È¤ÎÀßÄê¤ò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ +

¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®¤ò¹Ô¤¦¤Ë¤Ï¡¢ +[ÀßÄê]¥á¥Ë¥å¡¼¤«¤é"¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®"¤òÁªÂò¤·¤Þ¤¹¡£ +

¤½¤·¤Æ¡¢³Æ¹àÌܤ˽ñ¤­¹þ¤ó¤Ç¹Ô¤­¤Þ¤¹¡£ +

(ɬ¿Ü)¤Ï¡¢¿·¤¿¤Ë½ñ¤­¹þ¤Þ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¡¢ +()Æâ¤ËÊ̤ÎÆâÍƤ¬½ñ¤«¤ì¤Æ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤ì¤¬¥Ç¥Õ¥©¥ë¥È¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£ +

+

¤Ê¤ª¡¢¥¢¥«¥¦¥ó¥ÈÀßÄê¤Ï̵¸Â¤ËºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢ +¥¢¥«¥¦¥ó¥ÈÀßÄê¤ò¤·¤Ê¤¯¤Æ¤â¡¢´û¤Ë /Mail¤Ë¤¢¤ë¥á¡¼¥ë¤Ï¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤Ç¤¹¤¬¡¢SylpheedËÜÂΤμõ¿®µ¡Ç½¤ò»È¤ï¤Ê¤¤¾ì¹ç¤Ç¤â¡¢ +¥×¥í¥È¥³¥ë¤Ç¤Ê¤·(¥í¡¼¥«¥ë)¤òÁªÂò¤·¤¿¥¢¥«¥¦¥ó¥ÈÀßÄê¤òºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£ +

6.2 ³Æ¹àÌܤÎÀâÌÀ +

+ +

+

(´ðËÜ)¥¿¥Ö

+ +

+

¤³¤Î¥¢¥«¥¦¥ó¥È¤Î̾¾Î (¿ä¾©)

+ +

¤³¤Î¥¢¥«¥¦¥ó¥È¤Î̾¾Î¤ò»ØÄꤷ¤Þ¤¹¡£Ã±¤Ê¤ë¸Æ¤Ó̾¤Ç¤¹¤Î¤Ç¡¢¤Ê¤ó¤Ç¤â¹½¤¤¤Þ¤»¤ó¡£ +

Ä̾ï»ÈÍÑ

+ +

¤³¤³¤ò¥Á¥§¥Ã¥¯¤·¤¿¥¢¥«¥¦¥ó¥È¤¬µ¯Æ°»þ¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¾õÂ֤ˤʤê¤Þ¤¹¡£ +

¸Ä¿Í¾ðÊó - ̾Á° (ɬ¿Ü)

+ +

¥á¡¼¥ë¤ÎÁ÷¿®»þ¤Ë»ÈÍѤµ¤ì¤ë̾Á°¤Ç¤¹¡£ +

¸Ä¿Í¾ðÊó - ¥á¡¼¥ë¥¢¥É¥ì¥¹ (ɬ¿Ü)

+ +

¥á¡¼¥ë¤ÎÁ÷¿®»þ¤Ë»È¤ï¤ì¤ë¥á¡¼¥ë¥¢¥É¥ì¥¹¤Ç¤¹¡£ +

¸Ä¿Í¾ðÊó - ÁÈ¿¥

+ +

¥á¡¼¥ë¤ÎÁ÷¿®»þ¤Ë½ñ¤­¹þ¤Þ¤ì¤Þ¤¹¡£ +

¥µ¡¼¥Ð¾ðÊó - ¥×¥í¥È¥³¥ë (POP3)

+ +

¥×¥í¥È¥³¥ë¤Ï¸½Ãʳ¬¤Ç¤Ï¡¢ +

    +
  • POP3
  • +
  • POP3(APOPǧ¾Ú¤Ä¤­)
  • +
  • ¤Ê¤·(¥í¡¼¥«¥ë)
  • +
+ +¤ÎÃ椫¤éÁªÂò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ +¼«Ê¬¤Î¥µ¡¼¥Ð¤Ë¤¢¤Ã¤¿¤â¤Î¤òÁª¤Ó¤Þ¤·¤ç¤¦¡£ +

+

¥µ¡¼¥Ð¾ðÊó - ¼õ¿®È¢ (inbox)

+ +

¤½¤Î¥¢¥«¥¦¥ó¥È¤Ç¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¤È¤­¤Ë¤É¤³¤ËÊݸ¤¹¤ë¤«¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£ +¿¶¤êʬ¤±¤é¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤ËÆþ¤ë¥Õ¥©¥ë¥À¤È¹Í¤¨¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ +ÆäËÌäÂ꤬¤Ê¤±¤ì¤Ðinbox("¼õ¿®È¢"¤Î°Õ)¤ÇÌäÂê¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ +

+

¥µ¡¼¥Ð¾ðÊó - ¼õ¿®¥µ¡¼¥Ð (ɬ¿Ü)

+ +

¼õ¿®¤¹¤ë¥µ¡¼¥Ð¤ò»ØÄꤷ¤Þ¤¹¡£ +¥á¡¼¥ë¤Ï¡¢¥×¥í¥È¥³¥ë¤Ç»ØÄꤷ¤¿¥×¥í¥È¥³¥ë¤Ç¤³¤³¤Ç»ØÄꤷ¤¿¥µ¡¼¥Ð¤«¤é¼õ¿®¤µ¤ì¤Þ¤¹¡£ +

+

¥µ¡¼¥Ð¾ðÊó - SMTP¥µ¡¼¥Ð(Á÷¿®) (ɬ¿Ü)

+ +

Á÷¿®¤Ë»ÈÍѤ¹¤ë¥µ¡¼¥Ð¤ò»ØÄꤷ¤Þ¤¹¡£¥×¥í¥È¥³¥ë¤Ë¤ÏSMTP¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£ +

+

¥µ¡¼¥Ð¾ðÊó - ¥æ¡¼¥¶ID (ɬ¿Ü)

+ +

¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥æ¡¼¥¶ID¤ò»È¤Ã¤Æ¥á¡¼¥ë¥µ¡¼¥Ð¤Ë¥í¥°¥¤¥ó¤·¤Þ¤¹¡£ +

¥µ¡¼¥Ð¾ðÊó - ¥Ñ¥¹¥ï¡¼¥É(ɬ¿Ü)

+ +

¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ò»ÈÍѤ·¤Æ¥á¡¼¥ë¥µ¡¼¥Ð¤Ë¥í¥°¥¤¥ó¤·¤Þ¤¹¡£ +ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤Ï²èÌ̾å¤Ë¤Ï***¤È¤·¤«É½¼¨¤µ¤ì¤Þ¤»¤ó¡£ +

+

(¼õ¿®)¥¿¥Ö

+ +

+

¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë

+ +

¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Þ¤¹¡£ +

¥µ¡¼¥Ð¾å¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë

+ +

¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Ê¤¤¤È¤­¤Ë¡¢ +¥µ¡¼¥Ð¤Ç¥À¥¦¥ó¥í¡¼¥É¤¬½ªÎ»¤·¤¿ºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤òµ­²±¤·¤Æ¤¤¤Æ¡¢ +¼¡¤«¤é¤Ï¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ëµ¡Ç½¤ò»ý¤Ã¤¿¥µ¡¼¥Ð¤ËÃÖ¤¤¤Æ¡¢ +¤½¤Îµ¡Ç½¤ò̵»ë¤·¤Æ¤¹¤Ù¤Æ¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ +

¤Ä¤Þ¤ê¡¢¤³¤ì¤òÁªÂò¤·¤Ê¤±¤ì¤Ð¤½¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë¾ì¹ç¤Ï¼Â¼Á̵¸ú¤Ç¤¹¡£ +

+

¼õ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë

+ +

¤³¤Î¥¢¥«¥¦¥ó¥ÈÀßÄê¤ò»ÈÍѤ·¤Æ¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¤È¤­¤Ë¿¶¤êʬ¤±ÀßÄê¤òÍøÍѤ·¤Æ +¼õ¿®Ä¾¸å¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤«ÁªÂò¤Ç¤­¤Þ¤¹¡£´ðËÜŪ¤Ë¤ÏÁªÂò¤·¤Æ¤ª¤¤¤ÆÌäÂê¤Ê¤¤¤Ç¤·¤ç¤¦¡£ +

+

(Á÷¿®)¥¿¥Ö

+ +

+

¥Ø¥Ã¥À - Date¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÉÕ¤±¤ë

+ +

Date¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òSylpheed¤ÇÉÕ¤±¤Þ¤¹ +

¥á¥Ã¥»¡¼¥¸ID¤òÀ¸À®¤¹¤ë

+ +

¥á¥Ã¥»¡¼¥¸ID¤òSylpheed¤ÇÉÕ¤±¤Þ¤¹¡£ +°ìÈÌŪ¤ÊüËö·¿¥À¥¤¥ä¥ë¥¢¥Ã¥×IPÀܳ¤Î¥×¥í¥Ð¥¤¥À¤¬±¿±Ä¤·¤Æ¤¤¤ë¤è¤¦¤Ê¥µ¡¼¥Ð¤Ç¤Ï¡¢ +¥µ¡¼¥Ð¦¤¬¤Ä¤±¤ë¤Î¤ÇɬÍפ¢¤ê¤Þ¤»¤ó¡£ +

+

°Ê²¼¤Î¥¢¥É¥ì¥¹¤ò¼«Æ°»ØÄê

+ +

Cc, Bcc, Reply-To¥Õ¥£¡¼¥ë¥É¤ò¼«Æ°»ØÄê¤Ç¤­¤Þ¤¹¡£ +¼«Æ°»ØÄꤹ¤ë¤Ë¤Ï¡¢³Æ¥Õ¥£¡¼¥ë¥É̾¤Î²£¤Î¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹¤ò¥ª¥ó¤Ë¤·¡¢ +¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤Ëµ­Æþ¤¹¤ì¤Ð¥á¥Ã¥»¡¼¥¸ºîÀ®¤´¤È¤Ë¤Ä¤±¤Æ¤¯¤ì¤Þ¤¹¡£ +

(ºîÀ®)¥¿¥Ö

+ +

+

½ð̾¥Õ¥¡¥¤¥ë

+ +

¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤Ë¼«Æ°Åª¤ËºÇ¸å¤ËÁÞÆþ¤µ¤ì¤Þ¤¹¡£ +

+

(¹âÅÙ¤ÊÀßÄê)¥¿¥Ö

+ +

+

SMTP¥Ý¡¼¥È¤ò»ØÄê (25)

+ +

SMTP¥×¥í¥È¥³¥ë¤ÇÄÌ¿®¤¹¤ë¥Ý¡¼¥È¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤ÏÊѹ¹¤ÎɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ +

POP3¥Ý¡¼¥È¤ò»ØÄê (110)

+ +

POP3¥×¥í¥È¥³¥ë¤ÇÄÌ¿®¤¹¤ë¥Ý¡¼¥È¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤ÏÊѹ¹¤ÎɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ +

¥É¥á¥¤¥ó̾¤ò»ØÄê

+ +

¥É¥á¥¤¥ó̾¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤ÏÊѹ¹¤ÎɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ +

6.3 ¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ÎÊѹ¹ +

+ +

¥á¥Ë¥å¡¼¤Î"ÀßÄê¡ä¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÊѹ¹"¤«¤é¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¥¢¥«¥¦¥ó¥È¤Î¿·µ¬ºîÀ®¤ÇÅÐÏ¿¤·¤¿Ã椫¤é¸½ºß»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤Þ¤¿²èÌ̱¦²¼¤Ëɽ¼¨¤µ¤ì¤ë"¸½ºß¤Î¥¢¥«¥¦¥ó¥È:"¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢ +¥Ä¡¼¥ë¥Ð¡¼¤Î"¥¢¥«¥¦¥ó¥È"¥Ü¥¿¥ó¤ò±¦¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¤âÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤Ï¡¢"¿·Ãå¥á¡¼¥ë¤Î¼õ¿®"¤ä¡¢"¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®"¤ËÍøÍѤµ¤ì¤Þ¤¹¡£ +Á´¥¢¥«¥¦¥ó¥È¤Î¼õ¿®µ¡Ç½¤¬¤¢¤ë¤¿¤á¡¢Á°¼Ô¤Ï¤½¤ì¤Û¤É½ÅÍפǤϤ¢¤ê¤Þ¤»¤ó¤¬¡¢¸å¼Ô¤¬½ÅÍפǤ¹¡£ +Ê£¿ô¤Î¥¢¥«¥¦¥ó¥È¤òÀÚ¤êÂؤ¨¤Æ»È¤Ã¤Æ¤¤¤ë¿Í¤¬ +¥á¡¼¥ë¤òÁ÷¿®¤¹¤ë¤È¤­¤Ë¤Ï¡¢²èÌ̱¦²¼¤Ëɽ¼¨¤µ¤ì¤ë"¸½ºß¤Î¥¢¥«¥¦¥ó¥È:"¤ò³Îǧ¤·¤Æ¤«¤éÁ÷¿®¤¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ +

µ¯Æ°»þ¤Ï +Ä̾ï»ÈÍѤ˥Á¥§¥Ã¥¯¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +

6.4 ¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê +

+ +

"ÀßÄê¡ä¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê"¤Ç +¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤Î +¥¢¥«¥¦¥ó¥È¤Î¿·µ¬ºîÀ®¤ÇÀßÄꤷ¤¿¾ðÊó¤òÊÔ½¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

6.5 ¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸ +

+ +

¥á¥Ë¥å¡¼¤Î"ÀßÄê¡ä¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸"¤Ç¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸¥À¥¤¥¢¥í¥°¤ò¸Æ¤Ó½Ð¤·¡¢ +Sylpheed¤ËÅÐÏ¿¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤ò´ÉÍý¤Ç¤­¤Þ¤¹¡£ +

¤½¤ì¤¾¤ì¤Î¥Ü¥¿¥ó¤Ï°Ê²¼¤Î¤è¤¦¤ÊÆ°ºî¤ò¤·¤Þ¤¹¡£ +

ÄɲÃ

+ +

+¥¢¥«¥¦¥ó¥È¤ÎÄɲäÈƱ¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£ +

ÊÔ½¸

+ +

±¦¤Î¥ê¥¹¥È¤ÇÁªÂò¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤ËÂФ·¤Æ¡¢ +¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê¤ÈƱ¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£ +

ºï½ü

+ +

±¦¤Î¥ê¥¹¥È¤ÇÁªÂò¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤òºï½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¥À¥¤¥¢¥í¥°¤¬½Ð¤¿¤é¡¢"¤Ï¤¤"¤òÁªÂò¤¹¤ë¤À¤±¤Ç¤¹¤¬¡¢¿µ½Å¤Ë¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£ +

¢¬¡¢¢­

+ +

¤³¤ì¤é¤Î¥Ü¥¿¥ó¤ò»È¤¦¤È¥¢¥«¥¦¥ó¥È¤Î½çÈÖ¤òÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¥¢¥«¥¦¥ó¥È¤Î½çÈÖ¤ÏÁ´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®¤¹¤ë¤È¤­¤Î½çÈ֤ˤʤê¤Þ¤¹¡£ +

Ä̾ï»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤Ë»ØÄê

+ +

¥ê¥¹¥È¤ÇÁªÂò¤µ¤ì¤Æ¤¤¤ë¥¢¥«¥¦¥ó¥È¤Ë +Ä̾ï»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤òÊѹ¹¤Ç¤­¤Þ¤¹¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-7.html b/doc/manual/ja/sylpheed-7.html new file mode 100644 index 000000000..4e78c604b --- /dev/null +++ b/doc/manual/ja/sylpheed-7.html @@ -0,0 +1,54 @@ + + + + + Sylpheed User's Manual: ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿® + + + + + +Next +Previous +Contents +
+

7. ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®

+ +

+

7.1 Sylpheed¤ÎPOP¼õ¿®µ¡Ç½¤ò»È¤¦¾ì¹ç +

+ +

+

¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ò¼õ¿®

+ +

+¥¢¥«¥¦¥ó¥ÈÀßÄê¤ò¤·¤Æ¤«¤é¡¢ +

    +
  • ¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡ä¿·Ãå¥á¡¼¥ë¤ò¼õ¿®"¤òÁªÂò
  • +
  • ¥Ä¡¼¥ë¥Ð¡¼¤Î"¼õ¿®"¥Ü¥¿¥ó¤ò²¡¤¹
  • +
  • Alt+l¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð +¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤Î¥á¡¼¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤¹¡£ +

Á´¤Æ¤Î¥¢¥«¥¦¥ó¥È¤ò¼õ¿®

+ +

+

    +
  • ¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äÁ´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®"¤òÁªÂò
  • +
  • ¥Ä¡¼¥ë¥Ð¡¼¤Î"Á´¼õ¿®"¤ò¥¯¥ê¥Ã¥¯
  • +
+ +¤Î¤É¤Á¤é¤«¤ò¤¹¤ë¤³¤È¤Ç +¥¢¥«¥¦¥ó¥È¤ÎÀßÄê¤ÇÀßÄꤵ¤ì¤¿ +¤¹¤Ù¤Æ¤Î¥¢¥«¥¦¥ó¥È¤Î¥á¡¼¥ë¤ò¼õ¿®¤Ç¤­¤Þ¤¹¡£ +

7.2 fetchmail¤Ê¤É¤Î³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¾ì¹ç +

+ +

+


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-8.html b/doc/manual/ja/sylpheed-8.html new file mode 100644 index 000000000..d9ed6409b --- /dev/null +++ b/doc/manual/ja/sylpheed-8.html @@ -0,0 +1,104 @@ + + + + + Sylpheed User's Manual: ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ® + + + + + +Next +Previous +Contents +
+

8. ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®

+ +

8.1 ¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ® +

+ +

¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤¹¤ë¤Ë¤Ï¡¢ +

    +
  • ¥Ä¡¼¥ë¥Ð¡¼¤Î"ºîÀ®"¥Ü¥¿¥ó¤ò²¡¤¹
  • +
  • ¥á¥Ë¥å¡¼¤Î¥á¥Ã¥»¡¼¥¸¡ä¿·µ¬¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®"¤òÁªÂò
  • +
  • Alt+n¤¢¤ë¤¤¤Ïw¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥á¥Ã¥»¡¼¥¸ºîÀ®Window¤¬³«¤¯¤Î¤Ç¡¢É¬ÍפʹàÌܤò½ñ¤­¹þ¤ó¤Ç +"Á÷¿®(¥á¥Ã¥»¡¼¥¸¡äÁ÷¿® Alt+S)"¤«"¸å¤ÇÁ÷¿®(¥á¥Ã¥»¡¼¥¸¡ä¸å¤ÇÁ÷¿® Shift+Alt+S)" +¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ +¥á¥Ã¥»¡¼¥¸¥á¥Ë¥å¡¼¤è¤êBcc, ÊÖ¿®Àè¤ò»ØÄêÅù¤òÁªÂò¤¹¤ì¤Ð¡¢ +ɽ¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥£¡¼¥ë¥É¤Ë¤âÀßÄê¤Ç¤­¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ +

"Á÷¿®"¤Ï¤¹¤°¤ËÁ÷¿®¤·¡¢"¸å¤ÇÁ÷¿®"¤Ï°ìÅÙÁ÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ËÊݸ¤·¤Æ¤«¤é +¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤Î¥Ä¡¼¥ë¥Ð¡¼¤Î"Á÷¿®"¥Ü¥¿¥ó¤ä, +¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äÁ÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®"¤ÇÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +

¤É¤Á¤é¤Î¾ì¹ç¤â¡¢ +¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤ò"Á÷¿®"¤¢¤ë¤¤¤Ï"¸å¤ÇÁ÷¿®"¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿»þÅÀ¤Ç¤Î¥¢¥«¥¦¥ó¥È¤òÍøÍѤ·¤ÆÁ÷¿®¤µ¤ì¤Þ¤¹¡£ +

¸å¤ÇÁ÷¿®¤òÍøÍѤ·¤Æ¤â¡¢¸å¤ÇÁ÷¿®¥Ü¥¿¥ó¤ò²¡¤µ¤ì¤¿»þÅÀ¤Ç·èÄꤵ¤ì¤ë¤Î¤Ç¡¢ +¥¢¥«¥¦¥ó¥È¤òÊѤ¨¤ÆÊ̤Υá¥Ã¥»¡¼¥¸¤òºîÀ®¤·¡¢¤Þ¤È¤á¤ÆÁ÷¿®¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ +

"źÉÕ"¥Ü¥¿¥ó¤ò²¡¤¹¤«¡¢¥á¥Ë¥å¡¼¤Ç"¥Õ¥¡¥¤¥ë¡ä¥Õ¥¡¥¤¥ë¤òźÉÕ"¤Ç¥Õ¥¡¥¤¥ë¤ò +źÉÕ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +źÉÕ¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤¬¸½¤ì¤ë¤Î¤Ç¡¢³Æ¥Õ¥¡¥¤¥ë¤òÁªÂò¤·¤Æ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê +ÄɲäòÁªÂò¤¹¤ì¤ÐźÉÕ¥Õ¥¡¥¤¥ë¤ÎÄɲᢺï½ü¤òÁªÂò¤¹¤ì¤Ð¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥ê¥¹¥È¤«¤éºï½ü¡¢¥×¥í¥Ñ¥Æ¥£¤Ç¤½¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÎMIME¥¿¥¤¥×/¥¨¥ó¥³¡¼¥ÉÊý¼°/¥Ñ¥¹/¥Õ¥¡¥¤¥ë̾¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£ +

"ÁÞÆþ"¥Ü¥¿¥ó¤ä¥á¥Ë¥å¡¼¤Î¥Õ¥¡¥¤¥ë¡ä¥Õ¥¡¥¤¥ë¤òÁÞÆþ"¤Ç¤Ï¥á¥Ã¥»¡¼¥¸ËÜʸ¤Ë +»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤òÁÞÆþ¤Ç¤­¤Þ¤¹¡£ +

"¥¢¥É¥ì¥¹"¥Ü¥¿¥ó¤ò²¡¤¹¤«¡¢¥á¥Ë¥å¡¼¤Ç"¥Ä¡¼¥ë¡ä¥¢¥É¥ì¥¹Ä¢"¤òÁªÂò¤¹¤ì¤Ð¡¢ +¥¢¥É¥ì¥¹Ä¢¤ÈÏ¢·¸¤Ç¤­¤Þ¤¹¡£ +

³°Éô¥¨¥Ç¥£¥¿¤òÍøÍѤ¹¤ë¤Ë¤Ï¡¢ +³°Éô¥¨¥Ç¥£¥¿¤òÀßÄꤷ¤Æ¤«¤é¡¢ +

    +
  • ¥Ä¡¼¥ë¥Ð¡¼¤Î"¥¨¥Ç¥£¥¿"¥Ü¥¿¥ó¤ò²¡¤¹
  • +
  • ¥á¥Ë¥å¡¼¤Ç"ÊÔ½¸¡ä³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸"¤òÁªÂò
  • +
  • Alt+x¤òÁªÂò
  • +
+ +¤Î¤É¤ì¤«¤ò¤·¤Æ¡¢³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸¤·¤ÆÊݸ¤·¤Æ½ªÎ»¤ò¤¹¤ì¤Ð¡¢È¿±Ç¤µ¤ì¤Þ¤¹¡£ +

+

8.2 ¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®¤¹¤ë +

+ +

¤Þ¤º¡¢ +¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷¤Ë½ñ¤«¤ì¤Æ¤¤¤ëÊýË¡¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +

    +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê"ÊÖ¿®"¤òÁªÂò
  • +
  • ¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äÊÖ¿®"¤òÁªÂò
  • +
  • Alt+r¤¢¤ë¤¤¤Ï a¥­¡¼¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¥¦¥£¥ó¥É¥¦¤¬³«¤¯¤Î¤Ç¡¢ +¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®¤ÈƱ¤¸¤è¤¦¤Ë¤·¤ÆÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +

8.3 ¥á¥Ã¥»¡¼¥¸¤ò°úÍѤ·¤ÆÊÖ¿®¤¹¤ë +

+ +

+¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷¤Ë½ñ¤«¤ì¤Æ¤¤¤ëÊýË¡¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +

    +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê"°úÍѤ·¤ÆÊÖ¿®"¤òÁªÂò
  • +
  • ¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡ä°úÍѤ·¤ÆÊÖ¿®"¤òÁªÂò
  • +
  • Ctrl+q¤¢¤ë¤¤¤ÏA¥­¡¼¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¥¦¥£¥ó¥É¥¦¤¬³«¤¯¤Î¤Ç¡¢ +¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®¤ÈƱ¤¸¤è¤¦¤Ë¤·¤ÆÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +

8.4 ¥á¥Ã¥»¡¼¥¸¤òžÁ÷¤¹¤ë +

+ +

+¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷¤Ë½ñ¤«¤ì¤Æ¤¤¤ëÊýË¡¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +

    +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê"žÁ÷"¤òÁªÂò
  • +
  • ¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äžÁ÷"¤òÁªÂò
  • +
  • Ctrl+f¤¢¤ë¤¤¤Ïf,F¥­¡¼¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¥¦¥£¥ó¥É¥¦¤¬³«¤¯¤Î¤Ç¡¢ +¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®¤ÈƱ¤¸¤è¤¦¤Ë¤·¤ÆÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +
+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed-9.html b/doc/manual/ja/sylpheed-9.html new file mode 100644 index 000000000..074304e04 --- /dev/null +++ b/doc/manual/ja/sylpheed-9.html @@ -0,0 +1,100 @@ + + + + + Sylpheed User's Manual: ¥¢¥É¥ì¥¹Ä¢ + + + + + +Next +Previous +Contents +
+

9. ¥¢¥É¥ì¥¹Ä¢

+ +

¥¢¥É¥ì¥¹Ä¢¤Ï¡¢ +

    +
  • Alt + a¤ò²¡¤¹
  • +
  • ¥á¥Ë¥å¡¼¤è¤ê"¥Ä¡¼¥ë¡ä¥¢¥É¥ì¥¹Ä¢"¤òÁªÂò¤¹¤ë
  • +
+ +¤Ê¤É¤ÎÊýË¡¤Çµ¯Æ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

9.1 ¥¢¥É¥ì¥¹¤ÎÅÐÏ¿¡¦ºï½ü +

+ +

¥¢¥É¥ì¥¹Ä¢¤ò³«¤¤¤¿¸å¡¢¥¢¥É¥ì¥¹¤òÅÐÏ¿¤·¤¿¤¤¥Õ¥©¥ë¥À¤ò"¶¦Í­¥¢¥É¥ì¥¹"¤ä +"¸Ä¿ÍÍÑ¥¢¥É¥ì¥¹"¤Ê¤É¤¬½ñ¤«¤ì¤¿¥ê¥¹¥È¤ÎÃ椫¤éÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +

    +
  • ¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡ä¿·µ¬¥¢¥É¥ì¥¹"
  • +
  • ÅÐÏ¿¥Ü¥¿¥ó¤ò²¡¤¹
  • +
  • Alt + n¤ò²¡¤¹
  • +
  • ¥¢¥É¥ì¥¹É½¼¨Éôʬ¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢¿·µ¬¥¢¥É¥ì¥¹¤òÁªÂò
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤ÇÅÐÏ¿¥À¥¤¥¢¥í¥°¤¬¸½¤ì¤ë¤Î¤Ç¡¢¤½¤ì¤¾¤ì¤Î¹àÌܤòÆþÎϤ·¤¿¸åOK¤ò²¡¤»¤Ð +ÅÐÏ¿¤µ¤ì¤Þ¤¹¡£ +

¤Þ¤¿ÅÐÏ¿¤µ¤ì¤¿¥¢¥É¥ì¥¹¤òÁªÂò¸å¡¢ +

    +
  • ¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡äÊÔ½¸"
  • +
  • Alt + return¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤ÆÊÔ½¸¤òÁªÂò
  • +
  • ÊÔ½¸¥Ü¥¿¥ó¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ì¤ÐÊÔ½¸¥À¥¤¥¢¥í¥°¤òɽ¼¨¤Ç¤­¡¢OK¤ò²¡¤»¤Ð¹¹¿·¤µ¤ì¤Þ¤¹¡£ +

Ʊ¤¸¤¯ÅÐÏ¿¤µ¤ì¤¿¥¢¥É¥ì¥¹¤òÁªÂò¸å¡¢ +

    +
  • ¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡äºï½ü"
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æºï½ü¤òÁªÂò
  • +
  • ºï½ü¥Ü¥¿¥ó¤ò²¡¤¹
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥¢¥É¥ì¥¹Ä¢¤«¤é¤½¤Î¥¢¥É¥ì¥¹¤òºï½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

9.2 ¥Õ¥©¥ë¥À¤È¥°¥ë¡¼¥× +

+ +

¥Õ¥©¥ë¥À¤È¥°¥ë¡¼¥×¤ÏÃæ¤Ë¥¢¥É¥ì¥¹¤òÆþ¤ì¤é¤ì¤ë¤È¤¤¤¦ÅÀ¤ÇƱ¤¸¤Ç¤¹¤¬¡¢ +¥á¡¼¥ëºîÀ®»þ¤Ë¥¢¥É¥ì¥¹Ä¢¤«¤é¥°¥ë¡¼¥×¤ò»²¾È¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¥°¥ë¡¼¥×¤ËÅÐÏ¿¤µ¤ì¤¿ +¤¹¤Ù¤Æ¤Î¿Í¤ËÁ÷¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤È¤¤¤¦µ¡Ç½¤Î°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£ +

¥Õ¥©¥ë¥À¤¢¤ë¤¤¤Ï¥°¥ë¡¼¥×¤òÃæ¤Ëºî¤ê¤¿¤¤¥Õ¥©¥ë¥À¤òÁªÂò¸å¡¢ +

    +
  • ¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡ä¿·µ¬¥Õ¥©¥ë¥À"
  • +
  • Alt + r¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æ¿·µ¬¥Õ¥©¥ë¥À¤òÁªÂò
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢ +
    +
  • ¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡ä¿·µ¬¥°¥ë¡¼¥×"
  • +
  • Alt + g¤ò²¡¤¹
  • +
  • ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æ¿·µ¬¥°¥ë¡¼¥×¤òÁªÂò
  • +
+ +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +

¤¿¤À¤·¡¢¥Õ¥©¥ë¥À¤ÎÃæ¤Ë¥Õ¥©¥ë¥À¤ä¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤³¤È¤Ï²Äǽ¤Ç¤¹¤¬¡¢ +¥°¥ë¡¼¥×¤ÎÃæ¤Ë¥Õ¥©¥ë¥À¤ä¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +

9.3 ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤È¤ÎÏ¢·È +

+ +

+¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®²èÌ̤ǡ¢ +

    +
  • ¥á¥Ë¥å¡¼¤Ç"¥Ä¡¼¥ë¡ä¥¢¥É¥ì¥¹Ä¢"
  • +
  • "¥¢¥É¥ì¥¹"¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯
  • +
+ +¤¹¤ë¤³¤È¤Ç¥¢¥É¥ì¥¹Ä¢²èÌ̤ò½Ð¤¹¤³¤È¤¬¤Ç¤­¡¢ +¤½¤³¤Ç¥¢¥É¥ì¥¹¤ä¥°¥ë¡¼¥×¤òÁªÂò¤·¤Æ"°¸Àè"(¤¢¤ë¤¤¤Ï"To:"), "Cc:", "Bcc:"¥Ü¥¿¥ó¤ò²¡¤»¤Ð +¤½¤ì¤¾¤ì°¸Àè, Cc, Bcc¤Ë¥¢¥É¥ì¥¹¤¬Äɲ䵤ì¤Þ¤¹¡£ +

Ê£¿ôÁªÂò¤·¤Æ¥Ü¥¿¥ó¤ò²¡¤·¤ÆƱ»þ¤Ë¤¿¤¯¤µ¤óÄɲ乤뤳¤È¤â²Äǽ¤Ç¤¹¤·¡¢ +°ìÅÙ3¤Ä¤Î¤É¤ì¤«¤Î¥Ü¥¿¥ó¤ò²¡¤·¤¿¸å¤Þ¤¿Ê̤Υ¢¥É¥ì¥¹¤òÁªÂò¤·¤Æ¥Ü¥¿¥ó¤ò²¡¤»¤Ð +Á°¤ËÄɲä·¤¿¥¢¥É¥ì¥¹¤Î¼¡¤ËÁªÂò¤·¤¿¥¢¥É¥ì¥¹¤¬Äɲ䵤ì¤Þ¤¹¡£ +


+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed.html b/doc/manual/ja/sylpheed.html new file mode 100644 index 000000000..c14c3944e --- /dev/null +++ b/doc/manual/ja/sylpheed.html @@ -0,0 +1,180 @@ + + + + + Sylpheed User's Manual + + + + + +Next +Previous +Contents +
+

Sylpheed User's Manual

+ + +

Yoichi Imai <yoichi@silver-forest.com> +

+


+ Sylpheed User's Manual for Sylpheed-0.4.x version 0.2.2 + +
+

+

1. Sylpheed¤È¤Ï

+ + +

+

2. ¥¤¥ó¥¹¥È¡¼¥ë

+ + +

+

3. µ¯Æ°¤È½ªÎ»

+ + +

+

4. Sylpheed¤Î¤µ¤Þ¤¶¤Þ¤Ê¾ì½ê¤Î̾¾Î

+ + +

+

5. ¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷

+ + +

+

6. ¥¢¥«¥¦¥ó¥È¤ÎÀßÄê(¥á¡¼¥ë¤òÁ÷¼õ¿®¤¹¤ë¤¿¤á¤Î½àÈ÷)

+ + +

+

7. ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿®

+ + +

+

8. ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®

+ + +

+

9. ¥¢¥É¥ì¥¹Ä¢

+ + +

+

10. ¥á¥Ã¥»¡¼¥¸¤Î¿¶¤êʬ¤±

+ + +

+

11. ¾¥á¡¼¥ë(¥á¡¼¥ëÊݸ·Á¼°)¤«¤éSylpheed(MH¥Õ¥©¥ë¥À·Á¼°)¤Ø¤Î°Ü¹Ô

+ + +

+

12. NetNews¤Î¹ØÆÉ

+ + +

+

13. ¥«¥¹¥¿¥Þ¥¤¥º(Á´È̤ÎÀßÄê)

+ + +

+

14. ¥ê¥Õ¥¡¥ì¥ó¥¹

+ + +

+

15. FAQ

+ + +

+

16. ¾ðÊó

+ + +

+

17. ¤³¤Îʸ½ñ¤Ë¤Ä¤¤¤Æ

+ + +
+Next +Previous +Contents + + diff --git a/doc/manual/ja/sylpheed.sgml b/doc/manual/ja/sylpheed.sgml new file mode 100644 index 000000000..564ce004c --- /dev/null +++ b/doc/manual/ja/sylpheed.sgml @@ -0,0 +1,2132 @@ + +
+ Sylpheed User's Manual + <author>Yoichi Imai <yoichi@silver-forest.com> + <abstract> + Sylpheed User's Manual for Sylpheed-0.4.x version 0.2.2 + </abstract> + +<toc> +<sect>Sylpheed¤È¤Ï +<sect1>Sylpheed ¤È¤Ï +<p> +Sylpheed¤È¤ÏGNOME¤Ê¤É¤ËÍøÍѤµ¤ì¤Æ¤¤¤ëGTK+¤ò»ÈÍѤ·¡¢ +X Window System¾å¤ÇÆ°ºî¤¹¤ë +<itemize> +<item>·Ú²÷¤ÊÆ°ºî +<item>Èþ¤·¤¯¡¢ÀöÎý¤µ¤ì¤¿¥¤¥ó¥¿¥Õ¥§¡¼¥¹ +<item>ÍưפÊÀßÄꡦÁàºî +<item>Ë­É٤ʵ¡Ç½ +</itemize> +¤òÌܻؤ·¤¿ÅŻҥ᡼¥ë¥¯¥é¥¤¥¢¥ó¥È&¥Ë¥å¡¼¥¹¥ê¡¼¥À¤Ç¤¹¡£ + +¤Þ¤À³«È¯ÅÓÃæ¤Ç¤¹¤Î¤Ç¡¢ ¤½¤ì¤Û¤É¹âµ¡Ç½¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢ +Version 1.0¤Ë¤ÏÁêÅö¤Îµ¡Ç½¤òÈ÷¤¨¤ëͽÄê¤Ç¤¹¡£ + +</sect1> +<sect1>¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ +<p> +¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ï +<itemize> +<item>Outlook Express +<item>Becky! +<item>Datula +</itemize> +¤Ê¤É¤ÎWindows¤Ç¤ÎÄêÈ֥᡼¥é¤ò»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ + +Áàºî¤äµ¡Ç½Åù¤ÏMew¤äWanderlustÅù¤ÎEmacs·Ï¥á¡¼¥é¤ò +»²¹Í¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ + +</sect1> +<sect1>¼ç¤Êµ¡Ç½ +<p> +¼ç¤Êµ¡Ç½¤È¤·¤Æ¤Ï¡¢ +<itemize> +<item>̵À©¸Â¤ÎÊ£¿ô¥¢¥«¥¦¥ó¥È´ÉÍý +<item>¥¹¥ì¥Ã¥Éɽ¼¨ +<item>¿¶¤êʬ¤±µ¡Ç½ +<item>XML¥Ù¡¼¥¹¤Î¥¢¥É¥ì¥¹Ä¢ +<item>¿·Ã塦̤ÆÉ´ÉÍý +<item>¥Ë¥å¡¼¥¹¥ê¡¼¥À¡¼µ¡Ç½(¸½ºß¤Ïread¤Î¤ß²Äǽ) +<item>APOPǧ¾Ú +<item>UIDLÂбþ +<item>¥­¡¼¥Ü¡¼¥É¤Î¤ß¤Ë¤è¤ëÁàºî¤¬²Äǽ(Mew/Wanderlust ¥é¥¤¥¯¤Ê¥­¡¼¥Ð¥¤¥ó¥É) +<item>¥ª¥Õ¥é¥¤¥ó´Ä¶­¤ò¹Íθ¤·¤¿¡¢Á÷¿®ÂÔ¤Á¤«¤é¤ÎÁ÷¿® +<item>multipart-MIME¤Ë¤è¤ëźÉÕ¥Õ¥¡¥¤¥ë¤Î±ÜÍ÷/Á÷¿®(Base64, quoted-printable) +</itemize> +Åù¤¬¤¢¤²¤é¤ì¡¢Â¾¤ÎÊØÍø¤Êµ¡Ç½¤È¤·¤Æ¤Ï¡¢ +<itemize> +<item>MLÅù¤Ç¥¹¥ì¥Ã¥É¤¬ÀÚ¤ì¤Æ¤¤¤ë¤È¤­ÊØÍø¤Ê¡Ö·ï̾¤Ç´ó¤»¤ë¡×µ¡Ç½ +<item>mbox ¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È²Äǽ +<item>Á´³Ñ±Ñ¿ô»ú¤òȾ³Ñ±Ñ¿ô»ú¤ËÊÑ´¹¤¹¤ëµ¡Ç½ +<item>¥¯¥ê¥Ã¥«¥Ö¥ëURI +<item>³°Éô¥¨¥Ç¥£¥¿Âбþ +<item>X-FaceÂбþ(compface»ÈÍÑ»þ) +<item>IPv6 +<item>UTF-8(Unicode)¤ò´Þ¤à¿¿ô¤Î¸À¸ì¤ËÂбþ(libjconv»ÈÍÑ»þ) +<item>²èÁüɽ¼¨µ¡Ç½¤òÆâ¡(gdk-fixbuf¤¢¤ë¤¤¤Ïimlib»ÈÍÑ»þ) +</itemize> +Åù¤¬¤¢¤ê¤Þ¤¹¡£ + +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸¤Î´ÉÍýÊý¼° +<p> +MH·Á¼°¤Ç´ÉÍý¤·¤Æ¤ª¤ê¡¢Â¾¤ÎMH·Á¼°¤ò»ÈÍѤ·¤¿¥á¡¼¥é(MewÅù)¤ÈÊ»ÍѤ¹¤ë¤³¤È¤¬ +²Äǽ¤Ç¤¹¡£ +¥×¥í¥È¥³¥ë¤Ï¸½ºßPOP3(APOPǧ¾Ú²Ä)¤¬»ÈÍѲÄǽ¤Ç¤¹¡£ +¼õ¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤Î»ÈÍѤâ²Äǽ¤Ç¤¹¡£ + +</sect1> +<sect1>¼Â¸½Í½Äê¤Îµ¡Ç½ +<p> +<itemize> +<item>¿·Ãå¥á¡¼¥ë¤ÎÄê´üŪ¥Á¥§¥Ã¥¯ +<item>¥Ë¥å¡¼¥¹¥¯¥é¥¤¥¢¥ó¥Èµ¡Ç½¤Î½¼¼Â +<item>¥Ø¥Ã¥À¤Î¥«¥¹¥¿¥Þ¥¤¥º +<item>¥É¥é¥Ã¥° & ¥É¥í¥Ã¥× +<item>MH, mbox°Ê³°¤Î·Á¼°¤Ø¤ÎÂбþ +<item>¥á¥Ã¥»¡¼¥¸¤ÎÁ´Ê¸¸¡º÷ (namazu ¤È¤ÎÏ¢·È) +<item>¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¥Þ¥Í¡¼¥¸¥ã +<item>PGP/GPG IMAP4 SSLÂбþ +<item>°µ½Ì¥Õ¥©¥ë¥À +</itemize> +¤Ê¤É¤¬¤¢¤ê¤Þ¤¹¡£ +¤â¤·¼ÂÁõ¤µ¤ì¤¿Êý¤¬¤¤¤é¤Ã¤·¤ã¤¤¤Þ¤·¤¿¤é¡¢ +<ref id="Sylpheed-ML" name="Sylpheed ML">¤Ë¤Ç¤âpatch¤òÁ÷¤Ã¤Æ失¤ì¤Ð¹¬¤¤¤Ç¤¹¡£ + +</sect1> +</sect> +<sect>¥¤¥ó¥¹¥È¡¼¥ë +<p> +<sect1>ɬÍפʴĶ­ +<p> +¤³¤Î¥×¥í¥°¥é¥à¤Î¥³¥ó¥Ñ¥¤¥ë/¼Â¹Ô¤Ë¤Ï +<itemize> +<item>Linux ¤¢¤ë¤¤¤Ï¾¤Î UNIX like OS +<item>GTK+ 1.2.6 °Ê¹ß +<item>GNU make +</itemize> +¤¬É¬ÍפǤ¹¡£ +¤¢¤ì¤ÐÊØÍø¤Ê¤â¤Î¤Ï¡¢ +<itemize> +<item>gettext +<item>imlib¤Þ¤¿¤Ïgdk-pixbuf +<item>compface(faces) +</itemize> +¤Ç¤¹¡£¤³¤Î¥Þ¥Ë¥å¥¢¥ë¤Ç¤Ïgettext¤ÏÆþ¤Ã¤Æ¤¤¤ë¤â¤Î¤Ç¡¢ +locale¤Ïja_JP.*¤È¤·¤Æµ­½Ò¤·¤Æ¤¢¤ê¤Þ¤¹¡£ + +</sect1> +<sect1>Æ°ºî³Îǧ¤µ¤ì¤Æ¤¤¤ë´Ä¶­ +<p> +°Ê²¼¤ÎOS/Linux Distribution¤ÇÆ°ºî¤¬³Îǧ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +¾¤Î´Ä¶­¤ÇÆ°ºî¤·¤¿¤È¤¤¤¦Êý¤Ï<ref id="Sylpheed-ML" name="Sylpheed ML">¤ÇÊó¹ð失¤ì¤Ð¹¬¤¤¤Ç¤¹¡£ +<itemize> +<item>Debian GNU/Linux (woody) (glibc 2.1.3) (³«È¯´Ä¶­) +<item>Kondara MNU/Linux (glibc 2.1.x) +<item>Vine Linux 1.1 (glibc 2.0.x + libwcsmbs) +<item>Vine Linux 2.0 (glibc 2.1.x) +<item>Laser5 Linux 6.0 (glibc 2.1.x) +<item>Laser5 Linux 6.2 (glibc 2.1.x) +<item>TurboLinux 4.0 (glibc 2.0.7 + libwcsmbs) +<item>TurboLinux 6.0 (glibc 2.1.2) +<item>RedHat Linux 6.1 + Helix GNOME (glibc 2.1.x) +<item>RedHat Linux 6.2 (glibc 2.1.x) +<item>RedHat Linux 6.2J (glibc 2.1.x) +<item>LinuxPPC2000 + ÀãÉ÷(ÆüËܸ첽 kit) +<item>Linux2000G (Intel, PowerPC) +<item>Linux for PPC Japanese Edition 2.0 (glibc 2.1.x) +<item>Linux MLD4 +<item>Plamo Linux 2.0 +<item>Linux Mandrake 7.0 +<item>Linux Mandrake 7.1 +<item>SuSE Linux 6.3 (glibc 2.1.2) +<item>SuSE Linux 6.4 +<item>SuSE Linux 7.0 +<item>OpenLinux 2.3 (glibc 2.1.1 -> 2.1.3) +<item>FreeBSD 3.2-RELEASE +<item>FreeBSD 3.4-RELEASE +<item>FreeBSD 4.0-RELEASE +<item>FreeBSD 4.1-RELEASE +<item>FreeBSD 5.0-CURRENT +<item>OpenBSD 2.7 +<item>Solaris 2.6 +<item>Solaris 7 +<item>IRIX 6.3 +<item>HP-UX 10.20 +</itemize> + +¤·¤«¤·¡¢´Ä¶­¤Ë¤è¤Ã¤Æ¤ÏÉÔ°ÂÄê¤Ê²ÄǽÀ­¤¬¤¢¤ê¤Þ¤¹¡£¥é¥¤¥Ö¥é¥ê¤Ï¤Ç¤­¤ë¤À¤±¿·¤·¤¤¤â¤Î¤ò¤ª»È¤¤¤¯¤À¤µ¤¤¡£ +</sect1> +<sect1>´ðËÜŪ¤ÊinstallÊýË¡<label id="gen-inst"> +<p> +¤³¤³¤Ë¼¨¤¹¤Î¤ÏUNIX¤Ê¤é¤Û¤Ü»È¤¨¤ë¤È»×¤ï¤ì¤ë¥¤¥ó¥¹¥È¡¼¥ëÊýË¡¤Ç¤¹¡£ +¤·¤«¤·¡¢OS¤Î»ý¤Ã¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë´ÉÍýµ¡¹½¤ò²õ¤¹²ÄǽÀ­¤¬¤¢¤ë¤Î¤Ç¡¢ +Åö¤Æ¤Ï¤Þ¤ë¤â¤Î¤¬²¼¤Ë¤¢¤ë¾ì¹ç¤Ï¡¢¤½¤ì¤òÍøÍѤ¹¤ë¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£ + +<sect2>GTK+¤Î¥¤¥ó¥¹¥È¡¼¥ë +<p> + +</sect2> + +<sect2>Sylpheed¤Î¥³¥ó¥Ñ¥¤¥ë¤È¥¤¥ó¥¹¥È¡¼¥ë +<p> +¤Þ¤º¡¢ +<url url="http://sylpheed.good-day.net/">¤«¤é +sylpheed¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ +¥À¥¦¥ó¥í¡¼¥É¤·¤¿¤é¡¢ +<tscreen><verb> +bzip2 -dc sylpheed-(¥Ð¡¼¥¸¥ç¥ó).tar.bz2 | tar xf - ¤È¤·¤Æ²òÅष¡¢ +$ cd sylpheed-(¥Ð¡¼¥¸¥ç¥ó) +$ ./configure +$ make +$ su +Password: (¥Ñ¥¹¥ï¡¼¥ÉÆþÎÏ) +# make install +</verb></tscreen> +¤Ç¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£~ + + +</sect2> +</sect1> +<sect1>rpm¤ò»ÈÍѤ·¤¿Linux Distribution¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +<p> +rpm¤ò»ÈÍѤ·¤¿¥Ç¥£¥¹¥È¥ê¥Ó¥å¡¼¥¸¥ç¥ó¤Ë¤Ï¡¢ +<itemize> +<item>Red Hat Linux +<item>Laser5 Linux +<item>Vine Linux +<item>Kondara MNU/Linux +</itemize> +¤Ê¤É¤ò¼¨¤·¤Þ¤¹¡£ +<sect2>°ìÈÌŪ¤Ê¥¤¥ó¥¹¥È¡¼¥ë¼ê½ç(ºÇ¿·ÈǤòÍøÍѤ¹¤ë¾ì¹ç) +<p> +<sect3>¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤òÍѤ¤¤ë¾ì¹ç +<p> +<sect4>gtk+¤Î¥¤¥ó¥¹¥È¡¼¥ë/¥¢¥Ã¥×¥°¥ì¡¼¥É<label id="gtk-inst-bin"> +<p> +¤Þ¤º¡¢gtk+¤Îrpm¤¬Æþ¤Ã¤Æ¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹¡£ +<tscreen><verb> +$ rpm -qa | grep gtk +gtk+-1.2.6-1vl5 +(°Ê²¼Î¬) +</verb></tscreen> +¤Î¤è¤¦¤Ëgtk+¤Îrpm¤¬´û¤ËÆþ¤Ã¤Æ¤¤¤Æ¡¢¤Ê¤ª¤«¤Ä1.2.6°Ê¾å¤Ç¤¢¤ì¤ÐÂç¾æÉפǤ¹¡£ +¸Å¤¤¾ì¹ç¤Ï¡¢¤½¤ÎDistribution¤òÇÛÉÛ¤·¤Æ¤¤¤ë¥µ¥¤¥ÈÅù¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +<tscreen><verb> +$ su +Password: (¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ) +# rpm -Uvh gtk+-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm +</verb></tscreen> +¤Ç¥Ð¡¼¥¸¥ç¥ó¥¢¥Ã¥×¤·¤Æ¤¯¤À¤µ¤¤¡£ + +</sect4> +<sect4>rpm¤Î¥¤¥ó¥¹¥È¡¼¥ë +<p> +<url url="http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html"> +¤è¤ê¡¢ + +sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£¤½¤·¤Æ¡¢ +<tscreen><verb> +$ su +Password: (¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ) +# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm +</verb></tscreen> +¤Ç´°Î»¤Ç¤¹¡£ +¤Ê¤ª¡¢http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html¤Îrpm¤ò»ÈÍѤ¹¤ë¾ì¹ç¡¢ +`rpm -q glibc`¤È¼Â¹Ô¤·¤¿¤È¤­¤Ë¡¢ +glibc-2.1.2-17vl2¤Î¤è¤¦¤Ë¡¢glibc-2.1.x°Ê¹ß¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ +¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¾ì¹ç¡¢gtk+°Ê³°¤Ëimlib¤Îrpm¤¬É¬Íפˤʤë¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ + +</sect4> +</sect3> +<sect3>¥½¡¼¥¹¥Ñ¥Ã¥±¡¼¥¸¤òÍѤ¤¤ë¾ì¹ç<label id="inst_from_srpm"> +<p> +¤³¤ÎÊýË¡¤Ï¡¢¾åµ­¤Îglibc¤Î¥Ð¡¼¥¸¥ç¥ó¤¬Ä㤫¤Ã¤¿¾ì¹ç¤Ç¤âÍøÍѲÄǽ¤Ç¤¹¡£ +<sect4>gtk+¤Î¥¤¥ó¥¹¥È¡¼¥ë/¥¢¥Ã¥×¥°¥ì¡¼¥É<label id="gtk-inst-src"> +<p> +¤Þ¤º¡¢gtk+¤Îrpm¤¬Æþ¤Ã¤Æ¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹¡£ +<tscreen><verb> +$ rpm -qa | grep gtk +gtk+-1.2.6-1vl5 +gtk+-devel-1.2.6-1vl5 +(°Ê²¼Î¬) +</verb></tscreen> +¤Î¤è¤¦¤Ëgtk+µÚ¤Ógtk+-devel¤Îpackage¤¬´û¤ËÆþ¤Ã¤Æ¤¤¤Æ¡¢¤Ê¤ª¤«¤Ä1.2.6°Ê¾å¤Ç¤¢¤ì¤ÐÂç¾æÉפǤ¹¡£ +¸Å¤¤¾ì¹ç¤Ï¡¢¤½¤ÎDistribution¤òÇÛÉÛ¤·¤Æ¤¤¤ë¥µ¥¤¥ÈÅù¤«¤é¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +<tscreen><verb> +# rpm -Uvh gtk+-(¥Ð¡¼¥¸¥ç¥ó)-?.i386.rpm gtk+-devel-(¥Ð¡¼¥¸¥ç¥ó)-?.i386.rpm +</verb></tscreen> +¤Ç¥Ð¡¼¥¸¥ç¥ó¥¢¥Ã¥×¤·¤Æ¤¯¤À¤µ¤¤¡£ + +</sect4> +<sect4>rpm¤Îrebuild & install +<p> +¤½¤·¤Æ¡¢ +<url url="http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html">¤è¤ê¡¢ +sylpheed-(¥Ð¡¼¥¸¥ç¥ó).src.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ +¼¡¤Ë²¼¤Î¥³¥Þ¥ó¥É¤ò¼Â¹Ô¤·¤Þ¤¹¡£ +¤¿¤À¤·¡¢²¼µ­¤ÎÊýË¡¤Ç¤Ï¥³¥ó¥Ñ¥¤¥ë¤Ë¤âroot¤Ë¤Ê¤ë¤¿¤á¾¯¤·¤À¤±´í¸±¤Ç¤¹¡£ +¤Ê¤é¤Ê¤¯¤Æ¤âÎɤ¤´Ä¶­¤òÀ°¤¨¤Æ¤¤¤ëÊý¤Ï¡¢rpm --rebuild¤Î¤¿¤á¤Ësu¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£ +<tscreen><verb> +$ su +Password: (¥Ñ¥¹¥ï¡¼¥É¤òÆþÎÏ) +# rpm --rebuild sylpheed-(¥Ð¡¼¥¸¥ç¥ó).src.rpm +</verb></tscreen> +¤È¤¹¤ì¤Ð¥³¥ó¥Ñ¥¤¥ë¤¬³«»Ï¤µ¤ì¡¢ +<tscreen><verb> +(°Ê¾åά) +½ñ¤­¹þ¤ßÃæ: /usr/src/redhat/RPMS/i386/sylpheed-0.3.3-1.i386.rpm +(°Ê²¼Î¬) +</verb></tscreen> +¤Î¤è¤¦¤Ê¥á¥Ã¥»¡¼¥¸(½ñ¤­¹þ¤ßÃæ:¤¬Wrote: ¤Ê¤É¤Ë¤Ê¤ë¾ì¹ç¤â¤¢¤ê¤Þ¤¹)¤¬¸½¤ì¤Æ¡¢ +½ªÎ»¤·¤¿¤é¡¢¾åµ­¤Ë¼¨¤µ¤ì¤¿¥Õ¥¡¥¤¥ë(sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm)¤ò +<tscreen><verb> +# rpm -Uvh /usr/src/redhat/RPMS/i386/sylpheed-(¥Ð¡¼¥¸¥ç¥ó).i386.rpm +</verb></tscreen> +¤Ç¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£ + +</sect4> + +</sect3> + +</sect2> +<sect2>Vine Linux 1.1¤¢¤ë¤¤¤Ï1.0¤Ø¤ÎVine Plus¤òÍøÍѤ·¤¿¥¤¥ó¥¹¥È¡¼¥ë +<p> +<ref id="gtk-inst-bin" name="gtk¤Î¥Ð¡¼¥¸¥ç¥ó³Îǧ/¥¤¥ó¥¹¥È¡¼¥ë/¥¢¥Ã¥×¥°¥ì¡¼¥É">¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£ +gtk+¤ÎÆþ¼êÀè¤Ë¤Ï¡¢ +<url +url="ftp://ftp.jaist.ac.jp/pub/os/linux/Vine/VinePlus/1.1/" +name="VinePlus"> + +¤¬ÍøÍѲÄǽ¤Ç¤¹¡£Vine Plus¤òÍøÍѤ·¤¿¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤Ï¡¢gtk+-devel¤Îrpm¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£ +gtk+-devel¤ÎÉôʬ¤ÏÈô¤Ð¤·¤Æ¹Í¤¨¤Æ¤¯¤À¤µ¤¤¡£ + +¼¡¤Ë¾åµ­¥µ¥¤¥È¤Ê¤É¤è¤ê¡¢Vine Plus¤Ë´Þ¤Þ¤ì¤ë +sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +<tscreen><verb> +# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm +</verb></tscreen> +¤È¤¹¤ì¤Ð¥¤¥ó¥¹¥È¡¼¥ë´°Î»¤Ç¤¹¡£ + +¤Ê¤ª¡¢Vine Linux 1.1Ëô¤Ï1.0ɸ½à¤À¤È¥Õ¥©¥ó¥È¤¬¾¯¤·Â礭¤¤¤Î¤Ç¡¢ +¥Õ¥©¥ó¥È»ØÄê¤Î¹à¤â¸«¤Æ¤ª¤¯¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ + +</sect2> +<sect2>Vine Linux 2.0¤Ø¤ÎVine Plus¤òÍøÍѤ·¤¿¥¤¥ó¥¹¥È¡¼¥ë +<p> +X Window System¤òÁªÂò¤·¤Æ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ì¤Ð¡¢ +gtk+¤Î¥Ð¡¼¥¸¥ç¥ó¤Î¾ò·ï¤â´û¤ËËþ¤¿¤·¤Æ¤¤¤ë¤Î¤Ç¡¢ +<url url="http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html"> +¤¢¤ë¤¤¤ÏVine Plus(2.0)¤«¤ésylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm¤ò¥À¥¦¥ó¥í¡¼¥É¤·¡¢ +<tscreen><verb> +# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i386.rpm +</verb></tscreen> +¤Ç´°Î»¤Ç¤¹¡£ + +¤Ê¤ª¡¢Vine2.0CR¤ËÉÕ°¤·¤Æ¤¤¤ëVine Plus¤ÎCD¤Ë´Þ¤Þ¤ì¤ësylpheed¤Îrpm¤Ï¥Ð¡¼¥¸¥ç¥ó¤¬¸Å¤¤¤Î¤Ç¡¢ +¤Ê¤ë¤Ù¤¯ºÇ¿·ÈǤòÆþ¤ì¤ë¤Ù¤­¤Ç¤·¤ç¤¦¡£ + +</sect2> +<sect2>Vine Linux 2.1¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +<p> +Vine Linux 2.1¤Ë¤Ï´û¤ËSylpheed¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤Þ¤¹¤¬¡¢ +¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Ø¤ÏVine Linux 2.0¤ÈƱ¤¸ÊýË¡¤ò¼è¤ë¤ÈÎɤ¤¤È»×¤¤¤Þ¤¹¡£ +Vine Plus¤Ë¤¢¤ì¤Ð»È¤Ã¤Æ¤âÎɤ¤¤Ç¤¹¤·¡¢ +¤â¤·¤â¤Ã¤È¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤ò»ÈÍѤ·¤¿¤¤¾ì¹ç¤Ï +<ref id="inst_from_srpm" name="¥½¡¼¥¹¥Ñ¥Ã¥±¡¼¥¸¤«¤é¤Î¥¤¥ó¥¹¥È¡¼¥ë"> +¤ò»ÈÍѤ¹¤ë¤ÈÎɤ¤¤È»×¤¤¤Þ¤¹¡£ + +Vine Linux 2.0¤ÈVine Linux 2.1¤Ï¤¢¤Þ¤êÊѲ½¤¬Ìµ¤¤¤Î¤Ç¡¢ +libjconv¤ò»È¤¤¤¿¤¤¤Î¤Ç¤Ê¤±¤ì¤Ð¥Ð¥¤¥Ê¥ê¥Ñ¥Ã¥±¡¼¥¸¤«¤é¤Î¥¤¥ó¥¹¥È¡¼¥ë¤â +»ÈÍѲÄǽ¤À¤È»×¤ï¤ì¤Þ¤¹¡£ +</sect2> + +<sect2>Kondara MNU/Linux 1.0¤ª¤è¤Ó1.1¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +<p> +Kondara MNU/Linux¤Ë¤ÏKondara-Zoo¤Ësylpheed¤Îrpm¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢¤½¤ì¤ò¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¡¢ +<tscreen><verb> +# rpm -Uvh sylpheed-(¥Ð¡¼¥¸¥ç¥ó̾)-?.i586.rpm +</verb></tscreen> +¤È¤¹¤ë¤«¡¢mph¤ò»È¤Ã¤Æ¡¢ + +<tscreen><verb> +# mph-get install sylpheed +</verb></tscreen> +¤Ç´°Î»¤Ç¤¹¡£ + +</sect2> + +</sect1> +<sect1>Debian GNU/Linux¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +<p> +Debian GNU/Linux¤Îwoody/potato¤ò¤ª»È¤¤¤Ê¤é¤Ð¡¢ +Debian-JP(woody)¤Ë¡¢package¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢ +<tscreen><verb> +# apt-get install sylpheed +</verb></tscreen> +¤Ç¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤­¤Þ¤¹¡£ +¸Å¤¤¥Ð¡¼¥¸¥ç¥ó¤Ê¤é¤Ð¡¢gtk+¤â¸Å¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢ +<ref id="gen-inst" name="´ðËÜŪ¤ÊinstallÊýË¡">¤òÍøÍѤ¹¤ë¤ÈÎɤ¤¤«¤È»×¤ï¤ì¤Þ¤¹¡£ + +</sect1> +<sect1>FreeBSD¤Ø¤Î¥¤¥ó¥¹¥È¡¼¥ë +</sect1> +</sect> +<sect>µ¯Æ°¤È½ªÎ» +<p> +<sect1>Sylpheed¤Îµ¯Æ° +<p> +kterm,rxvt¤Ê¤É¤ÎüËö¥¨¥ß¥å¥ì¡¼¥¿¤òµ¯Æ°¤·¡¢ +<tscreen><verb> +$ sylpheed & +</verb></tscreen> +¤È¥¿¥¤¥×¤·¤Þ¤¹¡£ + +<url url="http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html">¤Îrpm¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤¿¾ì¹ç¤Ç +GNOME¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢ +¥á¥¤¥ó¥á¥Ë¥å¡¼¤ò³«¤¤¤Æ¤«¤é" ¥¤¥ó¥¿¡¼¥Í¥Ã¥È ¡ä Sylpheed"¤ÈÁª¤Ö¤³¤È¤Çµ¯Æ°¤Ç¤­¤Þ¤¹¡£ + +GNOME¤ÎÈæ³ÓŪ¿·¤·¤¤¥Ð¡¼¥¸¥ç¥ó¤Î¾ì¹ç¡¢ +"­Àץܥ¿¥ó¡ä¥×¥í¥°¥é¥à¡ä¥¤¥ó¥¿¡¼¥Í¥Ã¥È¡äSylpheed" +¤Î¾ì¹ç¤â¤¢¤ê¤Þ¤¹¡£ +</sect1> +<sect1>Sylpheed¤Î½ªÎ» +<p> +°Ê²¼¤Î3¤Ä¤Î¤³¤È¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð½ªÎ»¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +<itemize> +<item>Window¤ÎÊĤ¸¤ë¥Ü¥¿¥ó¤ò²¡¤¹ +<item>¥Õ¥¡¥¤¥ë(F)¥á¥Ë¥å¡¼¤ò³«¤­¡¢½ªÎ»¤ò²¡¤¹ +<item>Alt+q¤Þ¤¿¤ÏShift+q¤ò²¡¤¹ +</itemize> +¤³¤Î3¤Ä¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð½ªÎ»¤¹¤ë¤«¤É¤¦¤«Ì䤤¹ç¤ï¤»¤Æ¤­¤Þ¤¹¤Î¤Ç¡¢ +Enter¥­¡¼¤«OK¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç½ªÎ»¤Ç¤­¤Þ¤¹¡£ + +¤Ê¤ª¤³¤ÎÌ䤤¹ç¤ï¤»¤Ï¡¢ÀßÄê-Á´È̤ÎÀßÄê¤Î"¥¤¥ó¥¿¥Õ¥§¡¼¥¹"¥¿¥Ö¤ÎÃæ¤Î¡¢ +"½ªÎ»»þ¤Ë³Îǧ¤¹¤ë"¤Î¥Á¥§¥Ã¥¯¤ò³°¤¹¤³¤È¤ÇÌ䤤¹ç¤ï¤»¤Ê¤¯¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ + +</sect1> +</sect> +<sect>Sylpheed¤Î¤µ¤Þ¤¶¤Þ¤Ê¾ì½ê¤Î̾¾Î +<p> +Sylpheed¤òºÇ½é¤Ëµ¯Æ°¤·¤¿²èÌ̤ò´ð½à¤Ë¤·¤Þ¤¹¡£ +<sect1>¥á¥Ë¥å¡¼ +<p> +¥¦¥£¥ó¥É¥¦¤Î¾å¤Ë¤Ä¤¤¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë(F)¤ä¡¢ÊÔ½¸(E)¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +ËÜʸ½ñ¤Ç¤Ï¥á¥Ë¥å¡¼¤Î"¥Õ¥¡¥¤¥ë(F)"¤ò¥¯¥ê¥Ã¥¯¤·¤Æ"ÊĤ¸¤ë(C)"¤òÁª¤Ö¤³¤È¤ò¡¢ +"¥Õ¥¡¥¤¥ë¡äÊĤ¸¤ë"¤Èɽµ­¤·¤¿¤ê¤·¤Þ¤¹¡£ +<sect1>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼ +<p> +±¦¥¯¥ê¥Ã¥¯¤·¤Æ½Ð¤ÆÍè¤ë¥á¥Ë¥å¡¼¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +¡Ø¡Á¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡Ù¤È¤¤¤Ã¤¿¤é +¡Á¤Î¾ì½ê¤Ç±¦¥¯¥ê¥Ã¥¯¤·¤Æ¤³¤Î¥á¥Ë¥å¡¼¤ò½Ð¤¹¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +</sect1> +<sect1>¥À¥¤¥¢¥í¥° +<p> +Sylpheed¤ò½ªÎ»¤·¤è¤¦¤È¤·¤¿¤È¤­¤Ë½Ð¤ë¤è¤¦¤ÊÌ䤤¹ç¤ï¤»¤Î¥¦¥£¥ó¥É¥¦¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +ÀßÄê¤ò¤¹¤ë¥¦¥£¥ó¥É¥¦¤â¡¢¥À¥¤¥¢¥í¥°¤Ç¤¹¡£ +</sect1> +<sect1>¥µ¥Þ¥ê¥Ó¥å¡¼ +<p> +±¦¾å¤Ë¤¢¤ëÈֹ桢¥µ¥¤¥º¡¢ÆüÉդʤɤ¬½ñ¤«¤«¤ì¤Æ¤¤¤ë¥ê¥¹¥È¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +</sect1> +<sect1>¥Õ¥©¥ë¥À¥Ó¥å¡¼ +<p> +º¸Â¦¤Ë¤¢¤ë¥Õ¥©¥ë¥À¤Î¥Ä¥ê¡¼¤¬É½¼¨¤µ¤ì¤Æ¤¤¤ëÉôʬ¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼ +<p> +¥á¥Ã¥»¡¼¥¸¤¬É½¼¨¤µ¤ì¤ëÉôʬ¤Î¤³¤È¤ò¤¤¤¤¤Þ¤¹¡£ +źÉÕ¥Õ¥¡¥¤¥ë¤â¤³¤³¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¤¬¡¢ +¤½¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÎºÜ¤Ã¤Æ¤¤¤ë¥ê¥¹¥È¤Î¤³¤È¤òźÉեꥹ¥È¤È¸Æ¤Ö¤³¤È¤Ë¤·¤Þ¤¹¡£ +</sect1> +<sect1>¥¢¥«¥¦¥ó¥È +<p> +¥á¡¼¥ë¥µ¡¼¥Ð¤Ë¤¢¤ë¤½¤Î¥æ¡¼¥¶¤Î¸¢Íø¤Î¤³¤È¤Ç¤¹¡£ +¤ï¤«¤é¤Ê¤±¤ì¤Ð¡¢¥á¡¼¥ë¤ò¼õ¿®¤¹¤ë¤¿¤á¤Î¾ðÊ󡢤ȹͤ¨¤ÆÎɤ¤¤È»×¤¤¤Þ¤¹¡£ +</sect1> +</sect> + +<sect>¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷<label id="read-message"> +<p> +<sect1>ÁªÂò +<p> +¤½¤ÎÁªÂò¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤Þ¤¿¤Ï¥Õ¥©¥ë¥À¤òº¸¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤ÇÁªÂò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤Þ¤¿¡¢¥á¥Ã¥»¡¼¥¸¤òÊ£¿ôÁªÂò¤·¤¿¤¤¾ì¹ç¤Ç°ìÄê¤ÎÈϰϤò»ØÄꤷ¤¿¤¤¾ì¹ç¡¢ +ÈϰϤκǽé¤Î¥á¥Ã¥»¡¼¥¸¤òº¸¥¯¥ê¥Ã¥¯¤·¤ÆShift¥­¡¼¤ò²¡¤·¤Ê¤¬¤éÈϰϤκǸå¤Î¥á¡¼¥ë¤òº¸¥¯¥ê¥Ã¥¯¤·¤Þ¤¹¡£ + +Ctrl¥­¡¼¤ò²¡¤·¤Ê¤¬¤éº¸¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢¤È¤Ó¤È¤Ó¤ËÁªÂò¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡£ +ƱÍͤˡ¢Shift¥­¡¼¤ò²¡¤·¤Ê¤¬¤é´û¤ËÁªÂò¤µ¤ì¤¿Îΰè¤ÎÃæ¤òº¸¥¯¥ê¥Ã¥¯¤·¤ÆÈϰϤòºï¤ê¼è¤Ã¤¿¤ê¡¢ +Ctrl¤ò²¡¤·¤Ê¤¬¤éº¸¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¤½¤ÎÉôʬ¤òÈ´¤¤¤Æ¤·¤Þ¤Ã¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹ + +¤Þ¤¿¡¢¥µ¥Þ¥ê¥Ó¥å¡¼¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢"Á´¤ÆÁªÂò"¤òÁª¤Ö¤³¤È¤Ç +¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤Ç¤­¡¢"Á´ÁªÂò²ò½ü"¤òÁª¤Ö¤³¤È¤Ç¤¹¤Ù¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ÎÁªÂò¤ò²ò½ü¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>¥á¡¼¥ë¤ò¸«¤ë<label id="read-message"> +<p> +¥À¥¦¥ó¥í¡¼¥É¤µ¤ì¤¿¥á¡¼¥ë¤ò¸«¤ë¤Ë¤Ï¥µ¥Þ¥ê¥Ó¥å¡¼¤ÎÃ椫¤é +¸«¤¿¤¤¤â¤Î¤òÁªÂò¤·¤Þ¤¹¡£ +¾å¤Ë"U"¤È½ñ¤«¤ì¤Æ¤¤¤ëÉôʬ¤ËÀ֤δݤ¤¥Þ¡¼¥¯¤¬¤¢¤ë¾ì¹ç¤Ï¡¢¿·Ãå¥á¡¼¥ë +ÎФΥޡ¼¥¯¤¬¤¢¤ë¾ì¹ç¤Ï¡¢Ì¤Æɥ᡼¥ë¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£ +<p> +°ìÅÙÁªÂò¤µ¤ì¤¿¤é¡¢"n"¤È"p"¥­¡¼¤ò»È¤Ã¤Æ¸½ºß¤Î¥á¡¼¥ë¤ò +²¼¤ä¾å¤ËÆ°¤«¤·¤ÆÁªÂò¤Ç¤­¤Þ¤¹¡£ +<p> +¥¹¥Ú¡¼¥¹¥­¡¼¤ò»È¤¨¤Ð¡¢ +´û¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¥á¡¼¥ë¤¬¤Þ¤À³¤¤¤Æ¤ë¾ì¹ç¤Ï¥¹¥¯¥í¡¼¥ë¤Ç¤­¡¢ +¤½¤Î¥á¡¼¥ë¤Î°ìÈÖ²¼¤Þ¤Ç¹Ô¤Ã¤¿¾ì¹ç¤Ï¡¢ +¤½¤Î¥Õ¥©¥ë¥ÀÆâ¤Î¸½ºß¤Î°ÌÃÖ¤è¤ê²¼¤Ë»Ä¤Ã¤Æ¤¤¤ë̤ÆɤΥ᡼¥ë¤Þ¤Ç +Èô¤ó¤Ç¤¯¤ì¤Þ¤¹¡£ +¤µ¤é¤Ë¥Õ¥©¥ë¥ÀÆâ¤Ç°ìÈÖ²¼¤Ë¹Ô¤¯¤«¡¢¤½¤ì¤è¤ê²¼¤Ë̤Æɥ᡼¥ë¤¬Ìµ¤¯¤Ê¤Ã¤¿¾ì¹ç¡¢ +"̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£¼¡¤Î¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤·¤Þ¤¹¤«?" +¤Èʹ¤«¤ì¡¢¤½¤Î¤Þ¤Þ¥¹¥Ú¡¼¥¹¥­¡¼¤ò²¡¤»¤Ð"¤Ï¤¤"¤ò¥¯¥ê¥Ã¥¯¤·¤¿¤³¤È¤Ë¤Ê¤ê¡¢ +¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤¹¤ë¥Õ¥©¥ë¥À¤ØÈô¤ó¤Ç¡¢¤Þ¤¿Æ±¤¸¤³¤È¤¬½ÐÍè¤Þ¤¹. +<p> +Íפ¹¤ë¤Ë¡¢¥¹¥Ú¡¼¥¹¥­¡¼¤òÂǤÁ³¤±¤ë¤³¤È¤Ç¡¢Ì¤Æɥ᡼¥ë¤À¤±¤òÁª¤ó¤Ç¡¢ +Á´ÉôÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>Æɤà¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë +<p> +¥Õ¥©¥ë¥À¥Ó¥å¡¼¤ÎÃ椫¤é¹¥¤­¤Ê¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ì¤Ð¤½¤Î¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤Ç¤­¤Þ¤¹¡£ + +¥µ¥Þ¥ê¥Ó¥å¡¼¤ÇÁªÂò¤·¤Æ¤¤¤¿¾ì¹ç¡¢¥­¡¼¥Ü¡¼¥É¤Î¢«¥Ü¥¿¥ó¤ò²¡¤¹¤È¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ë +¥Õ¥©¡¼¥«¥¹¤¬°Ü¤ê¡¢¥­¡¼¥Ü¡¼¥É¤Ç¥Õ¥©¥ë¥À¤òÁªÂò¤Ç¤­¤ë¾õÂ֤ˤʤê¤Þ¤¹¡£ +¤½¤Î¸å¢¬¢­¥­¡¼¤Ç°ÜÆ°¤·¡¢Return¥­¡¼¤Ç¥Õ¥©¥ë¥À¤òÁªÂò¤Ç¤­¤Þ¤¹¡£ + +¥Õ¥©¥ë¥À¤Îʸ»ú¤¬ÀÖ¤¤¾ì¹ç¤Ï¡¢¿·Ãå¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¡¢ +¹õ¤¤ÂÀ»ú¤Î¾ì¹ç¤Ï̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¤Þ¤¹¡£ +<p> +¤Þ¤¿¡¢ +<itemize> +<item>"g"¥­¡¼¤¢¤ë¤¤¤Ï¡¢Alt+g¤ò²¡¤¹ +<item>¥á¥Ë¥å¡¼¤Ç"¥µ¥Þ¥ê¡äÊ̤Υե©¥ë¥À¤Ø°ÜÆ°"¤òÁªÂò¤¹¤ë +</itemize> +¤Î¤É¤Á¤é¤«¤ò¤¹¤ë¤³¤È¤Ç¥Õ¥©¥ë¥ÀÁªÂò²èÌ̤ò¸Æ¤Ó¤À¤¹¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¢¬¢­¤Ç°ÜÆ°¤·¡¢ +Enter¤ÇÁªÂò¤Ç¤­¤Þ¤¹¡£ +</sect1> + +<sect1>multipart MIME(źÉÕ¥Õ¥¡¥¤¥ë)¤ò¸«¤ë +<p> +¤¿¤Þ¤Ë¥Õ¥¡¥¤¥ë¤¬ÅºÉÕ¤µ¤ì¤Æ¤¤¤ë¥á¡¼¥ë¤¬¤¢¤ë¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ +¤½¤Î¾ì¹ç¤Ï¡¢MIME¥¿¥¤¥×¡¢¥µ¥¤¥º¤Ê¤É¤¬½ñ¤¤¤Æ¤¢¤ëÉôʬ¤¬Â¸ºß¤·¤Þ¤¹¤Î¤Ç¡¢ +¤½¤Î¥ê¥¹¥È¤ÎÃ椫¤éÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£ + +°ìÈÌŪ¤ËÆɤá¤ë¤È»×¤ï¤ì¤Æ¤¤¤ë¤â¤Î¤Ï¡¢¥¯¥ê¥Ã¥¯¤¹¤ë¤À¤±¤Ç¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ +¤¹¡£ + +Êݸ¤·¤¿¤¤¾ì¹ç¤Ë¤Ï¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢ +̾Á°¤òÉÕ¤±¤ÆÊݸ¤òÁªÂò¤¹¤ë¤«¡¢'y'¥­¡¼¤ò²¡¤»¤ÐÊݸ¤Ç¤­¤Þ¤¹¡£ + +¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¤µ¤»¤¿¤¤¤È¤­¤ÏƱ¤¸¤è¤¦¤Ë¤·¤Æ¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¤òÁª¤Ö¤«¡¢ +'t'¥­¡¼¤ò²¡¤¹¤³¤È¤Çɽ¼¨¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ + +¤Þ¤¿multipart MIME¤È¤·¤ÆźÉÕ¥Õ¥¡¥¤¥ë¤¬´Þ¤Þ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ë¤ª¤¤¤Æ¤â¡¢ +'n'¡¢'p'¥­¡¼¤ÇźÉÕ¥Õ¥¡¥¤¥ë/¥á¥Ã¥»¡¼¥¸¤ÎÁ°¸å°ÜÆ°¤ò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¸½ºß¤ÎSylpheed¤Ç¤Ï¡¢quoted-printableËô¤Ïbase64¥¨¥ó¥³¡¼¥ÉÊý¼°¤ò +»ÈÍѤµ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤ò±ÜÍ÷¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> + +<sect1>¥¹¥ì¥Ã¥É¤Î¿­½Ì +<p> +¤½¤Î¥¹¥ì¥Ã¥É¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤¿¸å¡¢ +-¥­¡¼¤Ç¥¹¥ì¥Ã¥É¤ò½Ì¤á¤¿¤ê¡¢+¥­¡¼¤ÇŸ³«¤·¤¿¤ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> + +<sect1>¥á¥Ã¥»¡¼¥¸Áàºî(°ÜÆ°¡¢ºï½üÅù) +<p> +Sylpheed¤Ç¤Î¥á¥Ã¥»¡¼¥¸Áàºî¤Ï´ðËÜŪ¤Ë"¥Þ¡¼¥¯¤ò¤Ä¤±¤ë"¤È¤¤¤¦ºî¶È¤ò¤·¤Æ¤«¤é¡¢ +"¼Â¹Ô"¤È¤¤¤¦Áàºî¤Ç¼ÂºÝ¤Ë¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤·¤¿¤êºï½ü¤·¤¿¤ê¤Ç¤­¤Þ¤¹¡£ +¤³¤Î"¥Þ¡¼¥¯"¤Ï¡¢¥Õ¥©¥ë¥À¤ò°ÜÆ°¤¹¤ë¤È¾Ã¤¨¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ +<sect2>¥á¥Ã¥»¡¼¥¸¤Îºï½ü +<p> +ºï½ü¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +<itemize> +<item>"d"¥­¡¼¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æºï½ü¤òÁª¤Ö +</itemize> +¤Î¤É¤Á¤é¤«¤Ç¥µ¥Þ¥ê¥Ó¥å¡¼¤Î"M"¤ÎÉôʬ¤Ëd¤Èɽ¼¨¤µ¤ì¡¢³¥¿§¤Ë¤Ê¤êºï½ü¥Þ¡¼¥¯¤¬¤Ä¤±¤é¤ì¤Þ¤¹¡£ +<sect2>¥á¥Ã¥»¡¼¥¸¤Î°ÜÆ° +<p>°ÜÆ°¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +<itemize> +<item>"o"¥­¡¼¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ°ÜÆ°¤òÁª¤Ö +</itemize> +¤Î¤É¤Á¤é¤«¤ò¹Ô¤¨¤Ð°ÜÆ°Àè¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ë¥À¥¤¥¢¥í¥°¤¬¸½¤ì¤ë¤Î¤Ç¡¢¥Õ¥©¥ë¥À¤òÁªÂò¤¹¤ì¤Ð¡¢ +°ÜÆ°¥Þ¡¼¥¯¤¬¤Ä¤±¤é¤ì¤Þ¤¹¡£ +<sect2>ÌÜ°õ¤Ë¥Þ¡¼¥¯¤¹¤ë +<p> +¥Þ¡¼¥¯¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +<itemize> +<item>"*"¥­¡¼¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ"¥Þ¡¼¥¯"¤òÁªÂò¤¹¤ë +</itemize> +¤Î¤É¤Á¤é¤«¤ò¤¹¤ì¤Ð¡¢ÌÜ°õ¤Ë¥Þ¡¼¥¯¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¤³¤Î"¥Þ¡¼¥¯"¤Ï¼Â¹Ô¤·¤Æ¤â²¿¤âµ¯¤³¤ê¤Þ¤»¤ó¡£ +<sect2>¥Þ¡¼¥¯¤ò²ò½ü¤¹¤ë +<p> +²ò½ü¤·¤¿¤¤¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Æ¤«¤é¡¢ +<itemize> +<item>"u"¥­¡¼¤ò²¡¤¹ +<item>¤«¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ"¥Þ¡¼¥¯¤ò²ò½ü"¤òÁªÂò +</itemize> +¤Î¤É¤Á¤é¤«¤ò¤¹¤ì¤Ð¡¢ºï½ü¡¢°ÜÆ°¡¢ÌÜ°õ¤Î¥Þ¡¼¥¯¤ò²ò½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect2> +<sect2>¼Â¹Ô +<p> +ºï½ü¡¢°ÜÆ°¤Î¥Þ¡¼¥¯¤ò¤Ä¤±¤¿¤é¡¢ +<itemize> +<item>"x"¥­¡¼¤Þ¤¿¤Ï"Alt+x"¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ"¼Â¹Ô"¤òÁªÂò +<item>¥á¥Ë¥å¡¼¤Ç"¥µ¥Þ¥ê¡ä¼Â¹Ô"¤òÁªÂò +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸Æâ¤ÎURL +<p> +¥á¥Ã¥»¡¼¥¸Æâ¤ÎURL¤Ï¡¢(¥Þ¥¦¥¹¥«¡¼¥½¥ë¤ÏÊѲ½¤·¤Þ¤»¤ó¤¬)URLÉôʬ¤ò¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ç¡¢ +Á´È̤ÎÀßÄê¤Ç»ØÄꤵ¤ì¤¿³°Éô¥Ö¥é¥¦¥¶¤¬µ¯Æ°¤·¤½¤Î¥µ¥¤¥È¤ò±ÜÍ÷¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect> + +<sect>¥¢¥«¥¦¥ó¥È¤ÎÀßÄê(¥á¡¼¥ë¤òÁ÷¼õ¿®¤¹¤ë¤¿¤á¤Î½àÈ÷)<label id="Account-Config"> +<p> +<sect1>¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®<label id="append-account"> +<p> +¤Þ¤º¡¢¥á¡¼¥ë¤ò¼õ¿®/Á÷¿®¤¹¤ë¤¿¤á¤Ë¤Ï¥¢¥«¥¦¥ó¥È¤ÎÀßÄê¤ò¤·¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ + +¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®¤ò¹Ô¤¦¤Ë¤Ï¡¢ +[ÀßÄê]¥á¥Ë¥å¡¼¤«¤é"¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®"¤òÁªÂò¤·¤Þ¤¹¡£ + +¤½¤·¤Æ¡¢³Æ¹àÌܤ˽ñ¤­¹þ¤ó¤Ç¹Ô¤­¤Þ¤¹¡£ + +(ɬ¿Ü)¤Ï¡¢¿·¤¿¤Ë½ñ¤­¹þ¤Þ¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦¤³¤È¤ò°ÕÌ£¤·¡¢ +()Æâ¤ËÊ̤ÎÆâÍƤ¬½ñ¤«¤ì¤Æ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤ì¤¬¥Ç¥Õ¥©¥ë¥È¤È¤¤¤¦°ÕÌ£¤Ç¤¹¡£ + + +¤Ê¤ª¡¢¥¢¥«¥¦¥ó¥ÈÀßÄê¤Ï̵¸Â¤ËºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢ +¥¢¥«¥¦¥ó¥ÈÀßÄê¤ò¤·¤Ê¤¯¤Æ¤â¡¢´û¤Ë~/Mail¤Ë¤¢¤ë¥á¡¼¥ë¤Ï¸«¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤Ç¤¹¤¬¡¢SylpheedËÜÂΤμõ¿®µ¡Ç½¤ò»È¤ï¤Ê¤¤¾ì¹ç¤Ç¤â¡¢ +¥×¥í¥È¥³¥ë¤Ç¤Ê¤·(¥í¡¼¥«¥ë)¤òÁªÂò¤·¤¿¥¢¥«¥¦¥ó¥ÈÀßÄê¤òºîÀ®¤·¤Æ¤¯¤À¤µ¤¤¡£ +<sect1>³Æ¹àÌܤÎÀâÌÀ +<p> +<sect2>(´ðËÜ)¥¿¥Ö +<p> +<sect3>¤³¤Î¥¢¥«¥¦¥ó¥È¤Î̾¾Î (¿ä¾©) +<p>¤³¤Î¥¢¥«¥¦¥ó¥È¤Î̾¾Î¤ò»ØÄꤷ¤Þ¤¹¡£Ã±¤Ê¤ë¸Æ¤Ó̾¤Ç¤¹¤Î¤Ç¡¢¤Ê¤ó¤Ç¤â¹½¤¤¤Þ¤»¤ó¡£ +</sect3> +<sect3>Ä̾ï»ÈÍÑ<label id="usually-use"> +<p>¤³¤³¤ò¥Á¥§¥Ã¥¯¤·¤¿¥¢¥«¥¦¥ó¥È¤¬µ¯Æ°»þ¤ËÁªÂò¤µ¤ì¤Æ¤¤¤ë¾õÂ֤ˤʤê¤Þ¤¹¡£ +</sect3> +<sect3>¸Ä¿Í¾ðÊó - ̾Á° (ɬ¿Ü) +<p>¥á¡¼¥ë¤ÎÁ÷¿®»þ¤Ë»ÈÍѤµ¤ì¤ë̾Á°¤Ç¤¹¡£ +</sect3> +<sect3>¸Ä¿Í¾ðÊó - ¥á¡¼¥ë¥¢¥É¥ì¥¹ (ɬ¿Ü) +<p>¥á¡¼¥ë¤ÎÁ÷¿®»þ¤Ë»È¤ï¤ì¤ë¥á¡¼¥ë¥¢¥É¥ì¥¹¤Ç¤¹¡£ +</sect3> +<sect3>¸Ä¿Í¾ðÊó - ÁÈ¿¥ +<p>¥á¡¼¥ë¤ÎÁ÷¿®»þ¤Ë½ñ¤­¹þ¤Þ¤ì¤Þ¤¹¡£ +</sect3> +<sect3>¥µ¡¼¥Ð¾ðÊó - ¥×¥í¥È¥³¥ë (POP3) +<p> +¥×¥í¥È¥³¥ë¤Ï¸½Ãʳ¬¤Ç¤Ï¡¢ +<itemize> +<item>POP3 +<item>POP3(APOPǧ¾Ú¤Ä¤­) +<item>¤Ê¤·(¥í¡¼¥«¥ë) +</itemize> +¤ÎÃ椫¤éÁªÂò¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ +¼«Ê¬¤Î¥µ¡¼¥Ð¤Ë¤¢¤Ã¤¿¤â¤Î¤òÁª¤Ó¤Þ¤·¤ç¤¦¡£ + +</sect3> +<sect3>¥µ¡¼¥Ð¾ðÊó - ¼õ¿®È¢ (inbox) +<p> +¤½¤Î¥¢¥«¥¦¥ó¥È¤Ç¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¤È¤­¤Ë¤É¤³¤ËÊݸ¤¹¤ë¤«¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£ +¿¶¤êʬ¤±¤é¤ì¤Ê¤«¤Ã¤¿¾ì¹ç¤ËÆþ¤ë¥Õ¥©¥ë¥À¤È¹Í¤¨¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ +ÆäËÌäÂ꤬¤Ê¤±¤ì¤Ðinbox("¼õ¿®È¢"¤Î°Õ)¤ÇÌäÂê¤Ê¤¤¤«¤È»×¤¤¤Þ¤¹¡£ + +</sect3> +<sect3>¥µ¡¼¥Ð¾ðÊó - ¼õ¿®¥µ¡¼¥Ð (ɬ¿Ü) +<p> +¼õ¿®¤¹¤ë¥µ¡¼¥Ð¤ò»ØÄꤷ¤Þ¤¹¡£ +¥á¡¼¥ë¤Ï¡¢¥×¥í¥È¥³¥ë¤Ç»ØÄꤷ¤¿¥×¥í¥È¥³¥ë¤Ç¤³¤³¤Ç»ØÄꤷ¤¿¥µ¡¼¥Ð¤«¤é¼õ¿®¤µ¤ì¤Þ¤¹¡£ + +</sect3> +<sect3>¥µ¡¼¥Ð¾ðÊó - SMTP¥µ¡¼¥Ð(Á÷¿®) (ɬ¿Ü) +<p> +Á÷¿®¤Ë»ÈÍѤ¹¤ë¥µ¡¼¥Ð¤ò»ØÄꤷ¤Þ¤¹¡£¥×¥í¥È¥³¥ë¤Ë¤ÏSMTP¤¬»ÈÍѤµ¤ì¤Þ¤¹¡£ + +</sect3> +<sect3>¥µ¡¼¥Ð¾ðÊó - ¥æ¡¼¥¶ID (ɬ¿Ü) +<p>¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥æ¡¼¥¶ID¤ò»È¤Ã¤Æ¥á¡¼¥ë¥µ¡¼¥Ð¤Ë¥í¥°¥¤¥ó¤·¤Þ¤¹¡£ +</sect3> +<sect3>¥µ¡¼¥Ð¾ðÊó - ¥Ñ¥¹¥ï¡¼¥É(ɬ¿Ü) +<p>¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤ò»ÈÍѤ·¤Æ¥á¡¼¥ë¥µ¡¼¥Ð¤Ë¥í¥°¥¤¥ó¤·¤Þ¤¹¡£ +ÆþÎϤµ¤ì¤¿¥Ñ¥¹¥ï¡¼¥É¤Ï²èÌ̾å¤Ë¤Ï***¤È¤·¤«É½¼¨¤µ¤ì¤Þ¤»¤ó¡£ + +</sect3> + +</sect2> +<sect2>(¼õ¿®)¥¿¥Ö +<p> +<sect3>¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë +<p>¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Þ¤¹¡£ +</sect3> +<sect3>¥µ¡¼¥Ð¾å¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë +<p>¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Ê¤¤¤È¤­¤Ë¡¢ +¥µ¡¼¥Ð¤Ç¥À¥¦¥ó¥í¡¼¥É¤¬½ªÎ»¤·¤¿ºÇ¸å¤Î¥á¥Ã¥»¡¼¥¸ÈÖ¹æ¤òµ­²±¤·¤Æ¤¤¤Æ¡¢ +¼¡¤«¤é¤Ï¥À¥¦¥ó¥í¡¼¥É¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ëµ¡Ç½¤ò»ý¤Ã¤¿¥µ¡¼¥Ð¤ËÃÖ¤¤¤Æ¡¢ +¤½¤Îµ¡Ç½¤ò̵»ë¤·¤Æ¤¹¤Ù¤Æ¥À¥¦¥ó¥í¡¼¥É¤·¤Þ¤¹¡£ + +¤Ä¤Þ¤ê¡¢¤³¤ì¤òÁªÂò¤·¤Ê¤±¤ì¤Ð¤½¤Îµ¡Ç½¤òÍ­¸ú¤Ë¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¤³¤Î¥ª¥×¥·¥ç¥ó¤Ï¡¢¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë¾ì¹ç¤Ï¼Â¼Á̵¸ú¤Ç¤¹¡£ + +</sect3> +<sect3>¼õ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë +<p>¤³¤Î¥¢¥«¥¦¥ó¥ÈÀßÄê¤ò»ÈÍѤ·¤Æ¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¤È¤­¤Ë¿¶¤êʬ¤±ÀßÄê¤òÍøÍѤ·¤Æ +¼õ¿®Ä¾¸å¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤«ÁªÂò¤Ç¤­¤Þ¤¹¡£´ðËÜŪ¤Ë¤ÏÁªÂò¤·¤Æ¤ª¤¤¤ÆÌäÂê¤Ê¤¤¤Ç¤·¤ç¤¦¡£ + +</sect3> + +<sect2>(Á÷¿®)¥¿¥Ö +<p> +<sect3>¥Ø¥Ã¥À - Date¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÉÕ¤±¤ë +<p>Date¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òSylpheed¤ÇÉÕ¤±¤Þ¤¹ +</sect3> +<sect3>¥á¥Ã¥»¡¼¥¸ID¤òÀ¸À®¤¹¤ë +<p>¥á¥Ã¥»¡¼¥¸ID¤òSylpheed¤ÇÉÕ¤±¤Þ¤¹¡£ +°ìÈÌŪ¤ÊüËö·¿¥À¥¤¥ä¥ë¥¢¥Ã¥×IPÀܳ¤Î¥×¥í¥Ð¥¤¥À¤¬±¿±Ä¤·¤Æ¤¤¤ë¤è¤¦¤Ê¥µ¡¼¥Ð¤Ç¤Ï¡¢ + ¥µ¡¼¥Ð¦¤¬¤Ä¤±¤ë¤Î¤ÇɬÍפ¢¤ê¤Þ¤»¤ó¡£ + +</sect3> +<sect3>°Ê²¼¤Î¥¢¥É¥ì¥¹¤ò¼«Æ°»ØÄê +<p>Cc, Bcc, Reply-To¥Õ¥£¡¼¥ë¥É¤ò¼«Æ°»ØÄê¤Ç¤­¤Þ¤¹¡£ +¼«Æ°»ØÄꤹ¤ë¤Ë¤Ï¡¢³Æ¥Õ¥£¡¼¥ë¥É̾¤Î²£¤Î¥Á¥§¥Ã¥¯¥Ü¥Ã¥¯¥¹¤ò¥ª¥ó¤Ë¤·¡¢ +¥Æ¥­¥¹¥È¥Ü¥Ã¥¯¥¹¤Ëµ­Æþ¤¹¤ì¤Ð¥á¥Ã¥»¡¼¥¸ºîÀ®¤´¤È¤Ë¤Ä¤±¤Æ¤¯¤ì¤Þ¤¹¡£ +</sect3> + +</sect2> +<sect2>(ºîÀ®)¥¿¥Ö +<p> +<sect3>½ð̾¥Õ¥¡¥¤¥ë +<p>¤³¤³¤Ç»ØÄꤵ¤ì¤¿¥Õ¥¡¥¤¥ë¤Ï¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤Ë¼«Æ°Åª¤ËºÇ¸å¤ËÁÞÆþ¤µ¤ì¤Þ¤¹¡£ + +</sect3> + +</sect2> +<sect2>(¹âÅÙ¤ÊÀßÄê)¥¿¥Ö +<p> +<sect3>SMTP¥Ý¡¼¥È¤ò»ØÄê (25) +<p>SMTP¥×¥í¥È¥³¥ë¤ÇÄÌ¿®¤¹¤ë¥Ý¡¼¥È¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤ÏÊѹ¹¤ÎɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ +</sect3> +<sect3>POP3¥Ý¡¼¥È¤ò»ØÄê (110) +<p>POP3¥×¥í¥È¥³¥ë¤ÇÄÌ¿®¤¹¤ë¥Ý¡¼¥È¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤ÏÊѹ¹¤ÎɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ +</sect3> +<sect3>¥É¥á¥¤¥ó̾¤ò»ØÄê +<p> +¥É¥á¥¤¥ó̾¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£¤Û¤È¤ó¤É¤Î¾ì¹ç¤ÏÊѹ¹¤ÎɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ +</sect3> +</sect2> +</sect1> +<sect1>¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ÎÊѹ¹<label id="current-account"> +<p> +¥á¥Ë¥å¡¼¤Î"ÀßÄê¡ä¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÊѹ¹"¤«¤é¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +<ref id="append-account" name="¥¢¥«¥¦¥ó¥È¤Î¿·µ¬ºîÀ®">¤ÇÅÐÏ¿¤·¤¿Ã椫¤é¸½ºß»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤òÁª¤Ö¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤Þ¤¿²èÌ̱¦²¼¤Ëɽ¼¨¤µ¤ì¤ë"¸½ºß¤Î¥¢¥«¥¦¥ó¥È:"¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢ +¥Ä¡¼¥ë¥Ð¡¼¤Î"¥¢¥«¥¦¥ó¥È"¥Ü¥¿¥ó¤ò±¦¥¯¥ê¥Ã¥¯¤¹¤ë¤³¤È¤Ë¤è¤Ã¤Æ¤âÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤Ï¡¢"¿·Ãå¥á¡¼¥ë¤Î¼õ¿®"¤ä¡¢"¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®"¤ËÍøÍѤµ¤ì¤Þ¤¹¡£ +Á´¥¢¥«¥¦¥ó¥È¤Î¼õ¿®µ¡Ç½¤¬¤¢¤ë¤¿¤á¡¢Á°¼Ô¤Ï¤½¤ì¤Û¤É½ÅÍפǤϤ¢¤ê¤Þ¤»¤ó¤¬¡¢¸å¼Ô¤¬½ÅÍפǤ¹¡£ +Ê£¿ô¤Î¥¢¥«¥¦¥ó¥È¤òÀÚ¤êÂؤ¨¤Æ»È¤Ã¤Æ¤¤¤ë¿Í¤¬ +¥á¡¼¥ë¤òÁ÷¿®¤¹¤ë¤È¤­¤Ë¤Ï¡¢²èÌ̱¦²¼¤Ëɽ¼¨¤µ¤ì¤ë"¸½ºß¤Î¥¢¥«¥¦¥ó¥È:"¤ò³Îǧ¤·¤Æ¤«¤éÁ÷¿®¤¹¤ë¤ÈÎɤ¤¤Ç¤·¤ç¤¦¡£ + +µ¯Æ°»þ¤Ï<ref id="usually-use" name="Ä̾ï»ÈÍÑ">¤Ë¥Á¥§¥Ã¥¯¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤¬ÁªÂò¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +<sect1>¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê<label id="config-every-account"> +<p> +"ÀßÄê¡ä¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê"¤Ç +¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤Î<ref id="append-account" name="¥¢¥«¥¦¥ó¥È¤Î¿·µ¬ºîÀ®">¤ÇÀßÄꤷ¤¿¾ðÊó¤òÊÔ½¸¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸ +<p> +¥á¥Ë¥å¡¼¤Î"ÀßÄê¡ä¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸"¤Ç¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸¥À¥¤¥¢¥í¥°¤ò¸Æ¤Ó½Ð¤·¡¢ +Sylpheed¤ËÅÐÏ¿¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤ò´ÉÍý¤Ç¤­¤Þ¤¹¡£ + +¤½¤ì¤¾¤ì¤Î¥Ü¥¿¥ó¤Ï°Ê²¼¤Î¤è¤¦¤ÊÆ°ºî¤ò¤·¤Þ¤¹¡£ +<sect2>Äɲà +<p> +<ref id="append-account" name="¥¢¥«¥¦¥ó¥È¤ÎÄɲÃ">¤ÈƱ¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£ +<sect2>ÊÔ½¸ +<p> +±¦¤Î¥ê¥¹¥È¤ÇÁªÂò¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤ËÂФ·¤Æ¡¢ +<ref id="config-every-account" name="¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê">¤ÈƱ¤¸Æ°ºî¤ò¤·¤Þ¤¹¡£ +</sect2> +<sect2>ºï½ü +<p> +±¦¤Î¥ê¥¹¥È¤ÇÁªÂò¤µ¤ì¤¿¥¢¥«¥¦¥ó¥È¤òºï½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¥À¥¤¥¢¥í¥°¤¬½Ð¤¿¤é¡¢"¤Ï¤¤"¤òÁªÂò¤¹¤ë¤À¤±¤Ç¤¹¤¬¡¢¿µ½Å¤Ë¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£ +</sect2> +<sect2>¢¬¡¢¢­ +<p> +¤³¤ì¤é¤Î¥Ü¥¿¥ó¤ò»È¤¦¤È¥¢¥«¥¦¥ó¥È¤Î½çÈÖ¤òÊѤ¨¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¥¢¥«¥¦¥ó¥È¤Î½çÈÖ¤ÏÁ´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®¤¹¤ë¤È¤­¤Î½çÈ֤ˤʤê¤Þ¤¹¡£ +</sect2> +<sect2>Ä̾ï»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤Ë»ØÄê +<p> +¥ê¥¹¥È¤ÇÁªÂò¤µ¤ì¤Æ¤¤¤ë¥¢¥«¥¦¥ó¥È¤Ë +<ref id="usually-use" name="Ä̾ï»ÈÍÑ">¤¹¤ë¥¢¥«¥¦¥ó¥È¤òÊѹ¹¤Ç¤­¤Þ¤¹¡£ +</sect2> +</sect1> + +</sect> +<sect>¥á¥Ã¥»¡¼¥¸¤Î¼õ¿® +<p> +<sect1>Sylpheed¤ÎPOP¼õ¿®µ¡Ç½¤ò»È¤¦¾ì¹ç +<p> +<sect2>¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ò¼õ¿® +<p> +<ref id="Account-Config" name="¥¢¥«¥¦¥ó¥ÈÀßÄê">¤ò¤·¤Æ¤«¤é¡¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡ä¿·Ãå¥á¡¼¥ë¤ò¼õ¿®"¤òÁªÂò +<item>¥Ä¡¼¥ë¥Ð¡¼¤Î"¼õ¿®"¥Ü¥¿¥ó¤ò²¡¤¹ +<item>Alt+l¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð<ref id="current-account" name="¸½ºß¤Î¥¢¥«¥¦¥ó¥È">¤Î¥á¡¼¥ë¤ò¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤¹¡£ +</sect2> +<sect2>Á´¤Æ¤Î¥¢¥«¥¦¥ó¥È¤ò¼õ¿® +<p> +<itemize> +<item>¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äÁ´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®"¤òÁªÂò +<item>¥Ä¡¼¥ë¥Ð¡¼¤Î"Á´¼õ¿®"¤ò¥¯¥ê¥Ã¥¯ +</itemize> +¤Î¤É¤Á¤é¤«¤ò¤¹¤ë¤³¤È¤Ç<ref id="Account-Config" name="¥¢¥«¥¦¥ó¥È¤ÎÀßÄê">¤ÇÀßÄꤵ¤ì¤¿ +¤¹¤Ù¤Æ¤Î¥¢¥«¥¦¥ó¥È¤Î¥á¡¼¥ë¤ò¼õ¿®¤Ç¤­¤Þ¤¹¡£ +</sect2> +</sect1> + +<sect1>fetchmail¤Ê¤É¤Î³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¾ì¹ç +<p> +</sect1> +<sect>¥á¥Ã¥»¡¼¥¸¤ÎºîÀ® +<sect1>¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®<label id="message-create"> +<p> +¥á¥Ã¥»¡¼¥¸¤òºîÀ®¤¹¤ë¤Ë¤Ï¡¢ +<itemize> +<item>¥Ä¡¼¥ë¥Ð¡¼¤Î"ºîÀ®"¥Ü¥¿¥ó¤ò²¡¤¹ +<item>¥á¥Ë¥å¡¼¤Î¥á¥Ã¥»¡¼¥¸¡ä¿·µ¬¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®"¤òÁªÂò +<item>Alt+n¤¢¤ë¤¤¤Ïw¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥á¥Ã¥»¡¼¥¸ºîÀ®Window¤¬³«¤¯¤Î¤Ç¡¢É¬ÍפʹàÌܤò½ñ¤­¹þ¤ó¤Ç +"Á÷¿®(¥á¥Ã¥»¡¼¥¸¡äÁ÷¿® Alt+S)"¤«"¸å¤ÇÁ÷¿®(¥á¥Ã¥»¡¼¥¸¡ä¸å¤ÇÁ÷¿® Shift+Alt+S)" +¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ +¥á¥Ã¥»¡¼¥¸¥á¥Ë¥å¡¼¤è¤êBcc, ÊÖ¿®Àè¤ò»ØÄêÅù¤òÁªÂò¤¹¤ì¤Ð¡¢ +ɽ¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¥Õ¥£¡¼¥ë¥É¤Ë¤âÀßÄê¤Ç¤­¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¡£ + +"Á÷¿®"¤Ï¤¹¤°¤ËÁ÷¿®¤·¡¢"¸å¤ÇÁ÷¿®"¤Ï°ìÅÙÁ÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ËÊݸ¤·¤Æ¤«¤é +¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤Î¥Ä¡¼¥ë¥Ð¡¼¤Î"Á÷¿®"¥Ü¥¿¥ó¤ä, +¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äÁ÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®"¤ÇÁ÷¿®¤Ç¤­¤Þ¤¹¡£ + +¤É¤Á¤é¤Î¾ì¹ç¤â¡¢ +¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤ò"Á÷¿®"¤¢¤ë¤¤¤Ï"¸å¤ÇÁ÷¿®"¥Ü¥¿¥ó¤¬²¡¤µ¤ì¤¿»þÅÀ¤Ç¤Î¥¢¥«¥¦¥ó¥È¤òÍøÍѤ·¤ÆÁ÷¿®¤µ¤ì¤Þ¤¹¡£ + +¸å¤ÇÁ÷¿®¤òÍøÍѤ·¤Æ¤â¡¢¸å¤ÇÁ÷¿®¥Ü¥¿¥ó¤ò²¡¤µ¤ì¤¿»þÅÀ¤Ç·èÄꤵ¤ì¤ë¤Î¤Ç¡¢ +¥¢¥«¥¦¥ó¥È¤òÊѤ¨¤ÆÊ̤Υá¥Ã¥»¡¼¥¸¤òºîÀ®¤·¡¢¤Þ¤È¤á¤ÆÁ÷¿®¤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ + +"źÉÕ"¥Ü¥¿¥ó¤ò²¡¤¹¤«¡¢¥á¥Ë¥å¡¼¤Ç"¥Õ¥¡¥¤¥ë¡ä¥Õ¥¡¥¤¥ë¤òźÉÕ"¤Ç¥Õ¥¡¥¤¥ë¤ò +źÉÕ¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +źÉÕ¥Õ¥¡¥¤¥ë¤Î¥ê¥¹¥È¤¬¸½¤ì¤ë¤Î¤Ç¡¢³Æ¥Õ¥¡¥¤¥ë¤òÁªÂò¤·¤Æ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê +ÄɲäòÁªÂò¤¹¤ì¤ÐźÉÕ¥Õ¥¡¥¤¥ë¤ÎÄɲᢺï½ü¤òÁªÂò¤¹¤ì¤Ð¤½¤Î¥Õ¥¡¥¤¥ë¤ò¥ê¥¹¥È¤«¤éºï½ü¡¢¥×¥í¥Ñ¥Æ¥£¤Ç¤½¤ÎźÉÕ¥Õ¥¡¥¤¥ë¤ÎMIME¥¿¥¤¥×/¥¨¥ó¥³¡¼¥ÉÊý¼°/¥Ñ¥¹/¥Õ¥¡¥¤¥ë̾¤ò»ØÄê¤Ç¤­¤Þ¤¹¡£ + +"ÁÞÆþ"¥Ü¥¿¥ó¤ä¥á¥Ë¥å¡¼¤Î¥Õ¥¡¥¤¥ë¡ä¥Õ¥¡¥¤¥ë¤òÁÞÆþ"¤Ç¤Ï¥á¥Ã¥»¡¼¥¸ËÜʸ¤Ë +»ØÄꤷ¤¿¥Õ¥¡¥¤¥ë¤òÁÞÆþ¤Ç¤­¤Þ¤¹¡£ + +"¥¢¥É¥ì¥¹"¥Ü¥¿¥ó¤ò²¡¤¹¤«¡¢¥á¥Ë¥å¡¼¤Ç"¥Ä¡¼¥ë¡ä¥¢¥É¥ì¥¹Ä¢"¤òÁªÂò¤¹¤ì¤Ð¡¢ +<ref id="address-combo" name="¥¢¥É¥ì¥¹Ä¢¤ÈÏ¢·¸">¤Ç¤­¤Þ¤¹¡£ + +³°Éô¥¨¥Ç¥£¥¿¤òÍøÍѤ¹¤ë¤Ë¤Ï¡¢ +<ref id="ext-editor-config" name="³°Éô¥¨¥Ç¥£¥¿¤òÀßÄê">¤·¤Æ¤«¤é¡¢ +<itemize> +<item>¥Ä¡¼¥ë¥Ð¡¼¤Î"¥¨¥Ç¥£¥¿"¥Ü¥¿¥ó¤ò²¡¤¹ +<item>¥á¥Ë¥å¡¼¤Ç"ÊÔ½¸¡ä³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸"¤òÁªÂò +<item>Alt+x¤òÁªÂò +</itemize> +¤Î¤É¤ì¤«¤ò¤·¤Æ¡¢³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸¤·¤ÆÊݸ¤·¤Æ½ªÎ»¤ò¤¹¤ì¤Ð¡¢È¿±Ç¤µ¤ì¤Þ¤¹¡£ + +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®¤¹¤ë +<p> +¤Þ¤º¡¢<ref id="read-message" name="¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷">¤Ë½ñ¤«¤ì¤Æ¤¤¤ëÊýË¡¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +<itemize> +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê"ÊÖ¿®"¤òÁªÂò +<item>¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äÊÖ¿®"¤òÁªÂò +<item>Alt+r¤¢¤ë¤¤¤Ï a¥­¡¼¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¥¦¥£¥ó¥É¥¦¤¬³«¤¯¤Î¤Ç¡¢ +¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®¤ÈƱ¤¸¤è¤¦¤Ë¤·¤ÆÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸¤ò°úÍѤ·¤ÆÊÖ¿®¤¹¤ë +<p> +<ref id="read-message" name="¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷">¤Ë½ñ¤«¤ì¤Æ¤¤¤ëÊýË¡¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +<itemize> +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê"°úÍѤ·¤ÆÊÖ¿®"¤òÁªÂò +<item>¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡ä°úÍѤ·¤ÆÊÖ¿®"¤òÁªÂò +<item>Ctrl+q¤¢¤ë¤¤¤ÏA¥­¡¼¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¥¦¥£¥ó¥É¥¦¤¬³«¤¯¤Î¤Ç¡¢ +¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®¤ÈƱ¤¸¤è¤¦¤Ë¤·¤ÆÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸¤òžÁ÷¤¹¤ë +<p> +<ref id="read-message" name="¥á¥Ã¥»¡¼¥¸¤Î±ÜÍ÷">¤Ë½ñ¤«¤ì¤Æ¤¤¤ëÊýË¡¤ò»È¤Ã¤Æ¥á¥Ã¥»¡¼¥¸¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +<itemize> +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤è¤ê"žÁ÷"¤òÁªÂò +<item>¥á¥Ë¥å¡¼¤Î"¥á¥Ã¥»¡¼¥¸¡äžÁ÷"¤òÁªÂò +<item>Ctrl+f¤¢¤ë¤¤¤Ïf,F¥­¡¼¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤Ç¥¦¥£¥ó¥É¥¦¤¬³«¤¯¤Î¤Ç¡¢ +¥á¥Ã¥»¡¼¥¸¤Î¿·µ¬ºîÀ®¤ÈƱ¤¸¤è¤¦¤Ë¤·¤ÆÁ÷¿®¤Ç¤­¤Þ¤¹¡£ +</sect1> +</sect> +<sect>¥¢¥É¥ì¥¹Ä¢ +<p> +¥¢¥É¥ì¥¹Ä¢¤Ï¡¢ +<itemize> +<item>Alt + a¤ò²¡¤¹ +<item>¥á¥Ë¥å¡¼¤è¤ê"¥Ä¡¼¥ë¡ä¥¢¥É¥ì¥¹Ä¢"¤òÁªÂò¤¹¤ë +</itemize> +¤Ê¤É¤ÎÊýË¡¤Çµ¯Æ°¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +<sect1>¥¢¥É¥ì¥¹¤ÎÅÐÏ¿¡¦ºï½ü +<p> +¥¢¥É¥ì¥¹Ä¢¤ò³«¤¤¤¿¸å¡¢¥¢¥É¥ì¥¹¤òÅÐÏ¿¤·¤¿¤¤¥Õ¥©¥ë¥À¤ò"¶¦Í­¥¢¥É¥ì¥¹"¤ä +"¸Ä¿ÍÍÑ¥¢¥É¥ì¥¹"¤Ê¤É¤¬½ñ¤«¤ì¤¿¥ê¥¹¥È¤ÎÃ椫¤éÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¸å¡¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡ä¿·µ¬¥¢¥É¥ì¥¹" +<item>ÅÐÏ¿¥Ü¥¿¥ó¤ò²¡¤¹ +<item>Alt + n¤ò²¡¤¹ +<item>¥¢¥É¥ì¥¹É½¼¨Éôʬ¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢¿·µ¬¥¢¥É¥ì¥¹¤òÁªÂò +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ë¤³¤È¤ÇÅÐÏ¿¥À¥¤¥¢¥í¥°¤¬¸½¤ì¤ë¤Î¤Ç¡¢¤½¤ì¤¾¤ì¤Î¹àÌܤòÆþÎϤ·¤¿¸åOK¤ò²¡¤»¤Ð +ÅÐÏ¿¤µ¤ì¤Þ¤¹¡£ + +¤Þ¤¿ÅÐÏ¿¤µ¤ì¤¿¥¢¥É¥ì¥¹¤òÁªÂò¸å¡¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡äÊÔ½¸" +<item>Alt + return¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤ÆÊÔ½¸¤òÁªÂò +<item>ÊÔ½¸¥Ü¥¿¥ó¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ì¤ÐÊÔ½¸¥À¥¤¥¢¥í¥°¤òɽ¼¨¤Ç¤­¡¢OK¤ò²¡¤»¤Ð¹¹¿·¤µ¤ì¤Þ¤¹¡£ + +Ʊ¤¸¤¯ÅÐÏ¿¤µ¤ì¤¿¥¢¥É¥ì¥¹¤òÁªÂò¸å¡¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡äºï½ü" +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æºï½ü¤òÁªÂò +<item>ºï½ü¥Ü¥¿¥ó¤ò²¡¤¹ +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥¢¥É¥ì¥¹Ä¢¤«¤é¤½¤Î¥¢¥É¥ì¥¹¤òºï½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>¥Õ¥©¥ë¥À¤È¥°¥ë¡¼¥× +<p> +¥Õ¥©¥ë¥À¤È¥°¥ë¡¼¥×¤ÏÃæ¤Ë¥¢¥É¥ì¥¹¤òÆþ¤ì¤é¤ì¤ë¤È¤¤¤¦ÅÀ¤ÇƱ¤¸¤Ç¤¹¤¬¡¢ +¥á¡¼¥ëºîÀ®»þ¤Ë¥¢¥É¥ì¥¹Ä¢¤«¤é¥°¥ë¡¼¥×¤ò»²¾È¤¹¤ë¤³¤È¤Ë¤è¤ê¡¢¤½¤Î¥°¥ë¡¼¥×¤ËÅÐÏ¿¤µ¤ì¤¿ +¤¹¤Ù¤Æ¤Î¿Í¤ËÁ÷¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤ë¤È¤¤¤¦µ¡Ç½¤Î°ã¤¤¤¬¤¢¤ê¤Þ¤¹¡£ + +¥Õ¥©¥ë¥À¤¢¤ë¤¤¤Ï¥°¥ë¡¼¥×¤òÃæ¤Ëºî¤ê¤¿¤¤¥Õ¥©¥ë¥À¤òÁªÂò¸å¡¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡ä¿·µ¬¥Õ¥©¥ë¥À" +<item>Alt + r¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æ¿·µ¬¥Õ¥©¥ë¥À¤òÁªÂò +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥Õ¥©¥ë¥À¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤è¤ê"¥Õ¥¡¥¤¥ë¡ä¿·µ¬¥°¥ë¡¼¥×" +<item>Alt + g¤ò²¡¤¹ +<item>¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¤Æ¿·µ¬¥°¥ë¡¼¥×¤òÁªÂò +</itemize> +¤Î¤É¤ì¤«¤ò¤¹¤ì¤Ð¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤¿¤À¤·¡¢¥Õ¥©¥ë¥À¤ÎÃæ¤Ë¥Õ¥©¥ë¥À¤ä¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤³¤È¤Ï²Äǽ¤Ç¤¹¤¬¡¢ +¥°¥ë¡¼¥×¤ÎÃæ¤Ë¥Õ¥©¥ë¥À¤ä¥°¥ë¡¼¥×¤òºîÀ®¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +</sect1> +<sect1>¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤È¤ÎÏ¢·È<label id="address-combo"> +<p> +<ref id="message-create" name="¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®">²èÌ̤ǡ¢ +<itemize> +<item>¥á¥Ë¥å¡¼¤Ç"¥Ä¡¼¥ë¡ä¥¢¥É¥ì¥¹Ä¢" +<item>"¥¢¥É¥ì¥¹"¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯ +</itemize> +¤¹¤ë¤³¤È¤Ç¥¢¥É¥ì¥¹Ä¢²èÌ̤ò½Ð¤¹¤³¤È¤¬¤Ç¤­¡¢ +¤½¤³¤Ç¥¢¥É¥ì¥¹¤ä¥°¥ë¡¼¥×¤òÁªÂò¤·¤Æ"°¸Àè"(¤¢¤ë¤¤¤Ï"To:"), "Cc:", "Bcc:"¥Ü¥¿¥ó¤ò²¡¤»¤Ð +¤½¤ì¤¾¤ì°¸Àè, Cc, Bcc¤Ë¥¢¥É¥ì¥¹¤¬Äɲ䵤ì¤Þ¤¹¡£ + +Ê£¿ôÁªÂò¤·¤Æ¥Ü¥¿¥ó¤ò²¡¤·¤ÆƱ»þ¤Ë¤¿¤¯¤µ¤óÄɲ乤뤳¤È¤â²Äǽ¤Ç¤¹¤·¡¢ +°ìÅÙ3¤Ä¤Î¤É¤ì¤«¤Î¥Ü¥¿¥ó¤ò²¡¤·¤¿¸å¤Þ¤¿Ê̤Υ¢¥É¥ì¥¹¤òÁªÂò¤·¤Æ¥Ü¥¿¥ó¤ò²¡¤»¤Ð +Á°¤ËÄɲä·¤¿¥¢¥É¥ì¥¹¤Î¼¡¤ËÁªÂò¤·¤¿¥¢¥É¥ì¥¹¤¬Äɲ䵤ì¤Þ¤¹¡£ +</sect1> +</sect> +<sect>¥á¥Ã¥»¡¼¥¸¤Î¿¶¤êʬ¤± +<sect1>¿¶¤êʬ¤±¤ÎÀßÄê<label id="filtering-config"> +<p> +<ref id="general-config-open" name="Á´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦¤ò³«¤­">¡¢ +¿¶¤êʬ¤±¥¿¥Ö¤òÁªÂò¤·¤Þ¤¹¡£ +¿¶¤êʬ¤±¥ë¡¼¥ë¤òÀßÄꤷ¤¿¸å¡¢OK¤ò²¡¤·¤Þ¤¹¡£ +<sect2>¿¶¤êʬ¤±¥ë¡¼¥ë¤ÎÅÐÏ¿ +<p> +ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë¤Î¥ê¥¹¥È¤Ç(¿·µ¬)¤òÁªÂò¤·¡¢ +"¥Ø¥Ã¥À"¤Î¤È¤³¤í¤Ç¿¶¤êʬ¤±Âоݤˤ·¤¿¤¤¥Ø¥Ã¥À¤òÁªÂò¤·¤Þ¤¹¡£ +¤³¤Î¤È¤­¡¢¥É¥í¥Ã¥×¥À¥¦¥ó¥á¥Ë¥å¡¼¤ÇÁªÂò¤¹¤ë¤³¤È¤â½ÐÍè¤Þ¤¹¤¬¡¢ +¼êÆ°¤ÇÆþÎϤ·¤ÆǤ°Õ¤Î¥Ø¥Ã¥À¤òÄɲ乤뤳¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤½¤Î¸å¡¢¥­¡¼¥ï¡¼¥É¤òÆþÎϤ·¡¢½Ò¸ì¤òÁªÂò¤·¤Þ¤¹¡£ + +¤½¤·¤Æ¡¢¤â¤¦1¤ÄÀßÄꤷ¤¿¤¤¾ì¹ç¤Ï¡¢±é»»»Ò¤òÁªÂò¤·¡¢¤½¤ÎÉôʬ¤Ë¾å¤Îºî¶È¤ò·«¤êÊÖ¤·¤Þ¤¹¡£ +ÀßÄꤷ¤¿¤¯¤Ê¤¤¾ì¹ç¤ÏÆþÎϤ·¤Ê¤¤¤Ç¹½¤¤¤Þ¤»¤ó¡£ + +¤½¤Î¸å¡¢¿¶¤êʬ¤±Àè¤òÁªÂò¤¹¤ë¤«¡¢¼õ¿®¤·¤Ê¤¤¤òÁªÂò¤·¤¿¸å¡¢ +ÅÐÏ¿¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ + +"¼õ¿®¤·¤Ê¤¤"¤ÏSylpheed¤Ç¤Ï¼õ¿®¤µ¤ì¤º¡¢¥µ¡¼¥Ð¤Ë¤â»Ä¤ê¤Þ¤¹¡£ +</sect2> +<sect2>¿¶¤êʬ¤±¥ë¡¼¥ë¤ÎÃÖ´¹ +<p> +ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë¤Î¥ê¥¹¥È¤«¤éÊѹ¹¤·¤¿¤¤¥ë¡¼¥ë¤òÁªÂò¤·¤Þ¤¹¡£ +¤¹¤ë¤È¾å¤Î¥Õ¥£¡¼¥ë¥É¤¬Ëä¤Þ¤ë¤Î¤Ç¡¢Êѹ¹¤·¤¿¤¤Éôʬ¤òÊѹ¹¤·¡¢ +˺¤ì¤º¤Ë"ÃÖ´¹"¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£ +</sect2> +<sect2>¿¶¤êʬ¤±¥ë¡¼¥ë¤Îºï½ü +<p> +ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë¤Î¥ê¥¹¥È¤«¤éºï½ü¤·¤¿¤¤¥ë¡¼¥ë¤òÁªÂò¤·¡¢ +ºï½ü¥Ü¥¿¥ó¤ò²¡¤·¤Þ¤¹¡£ +</sect2> +</sect1> +<sect1>¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï +<p> +<sect2>¼«Æ°Åª¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï +<p> +¼«Æ°Åª¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤·¤¿¤¤¥¢¥«¥¦¥ó¥È¤Î +<ref id="Account-Config" name="¥¢¥«¥¦¥ó¥È¤ÎÀßÄê">¤Ç¡¢ +¼õ¿®¥¿¥Ö¤ÎÃæ¤Ë¤¢¤ë¡Ö¼õ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë¡×¤ò¥ª¥ó¤Ë¤·¤Þ¤¹¡£ +</sect2> +<sect2>³«¤¤¤Æ¤¤¤ë¥Õ¥©¥ë¥À¤Ë¿¶¤êʬ¤±¤ò¼Â¹Ô¤¹¤ë¤Ë¤Ï +<p> +¥á¥Ë¥å¡¼¤Î"¥µ¥Þ¥ê¡ä¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë"¤òÁªÂò¤¹¤ë¤³¤È¤Ç¡¢ +ÀßÄꤵ¤ì¤¿¥ë¡¼¥ë¤ò¸µ¤Ë¿¶¤êʬ¤±¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£ +</sect2> +</sect1> +</sect> +<sect>¾¥á¡¼¥ë(¥á¡¼¥ëÊݸ·Á¼°)¤«¤éSylpheed(MH¥Õ¥©¥ë¥À·Á¼°)¤Ø¤Î°Ü¹Ô +<sect1>mbox·Á¼°¤Î¥á¥Ã¥»¡¼¥¸¥Õ¥¡¥¤¥ë¤Î¼è¤ê¹þ¤ß<label id="mbox-inport"> +<p> +¥Õ¥¡¥¤¥ë¥á¥Ë¥å¡¼¤«¤émbox¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È¤òÁªÂò¤·¡¢ +¥¤¥ó¥Ý¡¼¥È¥Õ¥¡¥¤¥ë¤Ë¤Ï¥¤¥ó¥Ý¡¼¥È¤·¤¿¤¤mbox·Á¼°¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÁªÂò¤·¤Þ¤¹¡£ + +¥¤¥ó¥Ý¡¼¥ÈÀè¤Ë¤ÏÁªÂò¤·¤¿¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òŸ³«¤¹¤ë¥Õ¥©¥ë¥À¤ò»ØÄꤷ +OK¤ò²¡¤»¤Ð¥¤¥ó¥Ý¡¼¥È¤µ¤ì¤Þ¤¹¡£ +mbox·Á¼°¤Ï¡¢"mbox"¤È¤¤¤¦¥Õ¥¡¥¤¥ë¤Î¾¤Ë¤âNetscape Messenger¤Î~/nsmail¤Î²¼¤Î¥Õ¥¡ +¥¤¥ë¡¢KMail¤Î~/Mail°Ê²¼¤Î¥Õ¥¡¥¤¥ëÅù¤Ë¤âÍøÍѤµ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤òÍøÍÑ +¤¹¤ë¤³¤È¤Ç°Ü¹Ô¤Ç¤­¤Þ¤¹¡£ + +¤¿¤À¤·¡¢KMail¤ÏźÉÕ¥Õ¥¡¥¤¥ë¤òÊÌ¥Õ¥¡¥¤¥ë¤Ë¤·¤Æ¤·¤Þ¤¦»ÅÍͤ¬¤¢¤ë¤é¤·¤¯¡¢ +źÉÕ¥Õ¥¡¥¤¥ë¤¬¤¢¤ë¾ì¹ç¡¢Àµ¤·¤¯¥³¥ó¥Ð¡¼¥È¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£ +</sect1> +<sect1>Windows¤Î¥á¡¼¥é(Becky!¤äAL-Mail, Outlook Express4Åù)¤«¤é¤Î°Ü¹Ô +<p> +WindowsÍѥե꡼¥½¥Õ¥È¥¦¥§¥¢¤Ç¤¢¤ë +<url url="http://www.digico-m.com/shin1/" name="MailExp">¤òÍøÍѤ·¤Æ +"ɸ½àUNIX From·Á¼°¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹"¤Ë¥¨¥¯¥¹¥Ý¡¼¥È¤·¤Þ¤¹¡£ +¤½¤Î¸å¤½¤Î¥Õ¥¡¥¤¥ë¤ò°ÜÆ°¤·¤½¤Î¥Õ¥¡¥¤¥ë¤ò +<ref id="mbox-inport" name="mbox·Á¼°¤È¤·¤Æ¥¤¥ó¥Ý¡¼¥È">¤·¤Þ¤¹¡£ +MailExp¤Ï¤È¤Æ¤â¿¤¯¤Î¥á¡¼¥é¤«¤é¤Î¥¤¥ó¥Ý¡¼¥È¤¬²Äǽ¤Ç¤¹¡£ +<sect1>Outlook Express 5¤Îdbx·Á¼°¤«¤é¤Î°Ü¹Ô +<p> +Outlook Express 5¤Î·Á¼°¤ÏMailExp¤Ç¤Ï¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¤Î¤Ç +<url url="http://www02.so-net.ne.jp/~home/oe5conv/" name="OE5Conv">¤òÍøÍѤ·¤Æ +mbox·Á¼°¤Ø¥¨¥¯¥¹¥Ý¡¼¥È¤·¤¿¸å¡¢¤½¤Î¥Õ¥¡¥¤¥ë¤ò<ref id="mbox-inport" name="mbox·Á¼°¤È¤·¤Æ¥¤¥ó¥Ý¡¼¥È">¤·¤Þ¤¹¡£ +</sect1> +<sect1>NMail4(NTool)¤«¤é¤Î°Ü¹Ô +<p> +GTK+/GNOME¤Î¥á¡¼¥é¤Ç¤¢¤ëNmail¤«¤é¤Î°Ü¹Ô¤Ï¡¢ +<url url="http://www.enjoy.ne.jp/~gm/program/nmail4tosylpheed/index-ja.html" name="Nmail4 to Sylpheed">¤¬¸ø³«¤µ¤ì¤Æ¤¤¤Þ¤¹¤Î¤Ç¤½¤Á¤é¤ò»²¾È¤¯¤À¤µ¤¤¡£ +</sect1> + +</sect> +<sect>NetNews¤Î¹ØÆÉ +<p> +<sect1>¥µ¡¼¥Ð¤ÎÄɲᦺï½ü +<p> +<sect2>¥µ¡¼¥Ð¤ÎÄɲÃ<label id="append-news-serv"> +<p> +Netnews¤òÆɤà¤Ë¤Ï¥µ¡¼¥Ð¤òSylpheed¤ËÅÐÏ¿¤·¤Þ¤¹¡£ +¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Î¡¢"NetNews"¤È½ñ¤«¤ì¤¿¥Õ¥©¥ë¥À¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢"¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òÄɲÃ"¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤Î¥À¥¤¥¢¥í¥°¤Ë¥Ë¥å¡¼¥¹¥µ¡¼¥Ð̾¤òÆþÎϤ·¤ÆOK¥Ü¥¿¥ó¤ò²¡¤»¤ÐÅÐÏ¿´°Î»¤Ç¤¹¡£ +¥µ¡¼¥Ð¤Ï¤¤¤¯¤Ä¤Ç¤âÅÐÏ¿¤Ç¤­¤Þ¤¹¡£ +</sect2> +<sect2>¥µ¡¼¥Ð¤Îºï½ü +<p> +ÅÐÏ¿¤µ¤ì¤¿¥µ¡¼¥Ð̾¤Î½ñ¤«¤ì¤¿¥Õ¥©¥ë¥À¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò¸Æ¤Ó½Ð¤·¤Æ¡¢ +"¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òºï½ü"¤òÁªÂò¤·¤Þ¤¹¡£ +¤½¤·¤Æ"¤Ï¤¤"¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢"¢ª"¡¢"Enter"¤ÇÅÐÏ¿¤«¤é¾Ã¤»¤Þ¤¹¡£ + +¥­¥ã¥Ã¥·¥å¾ðÊó¤ÏÉü¸µ¤Ç¤­¤Ê¤¤¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ +</sect2> +<sect2>¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤Ë´Ø¤¹¤ëTips +<p> +¸½ºß¤ÎSylpheed¤Ï¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤Ë1¤Ä1¤Ä¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê´ó¤»¤Æ¹Ô¤­¤Þ¤¹¡£ +¤½¤Î¤¿¤á¡¢¥À¥¤¥ä¥ë¥¢¥Ã¥×´Ä¶­¤Ç¤ÏÃÙ¤¤¤«¤âÃΤì¤Þ¤»¤ó¡£ + +¤½¤³¤Çleafnode+ ¤Î¤è¤¦¤Ê¥ª¥Õ¥é¥¤¥ó¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤ò»È¤¦¤³¤È¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£ +Vine Linux¤Ê¤éVinePlus, Kondara MNU/Linux¤Ê¤éKondara-Zoo, +¤Ê¤É¤«¤éÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect2> +</sect1> +<sect1>¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ¡¦¹ØÆɲò½ü +<sect2>¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ +<p> +<ref id="append-news-serv" name="¥µ¡¼¥Ð¤ÎÄɲÃ">¤ÇÄɲä·¤¿¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤ò +¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ç±¦¥¯¥ê¥Ã¥¯¤·¤Æ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢ +"¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ"¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£ + +¤½¤·¤Æ¤½¤³¤Ë"fj.os.linux"¤Î¤è¤¦¤ËÆþÎϤ·¤ÆOK¤ò²¡¤»¤Ð¡¢¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×̾¤Î¥Õ¥©¥ë¥À¤¬ÅÐÏ¿¤µ¤ìÆɤá¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£ +</sect2> +<sect2>¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆɲò½ü +<p> +¹ØÆɤÇÄɲä·¤¿¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤ò±¦¥¯¥ê¥Ã¥¯¤·¤Æ¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò½Ð¤·¡¢ +"¤Ï¤¤"¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢"¢ª"¡¢"Enter"¤Ç²ò½ü¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤³¤Î¾ì¹ç¤â¥­¥ã¥Ã¥·¥å¤ä̤ÆɾðÊó¤Ï¥¯¥ê¥¢¤µ¤ì¤Æ¤·¤Þ¤¦¤Î¤ÇÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ +</sect2> +</sect1> +<sect1>¥Ë¥å¡¼¥¹¤òÆɤà +<p> +¥Ë¥å¡¼¥¹¤Ï¡¢<ref id="read-message" name="¥á¡¼¥ë¤Î±ÜÍ÷">¤ÈÁ´¤¯Æ±¤¸ÊýË¡¤ÇÆɤळ¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤¿¤À¤·¡¢¸½ºß¤ÎSylpheed¤Ç¤Ï¡¢µ­»ö¤ÎÅê¹Æ¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +</sect1> +</sect> +<sect>¥«¥¹¥¿¥Þ¥¤¥º(Á´È̤ÎÀßÄê) +<sect1>Á´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦<label id="general-config-open"> +<p> +Á´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦¤ò³«¤¯¤Ë¤Ï +<itemize> +<item>¥á¥Ë¥å¡¼¤«¤é"ÀßÄê¡äÁ´È̤ÎÀßÄê" +<item>¥Ä¡¼¥ë¥Ð¡¼¤«¤éÀßÄê¤ò¥¯¥ê¥Ã¥¯ +</itemize> +¤¹¤ë¤³¤È¤Ç³«¤¯¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>³Æ¹àÌܤÎÀâÌÀ +<sect2>(¼õ¿®)¥¿¥Ö +<sect3>³°Éô¥×¥í¥°¥é¥à +<p> +¥á¡¼¥ë¤Î¼õ¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢ +SylpheedËÜÂΤμõ¿®Éô¤ò»ÈÍѤ»¤º¤Ë¤½¤Î¥×¥í¥°¥é¥à¤òÍøÍѤ·¤Æ¼õ¿®¤ò¹Ô¤¤¤Þ¤¹¡£ +</sect3> +<sect3>¥í¡¼¥«¥ë¥¹¥×¡¼¥ë +<p> +¥¹¥×¡¼¥ë¤«¤é¼è¤ê¹þ¤à¤òÁªÂò¤¹¤ì¤Ð¡¢ +"[¥¹¥×¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê]/[¥æ¡¼¥¶Ì¾]"¤Î¥Õ¥¡¥¤¥ë¤«¤é¥á¥Ã¥»¡¼¥¸¤¬¼è¤ê¹þ¤Þ¤ì¤Þ¤¹¡£ +¼è¤ê¹þ¤ß»þ¤Ë¿¶¤êʬ¤±¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢¼è¤ê¹þ¤ß»þ¤Ë¿¶¤êʬ¤±¤é¤ì¤Þ¤¹¡£ +</sect3> +<sect3>¿·Ãå¥á¡¼¥ë¤ò¼«Æ°¥Á¥§¥Ã¥¯¤¹¤ë +<p> +̤¼ÂÁõ +</sect3> +<sect3>µ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¥Á¥§¥Ã¥¯¤¹¤ë +<p> +Sylpheedµ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¼«Æ°¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤ì¤Þ¤¹¡£ +</sect3> +</sect2> +<sect2>(Á÷¿®¥¿¥Ö) +<p> +<sect3>³°Éô¥×¥í¥°¥é¥à +<p> +̤¼ÂÁõ +</p> +</sect3> +<sect3>Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤¨¤ËÊݸ¤¹¤ë +<p> +ÁªÂò¤¹¤ë¤ÈÁ÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤¨¤ËÊݸ¤·¤Æ¤¯¤ì¤Þ¤¹¡£ +</sect3> +<sect3>Á÷¿®¤Ë¼ºÇÔ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤ë +<p> +ÁªÂò¤¹¤ë¤ÈÁ÷¿®¤Ë¼ºÇÔ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤Æ¤¯¤ì¤Þ¤¹¡£ +"Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®"¤Ç¤â¤¦1ÅÙÁ÷¿®¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect3> +<sect3>Á÷¿®¥³¡¼¥É¥»¥Ã¥È +<p> +libjconv¤ò¥ª¥ó¤Ë¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤¿¤È¤­¡¢ +¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë¤È¤­¤Îʸ»ú¥³¡¼¥É¤òÁªÂò¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +Ä̾ï¤Ï"¼«Æ°ÀßÄê"¤ò¿ä¾©¤·¤Þ¤¹¡£ +¤Á¤Ê¤ß¤Ë¡¢ja_JP¤Î¥í¥±¡¼¥ë¤¬ÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢ISO-2022-JP¤¬ÁªÂò¤µ¤ì¤Þ¤¹¡£ +ÆüËܸì¤ò»ÈÍѤ¹¤ë¤È¤­¤Ï¡¢"ISO-2022-JP"¤ÎÀßÄê¤âÌäÂê¤Ê¤¤¤Ç¤¹¡£ + +UTF8Åù¤â»ÈÍѤ¹¤ë¤³¤È¤â¤Ç¤­¤Þ¤¹¤¬¡¢Áê¼ê¤¬Æɤá¤ë¤È³Îǧ¤Ç¤­¤ë¾ì¹ç¤Î¤ß +»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£ +</sect3> +<sect2>(ºîÀ®)¥¿¥Ö +<sect3>°úÍÑ +<p> +°úÍÑÉä¤È°úÍѤηÁ¼°¤òÀßÄꤷ¤Þ¤¹¡£ +°úÍÑÉä¤ËÀßÄꤷ¤¿Ê¸»úÎ󤬡¢>¤Ç¡¢ +°úÍѤηÁ¼°¤¬ +<verb> +On %d +%f wrote: +</verb> +¤À¤Ã¤¿¾ì¹ç +<verb> +On [ÆüÉÕ] +[º¹½Ð¿Í] wrote: +> ¸µ¤Î¥á¥Ã¥»¡¼¥¸¤Îʸ¾Ï +> 2¹ÔÌÜ +</verb> +¤È¤¤¤¦¤è¤¦¤Ë°úÍѤ·¤ÆÊÖ¿®»þ¤Ë°úÍѤµ¤ì¤Þ¤¹¡£ +µ­¹æ¤ÎÀâÌÀ¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ì¤Ð¡¢%¤Ç»Ï¤Þ¤ë¤â¤Î¤ÎÀâÌÀ¤¬¤Ç¤Æ¤­¤Þ¤¹¡£ +¤Á¤Ê¤ß¤Ë¡¢¤³¤Î¥¦¥£¥ó¥É¥¦¤ÏÁ´È̤ÎÀßÄꥦ¥£¥ó¥É¥¦¤òÊĤ¸¤Ê¤¤¤ÈÊĤ¸¤é¤ì¤Þ¤»¤ó¡£ +<itemize> +<item>%d: ÆüÉÕ +<item>%f: º¹½Ð¿Í +<item>%s: ·ï̾ +<item>%t: °¸Àè +<item>%i: ¥á¥Ã¥»¡¼¥¸ID +<item>%%: % +</itemize> +</sect3> +<sect3>½ð̾ +<p> +¼«Æ°Åª¤Ë½ð̾¤òÁÞÆþ¤¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤ËºÇ¸å¤ÎÊý¤Ë +¼«Æ°Åª¤Ë½ð̾¤¬ÁÞÆþ¤µ¤ì¤Þ¤¹¡£ +<verb> +[¤½¤Î»þ¤ËÀßÄꤵ¤ì¤Æ¤ë½ð̾¤Î¶èÀÚ¤ê] +[³Æ¥¢¥«¥¦¥ó¥ÈÀßÄê¤Î½ð̾¥Õ¥¡¥¤¥ë] +</verb> +¤È¤¤¤¦¤è¤¦¤ËÁÞÆþ¤µ¤ì¤Þ¤¹¡£ +</sect3> +</sect2> +<sect2>(ɽ¼¨)¥¿¥Ö +<p> +¤³¤³¤Î¹àÌܤÏɽ¼¨¤À¤±¤Ç¤¢¤ê¡¢¥á¥Ã¥»¡¼¥¸ËÜÂΤ˱ƶÁ¤òÍ¿¤¨¤Þ¤»¤ó¡£ +<sect3>¥Õ¥©¥ó¥È<label id="font-config"> +<p> +¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤¹¤ë¥Õ¥©¥ó¥È¤òÀßÄê¤Ç¤­¤Þ¤¹¡£ +²£¤Î"..."¥Ü¥¿¥ó¤ò²¡¤»¤Ð¥Õ¥©¥ó¥ÈÁªÂò¥À¥¤¥¢¥í¥°¤ò¸Æ¤Ó½Ð¤»¤Þ¤¹¤¬¡¢ +¤¢¤Þ¤ê¤ªÁ¦¤á¤Ï¤·¤Þ¤»¤ó¡£ + +¤Á¤Ê¤ß¤Ë¡¢¥Þ¥Ë¥å¥¢¥ëºî¼Ô¤Ï +<verb> +-alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0 +</verb> +¤ËÀßÄꤷ¤Æ¤¤¤Þ¤¹¡£´ðËÜŪ¤Ë¡¢¸ÇÄêÉý¥Õ¥©¥ó¥È¤ËÀßÄꤹ¤ë¤³¤È¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£ +¥á¥Ë¥å¡¼¤Ê¤É¤Î¥Õ¥©¥ó¥È¤òÀßÄꤹ¤ë¾ì¹ç¤Ë¤Ä¤¤¤Æ¤ÏFAQ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ +</sect3> +<sect3>¥á¥Ã¥»¡¼¥¸¤Î¿§¤òÍ­¸ú¤Ë¤¹¤ë +<p> +ÁªÂò¤¹¤ì¤Ð°úÍѤµ¤ì¤¿Éôʬ¤äURL¤ÎÉôʬ¤Î¿§¤òÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¡¢ +¤ß¤ä¤¹¤¯¤Ê¤ê¤Þ¤¹¡£ +</sect3> +<sect3>¥Ø¥Ã¥À¤Î¹àÌܤòËÝÌõ¤¹¤ë +<p> +From:¤ò°¸Àè: Subject: ¤ò·ï̾:¤Ë¤·¤Æɽ¼¨¤·¤¿¤ê¤·¤Þ¤¹¡£ +¹¥¤ß¤¬Ê¬¤«¤ì¤ë¤¿¤á¤Ë¡¢ÀßÄê¹àÌܤ¬¤Ä¤¤¤Æ¤¤¤Þ¤¹¡£ +</sect3> +<sect3>¥µ¥Þ¥ê¤ò¥¹¥ì¥Ã¥Éɽ¼¨¤¹¤ë +<p> +¥µ¥Þ¥ê¤ò¥¹¥ì¥Ã¥Éɽ¼¨¤·¤Þ¤¹¡£ +¤³¤ì¤Ë¤Ä¤¤¤Æ¤Ï¡¢¥á¥Ë¥å¡¼¤Î"¥µ¥Þ¥ê¡ä¥¹¥ì¥Ã¥Éɽ¼¨", +"¥µ¥Þ¥ê¡ä¥¹¥ì¥Ã¥É²ò½ü"¤ÇÊѹ¹²Äǽ¤Ç¡¢¤É¤Á¤é¤ÇÀßÄꤷ¤Æ¤âξÊý¤ËÈ¿±Ç¤µ¤ì¤Þ¤¹¡£ +</sect3> +<sect3>2¥Ð¥¤¥È±Ñ¿ô»ú¤ò1¥Ð¥¤¥Èʸ»ú¤Çɽ¼¨¤¹¤ë +<p> +¤³¤ì¤â¹¥¤ß¤ÎÌäÂê¤Ç¤¹¤¬¡¢2¥Ð¥¤¥È±Ñ¿ô»ú¤ò1¥Ð¥¤¥Èʸ»ú¤Çɽ¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +̵ÍýÌðÍýɽ¼¨¤ÇÊѹ¹¤·¤Æ¤·¤Þ¤¦¤Î¤Ç¡¢¤º¤ì¤Æ¤·¤Þ¤¦¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ +</sect3> +<sect3>º¹½Ð¿Í¤¬¼«Ê¬¤Î¾ì¹ç¤Ï'º¹½Ð¿Í'¥«¥é¥à¤Ë°¸Àè¤òɽ¼¨¤¹¤ë +<p> +¥µ¥Þ¥ê¥Ó¥å¡¼¤Îº¹½Ð¿Í¥«¥é¥à¤Ç¡¢°¸Àè¿Í¤¬¸½ºß¤Î¥¢¥«¥¦¥ó¥ÈÀßÄê¤ÈƱ¤¸¾ì¹ç¡¢ +"--> °¸Àè"¤È¤¤¤¦¤è¤¦¤Ëɽ¼¨¤Ç¤­¤Þ¤¹¡£ +</sect3> +<sect3>¹Ô´Ö¤ò¶õ¤±¤ë +<p> +ÀßÄꤷ¤¿¥Ô¥¯¥»¥ëʬ¹Ô´Ö¤ò¶õ¤±¤Æɽ¼¨¤¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£ +</sect3> +<sect3>¹ÔƬ¤ò¶õ¤±¤ë +<p> +¹ÔƬ¤ò¶õ¤±¤Æɽ¼¨¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect3> +<sect3>¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë´Êά¥Ø¥Ã¥À¤òɽ¼¨¤¹¤ë +<p> +¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë´Êά¥Ø¥Ã¥À¤òɽ¼¨¤·¤Þ¤¹¡£ +¸½ºß¤Î¤È¤³¤í¡¢É½¼¨ÆâÍƤϥ½¡¼¥¹¥³¡¼¥É¤ò¤¤¤¸¤ë°Ê³°¤Ç¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó¡£ +</sect3> +<sect3>¥µ¥Þ¥ê¤Îɽ¼¨¹àÌܤòÀßÄê... +<p> +¥µ¥Þ¥ê¤Îɽ¼¨¹àÌܤòÀßÄê¤Ç¤­¤Þ¤¹¡£ +¥¯¥ê¥Ã¥¯¤·¤Æ¡¢É¬Íפʤâ¤Î¤òÁªÂò¤·¤ÆOK¥Ü¥¿¥ó¤ò²¡¤·¤Æ´°Î»¤Ç¤¹¡£ +</sect3> +</sect2> +<sect2>(¿¶¤êʬ¤±)¥¿¥Ö +<p> +<ref id="filtering-config" name="¿¶¤êʬ¤±¤ÎÀßÄê">¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£ +</sect2> +<sect2>(¥¤¥ó¥¿¥Õ¥§¡¼¥¹)¥¿¥Ö +<p> +<sect3>Emacs¾å¤Î¥á¡¼¥é¤Î¥Þ¥¦¥¹Áàºî»þ¤ÎµóÆ°¤ò¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë +<p> +¥µ¥Þ¥ê¥Ó¥å¡¼¤ò±¦¥¯¥ê¥Ã¥¯¤Ç¤Ï¤Ê¤¯¡¢Ãæ¥Ü¥¿¥ó¥¯¥ê¥Ã¥¯¤À¤±¤Ç¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ç¹¹¿·¤Ç¤­¤Þ¤¹¡£ +</sect3> +<sect3>¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤¯ +<p> +¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤±¤Þ¤¹¡£ +ÀßÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¸åEnter¥­¡¼¤äÃæ¥Ü¥¿¥ó¥¯¥ê¥Ã¥¯¤Çɽ¼¨¤ò¹¹¿·¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¤¬¡¢ +¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËÀèƬ¤Î̤ÆɤΥե饰¤ò¾Ã¤·¤Æ¤·¤Þ¤¦¿´ÇÛ¤¬¤¢¤ê¤Þ¤»¤ó¡£ +</sect3> +<sect3>½ªÎ»»þ +<p> +½ªÎ»»þ¤Ë³Îǧ¤¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢Sylpheed¤ò½ªÎ»¤¹¤ë¤È¤­¤Ë¡¢ +ËÜÅö¤Ë½ªÎ»¤·¤Æ¤¤¤¤¤«¤É¤¦¤«¼ÁÌ䤷¤Æ¤­¤Þ¤¹¡£ + +½ªÎ»»þ¤Ë¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢ +½ªÎ»»þ¤Ë¥´¥ßÈ¢¤ò¶õ¤Ë¤·¤Æ¤¯¤ì¤Þ¤¹¡£ +¶õ¤Ë¤¹¤ëÁ°¤Ë¿Ò¤Í¤ë¤òÁªÂò¤¹¤ì¤Ð¡¢¿Ò¤Í¤Æ¤¯¤ì¤Þ¤¹¡£ +</sect3> +</sect2> +<sect2>(¤½¤Î¾)¥¿¥Ö +<p> +<sect3>³°Éô¥Ö¥é¥¦¥¶<label id="ext-editor-config"> +<p> +³°Éô¥Ö¥é¥¦¥¶¤Î¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Þ¤¹¡£ +%s¤ÏURI¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£¥Þ¥Ë¥å¥¢¥ëɽ¼¨¤äURI¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤Ç»ÈÍѤµ¤ì¤Þ¤¹¡£ +¤¿¤À¤·¡¢¥Ç¥Õ¥©¥ë¥È¤Înetscape -remote 'openURL(%s,raise)'¤Ç¤Ï¡¢netscape¤¬ +ºÇ½é¤«¤éµ¯Æ°¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¤¿¤á¡¢Êѹ¹¤ò¤ªÁ¦¤á¤·¤Þ¤¹¡£ +</sect3> +<sect3>°õºþ +<p> +°õºþ¤Ë»ÈÍѤ¹¤ë¥³¥Þ¥ó¥É¤òÁªÂò¤Ç¤­¤Þ¤¹¡£%s¤¬¥á¥Ã¥»¡¼¥¸¤Î¥Õ¥¡¥¤¥ë¤ËÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£ +hoge < %s | lpr¤È¤¤¤¦¤è¤¦¤Ë¤·¤Æ¥Õ¥£¥ë¥¿¤òÀßÄꤹ¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡£ +</sect3> +<sect3>³°Éô¥¨¥Ç¥£¥¿ +<p> +³°Éô¥¨¥Ç¥£¥¿¤òÁªÂò¤Ç¤­¤Þ¤¹¡£%s¤Ï°ì»þ¥Õ¥¡¥¤¥ë¤Î¥Õ¥¡¥¤¥ë̾¤ËÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹¡£ +</sect3> +</sect2> +</sect1> +</sect> + +<sect>¥ê¥Õ¥¡¥ì¥ó¥¹ +<p> +<sect1>¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¥ê¥¹¥È<label id="short-cut-key"> +<p> +<sect2>°ìÈÌŪ¤Ê¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼ +<p> +<itemize> +<item>Ctrl+x ÀÚ¤ê¼è¤ê +<item>Ctrl+c ¥³¥Ô¡¼ +<item>Ctrl+v Ž¤êÉÕ¤± +<item>Ctrl+a (¥á¥Ã¥»¡¼¥¸Æâ¤Îʸ»ú¤ò)¤¹¤Ù¤Æ¤òÁªÂò +<item>Ctrl+s ¸¡º÷ +<item>Alt+l ¥á¥Ã¥»¡¼¥¸¤Î¼õ¿® +<item>Alt+n ¿·µ¬¥á¥Ã¥»¡¼¥¸¤ÎºîÀ® +<item>Alt+r ÊÖ¿® +<item>Ctrl+q °úÍѤ·¤ÆÊÖ¿® +<item>Ctrl+f žÁ÷ +<item>Ctrl+h ¤¹¤Ù¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨ +<item>Alt+x (¥Þ¡¼¥¯¤ò)¼Â¹Ô +<item>Alt+u ºÇ¿·¤Î¾õÂ֤˹¹¿· +<item>Alt+g Ê̤Υե©¥ë¥À¤Ø°ÜÆ° +<item>Ctrl+t ¥¹¥ì¥Ã¥Éɽ¼¨ +<item>Ctrl+Shift+t ¥¹¥ì¥Ã¥Éɽ¼¨²ò½ü +<item>Ctrl+n ¿Ê¤à +<item>Ctrl+p Ìá¤ë +<item>Alt+a ¥¢¥É¥ì¥¹Ä¢ +<item>Alt+l ¥í¥°¥¦¥£¥ó¥É¥¦ +<item>Alt+w ÊĤ¸¤ë(¸½ºß¤Ç¤Ï½ªÎ»¤ÈƱ¤¸) +<item>Alt+q Sylpheed¤Î½ªÎ» +</itemize> +</sect2> +<sect2>1ʸ»ú¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼ +<p> +¼ç¤Ë¡¢Mew/Wanderlust ¥­¡¼¥Ð¥¤¥ó¥É¤Ç¤¹¡£ +±ÜÍ÷ÍѤǤÏ","¤Ç¶èÀÚ¤é¤ì¤¿¤â¤Î¤Ï2¤Ä¤È¤â»ÈÍѲġ¢Âçʸ»ú¤Ï¼ç¤ËShift¤ò²¡¤·¤¿¾ì¹ç¤Ç¤¹¡£ +(CapsLock¤Ç¤â²Ä) +<itemize> +<item>¥¹¥Ú¡¼¥¹¥­¡¼ ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤ò²¼¥¹¥¯¥í¡¼¥ë+¼¡¤Î̤Æɥ᡼¥ë¤Ø¥¸¥ã¥ó¥×(¥Õ¥©¥ë¥À±Û¤·²Ä) +<item>¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¥­¡¼ ¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤ò¾å¥¹¥¯¥í¡¼¥ë +<item>Delete¥­¡¼ ¥Ð¥Ã¥¯¥¹¥Ú¡¼¥¹¥­¡¼¤ËƱ¤¸ +<item>n,N¥­¡¼ ¼¡¤Î¥á¥Ã¥»¡¼¥¸¤Ë¿Ê¤à +<item>p,P¥­¡¼ Á°¤Î¥á¥Ã¥»¡¼¥¸¤ËÌá¤ë +<item>v,V¥­¡¼ ¥µ¥Þ¥ê¤À¤±¤Î¥â¡¼¥É¤È¥µ¥Þ¥ê+¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Î¥â¡¼¥É¤ÎÀÚÂؤ¨ +<item>Return¥­¡¼ 1¹Ô¤À¤±²¼¥¹¥¯¥í¡¼¥ë(ɽ¼¨¹¹¿·¤ËÍøÍѲÄ) +<item>Alt+Return Ìó1¹Ô¤À¤±¾å¥¹¥¯¥í¡¼¥ë +<item>²¼¥­¡¼ ¼¡¤Î¥á¥Ã¥»¡¼¥¸¤Ë¿Ê¤à(¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¹¹¿·Ìµ¤·) +<item>¾å¥­¡¼ Á°¤Î¥á¥Ã¥»¡¼¥¸¤ËÌá¤ë(¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¹¹¿·Ìµ¤·) +<item>+¥­¡¼ ¥¹¥ì¥Ã¥É¤ò³«¤¯ +<item>-¥­¡¼ ¥¹¥ì¥Ã¥É¤òÊĤ¸¤ë +<item>*¥­¡¼ ¥Þ¡¼¥¯(ÌÜ°õ¤À¤±)¤òÉÕ¤±¤ë +<item>d¥­¡¼ ¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë¥Þ¡¼¥¯¤òÉÕ¤±¤ë +<item>o¥­¡¼ ¥á¥Ã¥»¡¼¥¸¤Î°ÜÆ°ÀèÁªÂò+°ÜÆ°¤¹¤ë¥Þ¡¼¥¯¤òÉÕ¤±¤ë +<item>u¥­¡¼ ¥Þ¡¼¥¯¤ò²ò½ü¤¹¤ë +<item>x¥­¡¼ ³Æ¼ï¥Þ¡¼¥¯¤ò¼ÂºÝ¤Ë¼Â¹Ô¤¹¤ë +<item>!¥­¡¼ ̤Æɤˤ¹¤ë +<item>w¥­¡¼ ¿·¤·¤¤¥á¥Ã¥»¡¼¥¸¤ò½ñ¤¯ +<item>a¥­¡¼ ÊÖ¿®¤¹¤ë +<item>A¥­¡¼ °úÍѤ·¤ÆÊÖ¿®¤¹¤ë +<item>f,F¥­¡¼ žÁ÷¤¹¤ë +<item>y¥­¡¼ ¥á¥Ã¥»¡¼¥¸¤òÊݸ¤¹¤ë +<item>D¥­¡¼ ¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë +<item>º¸, Escape¥­¡¼ ¥Õ¥©¥ë¥À¥Ó¥å¡¼¤Ø¥Õ¥©¡¼¥«¥¹°ÜÆ° +<item>(źÉÕlist¤Ç)t ¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨ +<item>(źÉÕlist¤Ç)y ̾Á°¤òÉÕ¤±¤ÆÊݸ +<item>Q¥­¡¼ Sylpheed¤Î½ªÎ» +</itemize> +</sect2> +<sect2>¥á¥Ã¥»¡¼¥¸ºîÀ®»þ¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼ +<p> +<itemize> +<item>Ctrl+m źÉÕ¥Õ¥¡¥¤¥ë¤ÎÄɲà +<item>(źÉեꥹ¥È¤Ç)Delete¥­¡¼ źÉÕ¤ò²ò½ü +<item>Ctrl+l ¥á¥Ã¥»¡¼¥¸ËÜʸ¤Ë¥Õ¥¡¥¤¥ë¤òÁÞÆþ +<item>Ctrl+g ¥á¥Ã¥»¡¼¥¸ËÜʸ¤Ë½ð̾¤òÁÞÆþ +<item>Alt+s ¥á¡¼¥ë¤òÁ÷¿® +<item>Alt+a ¥¢¥É¥ì¥¹Ä¢ +<item>Alt+w ÊĤ¸¤ë +</itemize> +</sect2> +<sect2>¥¢¥É¥ì¥¹Ä¢¤Ç¤Î¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼ +<p> +<itemize> +<item>Alt+n ¿·µ¬¥¢¥É¥ì¥¹¤ÎÄɲà +<item>Alt+g ¿·µ¬¥°¥ë¡¼¥×¤ÎºîÀ® +<item>Alt+r ¿·µ¬¥Õ¥©¥ë¥À¤ÎºîÀ® +<item>Alt+return ¥¢¥É¥ì¥¹¾ðÊó¤ÎÊÔ½¸ +<item>Alt+w ÊĤ¸¤ë +</itemize> +</sect1> +<sect1>¥¢¥É¥ì¥¹Ä¢¥Ç¡¼¥¿¤Î¥Õ¥©¡¼¥Þ¥Ã¥È +<p> +¤³¤³¤Ë$HOME/.sylpheed/addressbook.xml"¤ËÅÐÏ¿¤µ¤ì¤ë +¥¢¥É¥ì¥¹Ä¢¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼¨¤·¤Þ¤¹¡£ + +¥¿¥°¤Ï<Í×ÁÇ̾> Ãæ¿È </Í×ÁÇ̾>¤Ç¤«¤Ê¤é¤ºÊĤ¸¤Æ¤ª¤¯¤â¤Î¤È¤·¤Þ¤¹¡£ +ÊĤ¸¤Æ¤¤¤Ê¤«¤Ã¤¿¾ì¹ç¤Ïͽ´ü¤»¤ÌÆ°ºî¤òµ¯¤³¤¹¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£ + +°À­¤Ï<¥¿¥°Ì¾ °À­="°À­¤ÎÆâÍÆ">¤È¤¤¤¦¤è¤¦¤ËÍøÍѤµ¤ì¤Þ¤¹¡£ +̵¤Î¾ì¹ç¤Ï¸ºß¤·¤Þ¤»¤ó¡£ +ÆâÍƤ¢¤ê ¤Ï³«¤­¥¿¥°¤ÈÊĤ¸¥¿¥°¤Î´Ö¤Ë¾ðÊó¤¬Â¸ºß¤¹¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£ +<sect2>Í×ÁǤβòÀâ +<p> +<sect3>xmlÀë¸À +<p> +EUC-JP¤Î´Á»ú¥³¡¼¥É¤òÍøÍѤ¹¤ëSylpheed¥¢¥É¥ì¥¹Ä¢¥Ç¡¼¥¿¤ÎºÇ½é¤Î¹Ô¤Ï +<verb> +<?xml version="1.0" encoding="EUC-JP"?> +</verb> +¤Ç»Ï¤Þ¤ë¤â¤Î¤È¤·¤Þ¤¹¡£ +</sect3> +<sect3>addressbook Í×ÁÇ(ɬ¿Ü) +<p> +°À­: ̵ + +addressbook¤ÎÎΰè¤òɽ¤·¤Þ¤¹¡£ +Sylpheed¤Î¥¢¥É¥ì¥¹Ä¢¤Î¾ì¹ç¤Ï2¹ÔÌܤË<addressbook>¤Ç +ºÇ½ª¹Ô¤¬</addressbook>¤È¤Ê¤ê¤Þ¤¹¡£ +</sect3> +<sect3>common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ(ɬ¿Ü) +<p> +°À­: ̵ + +¶¦Í­¥¢¥É¥ì¥¹¤È¸Ä¿ÍÍÑ¥¢¥É¥ì¥¹¤ò¼¨¤·¤Þ¤¹¡£ + +addressbookÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +</sect3> +<sect3>folder Í×ÁÇ +<p> +°À­: name(¥Õ¥©¥ë¥À̾) + +¥Õ¥©¥ë¥À̾¤ò¼¨¤·¤Þ¤¹¡£common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ, folderÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ + +¤Þ¤¿¡¢folderÍ×ÁǤÎÃæ¤ËfolderÍ×ÁǤò´Þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect3> +<sect3>group Í×ÁÇ +<p> +°À­: name(¥°¥ë¡¼¥×̾) + +¥°¥ë¡¼¥×̾¤òɽ¤·¤Þ¤¹¡£common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ, folderÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ + +groupÍ×ÁǤˤÏitemÍ×Áǰʳ°³ÊǼ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£ +</sect3> +<sect3>item Í×ÁÇ +<p> +°À­: ̵ + +¤½¤ì¤¾¤ì¤Î¥¢¥É¥ì¥¹¾ðÊó¤¬Ç¼¤á¤é¤ì¤ë¥¢¥¤¥Æ¥à¤ò¼¨¤·¤Þ¤¹¡£ + +common_addressÍ×ÁÇ, personal_addressÍ×ÁÇ, folderÍ×ÁÇ, groupÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +</sect3> +<sect3>name Í×ÁÇ +<p> +°À­: ̵; ÆâÍƤ¢¤ê + +¤½¤Î¥¢¥É¥ì¥¹¾ðÊó¤Î̾Á°¤ò°ÕÌ£¤·¤Þ¤¹¡£ + +itemÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +</sect3> +<sect3>address Í×ÁÇ +<p> +°À­: ̵; ÆâÍƤ¢¤ê + +¤½¤Î¥¢¥É¥ì¥¹¾ðÊó¤Î¥á¡¼¥ë¥¢¥É¥ì¥¹¤ò°ÕÌ£¤·¤Þ¤¹¡£ + +itemÍ×ÁÇÆâ¤Ë¸ºß²Äǽ¤Ç¤¹¡£ +</sect3> +<sect3>remarks Í×ÁÇ +<p> +°À­: ̵; ÆâÍƤ¢¤ê + +¤½¤Î¥¢¥É¥ì¥¹¾ðÊó¤ÎÈ÷¹Í¤ò°ÕÌ£¤·¤Þ¤¹¡£ +</sect3> +</sect2> +<sect2>¥¢¥É¥ì¥¹Ä¢¥µ¥ó¥×¥ë +<p> +°Ê²¼¤Ë¥µ¥ó¥×¥ë¤ò¼¨¤·¤Þ¤¹¡£ +<code> +<?xml version="1.0" encoding="EUC-JP"?> +<addressbook> + +<common_address> + <group name="¥Æ¥¹¥È¥°¥ë¡¼¥×"> + <item> + <name>¥Æ¥¹¥È¥¢¥É¥ì¥¹&etago;name> + <address>testtest@hogheoge.co.jp&etago;address> + <remarks>¤È¤¯¤Ë¤Ê¤·&etago;remarks> + &etago;item> + &etago;group> + <item> + <name>Sylpheed-ML&etago;name> + <address>sylpheed@silver-forest.com&etago;address> + <remarks>&etago;remarks> + &etago;item> +&etago;common_address> + +<personal_address> + <folder name="¥Æ¥¹¥È¥Õ¥©¥ë¥À"> + <item> + <name>A¤µ¤ó(²¾Ì¾)&etago;name> + <address>question_a.toka@dotcom.tokaiu.net.org&etago;address> + <remarks>&etago;remarks> + &etago;item> + &etago;folder> +&etago;personal_address> + +&etago;addressbook> +</code> +</sect2> +</sect1> +</sect> +<sect>FAQ +<p> +<sect1>¥Ë¥å¡¼¥¹¤Î¥á¥Ã¥»¡¼¥¸Ì¤ÆɾðÊó¤Ë¤Ä¤¤¤Æ +<p> +Q. Sylpheed¤Ç¤ÏƱ¤¸Message¤Î̤ÆɾðÊó¤ò°Û¤Ê¤ë¥Õ¥©¥ë¥À´Ö¤Ç´ÉÍý¤·¤Æ¤¯¤ì¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«? + +<p> +A. ¸½ºß¤ÎSylpheed¤Ï̤ÆɾðÊó¤Ï¥Õ¥©¥ë¥Àñ°Ì¤Ç´ÉÍý¤·¤Æ¤¤¤ë¤¿¤á¡¢ +¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤´¤È¤Ë̤ÆɾðÊó¤ÏÊѤï¤Ã¤ÆÍè¤Æ¤·¤Þ¤¤¤Þ¤¹¡£ +</sect1> +<sect1>MSN¤Î¥á¡¼¥ë¥¢¥«¥¦¥ó¥È¤Î»ÈÍѤˤĤ¤¤Æ +<p> +Q. »ä¤ÏMSN¤òÍøÍѤ·¤Æ¤¤¤ë¤Î¤Ç¤¹¤¬¡¢Àµ¤·¤¯ÀßÄꤷ¤¿¤Ï¤º¤Ê¤Î¤Ë¼õ¿®¤Ç¤­¤Þ¤»¤ó¡£ + +<p> +A. MSN¤ÏÆȼ«¥×¥í¥È¥³¥ë¤òÍøÍѤ·¤Æ¤¤¤ë¤È¤¤¤¦ÏäʤΤǡ¢Sylpheed¤Ç¤ÏÂбþ¤·¤Æ¤¤¤Þ¤»¤ó¡£ +¾ðÊóÄ󶡤¤¤¿¤À¤±¤ì¤ÐÂбþ¤Ç¤­¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£¡£ +</sect1> +<sect1>¥á¥Ë¥å¡¼¤Ê¤É¤Î¥Õ¥©¥ó¥ÈÊѹ¹¤Ë¤Ä¤¤¤Æ +<p> +Q. ¥á¥Ã¥»¡¼¥¸ËÜʸ¤Î¥Õ¥©¥ó¥È¤Ï<ref id="font-config" name="Á´È̤ÎÀßÄ꤫¤éÊѹ¹"> +¤Ç¤­¤Þ¤·¤¿¤¬¡¢¥µ¥Þ¥ê¤ä¥á¥Ë¥å¡¼¤Ê¤É¤Î¥Õ¥©¥ó¥È¤ÏÊѹ¹¤Ç¤­¤Ê¤¤¤Î¤Ç¤·¤ç¤¦¤«? + +<p> +A. ¤Ç¤­¤Þ¤¹¡£$HOME/.sylpheed/gtkrc¥Õ¥¡¥¤¥ë¤òÃÖ¤¤¤Æ¤¯¤À¤µ¤¤¡£ +<verb> +style "Sylpheed-Widget-font" { + fontset = "-adobe-helvetica-medium-r-normal-*-12-*-*-*-*-*-iso8859-1,\ + -alias-fixed-medium-r-normal--12-*-*-*-*-*-jisx0208.1983-0" +} +class "GtkWidget" style "Sylpheed-Widget-font" +</verb> +¤È¤¤¤¦¤è¤¦¤Ê¥Õ¥¡¥¤¥ë¤Ç¤¹¡£ +</sect1> +<sect1>¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤Î¥­¡¼¥Ð¥¤¥ó¥É¤ÎÊѹ¹ +<p> +Q. ¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤Î¥­¡¼¥Ð¥¤¥ó¥É¤ÎÊѹ¹¤Ï½ÐÍè¤Þ¤¹¤«? + +<p> +A. ¥á¥Ë¥å¡¼¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¹àÌܤ˴ؤ·¤Æ¤Ï¤Ç¤­¤Þ¤¹¡£ +¥á¥Ë¥å¡¼¤ÇÊѹ¹¤·¤¿¤¤¹àÌܤ˥«¡¼¥½¥ë¤ò¹ç¤ï¤»¤Æ¤«¤é¡¢¤½¤ÎÉôʬ¤ÇÊѹ¹¤·¤¿¤¤¥­¡¼¤ò²¡¤»¤Ð¡¢ +³ä¤êÅö¤Æ¤é¤ì¤Þ¤¹¡£Backspace¥­¡¼¤ò²¡¤»¤Ð¡¢¾Ã¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +¤¿¤À¤·Êѹ¹¤ÏÊݸ¤µ¤ì¤Þ¤»¤ó¡£ +</sect1> + +</sect> +<sect>¾ðÊó +<p> +<sect1>Sylpheed ´ØÏ¢¥µ¥¤¥È +<p> +<sect2>Sylpheed ¥ª¥Õ¥£¥·¥ã¥ëWeb¥µ¥¤¥È +<p> +Sylpheed ¥ª¥Õ¥£¥·¥ã¥ëWeb¥µ¥¤¥È¤Î¾ì½ê¤Ï¡¢ +<url url="http://sylpheed.good-day.net/"> +¤Ç¤¹¡£ +<sect2>Sylpheed ºÇ¿·ÈÇÆþ¼êÀè +<p> +<url url="http://sylpheed.good-day.net/sylpheed/">¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£ + +<sect2>rpm¤ÎÆþ¼êÀè +<p> +<url url="http://members.linuxstart.com/~sunnyone/mylinux/sylpheed.html"> + +¤Ç¤Û¤È¤ó¤É¤ÎRedHat Package Manager(rpm)¤òÍøÍѤ·¤¿Linux Distribution¤ËÂбþ¤Ç¤­¤ë¤È»×¤ï¤ì¤ë +rpm¤¬¤¢¤ê¤Þ¤¹¡£¤½¤ì¤¾¤ì¤ÎDistributionÍѤΤâ¤Î¤¬ÍÑ°Õ¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ç¤³¤ì¤òÍøÍѤ·¤Æ¤â¤Û¤È¤ó¤ÉÌäÂê¤Ê¤¤¤Ç¤·¤ç¤¦¡£ +¿ʬºÇ¿·¤Ç¤¹¡£ + +³ÆDistributionÍѤȤ·¤Æ¤Ï¡¢ +<url url="http://vinelinux.org/" name="Vine Linux">ÍѤËVine Plus¡¢ +<url url="http://www.kondara.org/" name="Kondara MNU/Linux">ÍѤËKondara-Zoo¤Ê¤É¤¬Â¸ºß¤·¤Þ¤¹¡£ +</sect2> +<sect2>Debian Package¤ÎÆþ¼êÀè +<p> +Debian JP¤Îwoody-jp¤Ë¸ºß¤·¤Þ¤¹¡£ +</sect2> +<sect2>FreeBSD ports¤ÎÆþ¼êÀè +</sect2> +</sect1> +<sect1>¥á¡¼¥ê¥ó¥°¥ê¥¹¥È<label id="Sylpheed-ML"> +<p> +Sylpheed ¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ï good-day.net ¤Ç±¿ÍѤµ¤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤·¤¿¡£ + +Sylpheed ¤Ë´Ø¤¹¤ëÁ´ÈÌŪ¤ÊÏÃÂê¤ò°·¤¦¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ç¤¹¡£ÆüËܸì +(<url url="sylpheed-jp@good-day.net">) ¤È +±Ñ¸ì (<url url="sylpheed@good-day.net">) ¤Î2¼ïÎब¤¢¤ê¤Þ¤¹¡£ + +°Ê²¼¤Ï <url url="sylpheed-jp@good-day.net"> ¤òÎã¤ËÀâÌÀ¤·¤Þ¤¹¤¬¡¢ +<url url="sylpheed@good-day.net"> ¤Î¾ì¹ç¤ÏŬµ¹ÆɤßÂؤ¨¤Æ¤¯¤À¤µ¤¤ +(sylpheed-jp ¢ª sylpheed, sylpheed-jp-ctl ¢ª sylpheed-ctl)¡£ + +<sect2>»²²ÃÊýË¡ +<p> + +<verb> +subscribe ¤¢¤Ê¤¿¤Î»á̾ +</verb> +¤ÈËÜʸ¤Ë½ñ¤¤¤¿¥á¡¼¥ë¤ò<url url="sylpheed-jp-ctl@good-day.net"> °¸¤ËÁ÷¿®¤·¤Æ¤¯¤À¤µ¤¤¡£ +̾Á°¤ÏȾ³Ñ±Ñ¿ô»ú(¥í¡¼¥Þ»ú)¤¬´üÂÔ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ +¤Þ¤¿Á´³Ñ¥¹¥Ú¡¼¥¹¤Ê¤É¤Î¥³¡¼¥É¤¬¤¢¤ë¤È¥¨¥é¡¼¤Ë¤Ê¤ê¤Þ¤¹¡£ + +¤½¤Î°ìÅÙ¤á¤ÎÅÐÏ¿¥ê¥¯¥¨¥¹¥È¤ËÂФ·¼¡¤Î¤è¤¦¤Ê¥Õ¥ì¡¼¥º(¤³¤Î¿ô»ú¤Ï¤¢¤¯¤Þ¤Ç¤âÎã¤Ç¤¹) +<verb> +confirm 84682771 Anne Shirley +</verb> +¤ò´Þ¤à¡Ø¤³¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤ËÅÐÏ¿¤ò¤·¤Æ¤â¤è¤¤¤«?¡Ù¤È¤¤¤¦³Îǧ¤òµá¤á¤ë¥á¡¼¥ë¤ò°ì +ÅÙÊÖ¤·¤Þ¤¹¡£ +¤³¤ì¤Ï¡Ö¾¡¼ê¤Ë¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤ØÅÐÏ¿¤µ¤ì¤Æ¤·¤Þ¤¦¡×Åù¤Î¤¤¤¿¤º¤é¤Ø¤ÎͽËɺö¤Ç¤¹¡£ + +¤¢¤Ê¤¿¤¬¤³¤Î¥á¡¼¥ê¥ó¥°¥ê¥¹¥È¤Ø¤Î»²²Ã³Îǧ¤Î¥á¡¼¥ë¤ò¼õ¤±¤È¤Ã¤¿¤Ê¤é¡¢ +<verb> +confirm ¥Ñ¥¹¥ï¡¼¥É(¿ô»ú) ¤¢¤Ê¤¿¤Î̾Á° +</verb> +¤³¤Î¥Õ¥ì¡¼¥º¤ò´Þ¤à¥á¡¼¥ë¤ò¤â¤¦°ìÅÙÅÐÏ¿ÍѤΥ¢¥É¥ì¥¹ +<url url="sylpheed-jp-ctl@good-day.net"> +¤ØÁ÷¿®¤·¤Æ²¼¤µ¤¤¡£¤½¤¦¤¹¤ë¤È¤¢¤Ê¤¿¤Î³Îǧ¤¬ÆÀ¤é¤ì¤¿¤È¤ß¤Ê¤·¡¢¥µ¡¼¥Ð¤Ï¤¢¤Ê¤¿¤òÅÐ +Ï¿¤·¤Þ¤¹¡£ + +Åê¹ÆÀè¤Ï <url url="sylpheed-jp@good-day.net"> ¤Ç¤¹¡£ + +Ãí°Õ: ¤â¤·¡¢ +<verb> +confirm ¥Ñ¥¹¥ï¡¼¥É(¿ô»ú) ¤¢¤Ê¤¿¤Î̾Á° +</verb> +¤Î¥á¡¼¥ë¤ò¤Ê¤¯¤·¤Æ¤·¤Þ¤Ã¤¿¤È¤«¡¢Ê¬¤«¤é¤Ê¤¯¤Ê¤Ã¤Æ¤­¤¿¤Î¤ÇºÇ½é¤«¤é¤ä¤ê¤Ê¤ª¤·¤¿¤¤ +¤È¤¤¤¦¾ì¹ç¤Ï¡¢¡ÖºÇ½é¤«¤é¡×¡¢¤Ä¤Þ¤ê +<verb> +subscribe Anne Shirley +</verb> +¤òÁ÷¤ë¤³¤È¤«¤é¤ä¤êľ¤·¤Æ²¼¤µ¤¤¡£ + +<sect2>Âà²ñÊýË¡ +<p> +<verb> +unsubscribe +</verb> +¤ÈËÜʸ¤Ë½ñ¤¤¤¿¥á¡¼¥ë¤ò <url url="sylpheed-jp-ctl@good-day.net"> °¸¤ËÁ÷¿®¤·¤Æ¤¯¤À¤µ¤¤¡£ + +²áµî¥í¥°¤Ï<url url="http://www.tmtm.org/sylpheed/ml/">¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>Anonymous CVS +<p> +Sylpheed¤Î³«È¯¤Ë¤ÏCVS¤¬ÍøÍѤµ¤ì¤Æ¤¤¤Þ¤¹¡£ +CVS¤ÎÀâÌÀ¤Ë´Ø¤·¤Æ¤Ï¡¢ +<url url="http://kahori.com/j-cvsbook/">¤Ê¤É¤Î¥µ¥¤¥È¤ä½ñÀÒ¤ò»²¹Í¤Ë¤·¤Æ¤¯¤À¤µ¤¤¡£ + +CVS¤«¤éºÇ¿·¤ÎSylpheed¤òÆþ¼ê¤¹¤ë¤Ë¤Ï, +´Ä¶­ÊÑ¿ôCVSROOT¤Ë:pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ +(cvs¤Î-d¥ª¥×¥·¥ç¥ó¤ÇľÀÜ»ØÄꤹ¤ë¾ì¹ç¤ÏɬÍפ¢¤ê¤Þ¤»¤ó) +<verb> +csh·Ï: + setenv CVSROOT :pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed +sh·Ï(bash¤Ê¤É): + export CVSROOT=':pserver:anonymous@sylpheed.good-day.net:/cvsroot/sylpheed' +</verb> + +¤½¤Î¸å¡¢ +<verb> +$ cvs login +CVS password: [enter] +</verb> +¤Ç¥í¥°¥¤¥ó¤·¤Þ¤¹¡£password¤Ï̵¤·¤Ç¤¹¡£ + +ŬÅö¤Ê¥Ç¥£¥ì¥¯¥È¥ê¤Ë°ÜÆ°¤·¡¢ +<verb> +$ cvs -z3 checkout sylpheed +</verb> +¤Ç¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê°Ê²¼¤Ësylpheed¤È¤¤¤¦¥½¡¼¥¹¥Ä¥ê¡¼¤¬ºîÀ®¤µ¤ì¤Þ¤¹¡£ + +ºÇ¿·¤Î¥½¡¼¥¹¥Ä¥ê¡¼¤Ë¥¢¥Ã¥×¥Ç¡¼¥È¤¹¤ë¤Ë¤Ï¡¢ +<verb> +$ cvs -z3 update +</verb> +¤ò¼Â¹Ô¤·¤Æ¤¯¤À¤µ¤¤¡£ + +</sect1> +<sect>¤³¤Îʸ½ñ¤Ë¤Ä¤¤¤Æ +<sect1>Copyright notice +<p> +Copyright (C) 2000 Yoichi Imai <yoichi@silver-forest.com>, All rights reserved. +¤³¤Îʸ½ñ¤ÎÃøºî¸¢¤Ïº£°æ ÍÛ°ì <yoichi@silver-forest.com> ¤Ë¤¢¤ê¤Þ¤¹¡£ + +¤¢¤Ê¤¿¤Ï¡¢Free Software Foundation¤¬¸øɽ¤·¤¿GNU General Public License¤Îversion 2 +°¿¤Ï¤½¤ì°Ê¹ß¤Î³Æ¥Ð¡¼¥¸¥ç¥ó¤Î¤¤¤º¤ì¤«¤òÁªÂò¤·¡¢¤½¤Î¥Ð¡¼¥¸¥ç¥ó¤¬Äê¤á¤ë¾ò¹à¤Ë¤·¤¿¤¬¤Ã¤Æ +ËÜʸ½ñ¤òºÆÈÒÉÛ¤Þ¤¿¤ÏÊѹ¹¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ + +¤³¤Îʸ½ñ¤ÏÍ­ÍѤȤϻפ¤¤Þ¤¹¤¬¡¢ÈÒÉۤˤ¢¤¿¤Ã¤Æ¤Ï¡¢»Ô¾ìÀ­µÚ¤ÓÆÃÄêÌÜŪŬ¹çÀ­¤Ë¤Ä¤¤¤Æ¤Î +°ÅÌÛ¤ÎÊݾڤò´Þ¤á¤Æ¡¢¤¤¤«¤Ê¤ëÊݾڤâ¹Ô¤Ê¤¤¤Þ¤»¤ó¡£ +¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤ÏGNU General Public License version 2¤ò¤ªÆɤߤ¯¤À¤µ¤¤¡£ + +¤¢¤Ê¤¿¤Ï¡¢ËÜ¥×¥í¥°¥é¥à¤È°ì½ï¤ËGNU °ìÈ̸øÍ­»ÈÍѵöÂú¤Î¼Ì¤·¤ò¼õ¤±¼è¤Ã¤Æ¤¤ +¤ë¤Ï¤º¤Ç¤¹¡£¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¢Free Software Foundation, Inc., 675 Mass Ave, +Cambridge, MA 02139, USA ¤Ø¼ê»æ¤ò½ñ¤¤¤Æ¤¯¤À¤µ¤¤¡£ + +<sect1>GNU General Public License +<p> +<verb> + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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 + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. +</verb> +</sect1> +<sect1>¤³¤Î¥É¥­¥å¥á¥ó¥È¤ÎºÇ¿·ÈǤÎÆþ¼êÀè +<p> +ºÇ¿·ÈǤÏ, +<url url="http://members.linuxstart.com/~sunnyone/sylpheed-doc/"> +¤«¤éÆþ¼ê¤Ç¤­¤Þ¤¹¡£ + +¤Þ¤¿ +<url url="http://members.linuxstart.com/~sunnyone/sylpheed-doc/sylpheed-doc.tar.bz2"> +¤è¤êºÇ¿·ÈǤΥ¢¡¼¥«¥¤¥Ö¤òÆþ¼ê¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£ +</sect1> +<sect1>¤ª¤ï¤ê¤Ë +<p> +¤³¤Î¥É¥­¥å¥á¥ó¥È¤òÆɤó¤Ç, +¤³¤³¤Ï¤³¤¦¤·¤¿¤Û¤¦¤¬¤¤¤¤¤ó¤¸¤ã¤Ê¤¤¤«, ¤È¸À¤Ã¤¿¤è¤¦¤Ê°Õ¸«¤¬¤¢¤ê¤Þ¤·¤¿¤é, +<htmlurl url="mailto:yoichi@silver-forest.com" name="yoichi@silver-forest.com"> +¤Ø¤ªÁ÷¤ê¤¤¤¿¤À¤±¤ì¤Ð¹¬¤¤¤Ç¤¹¡£ + +¤Þ¤¿, Copyright notice¤Çµö²Ä¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¤Èɽµ­¤·¤Þ¤·¤¿¤¬¡¢ +Linux distribution¤Ë¼ýÏ¿¤¹¤ë¤Ê¤É, Èæ³ÓŪ¿¿ô¤Î¿Í¤ËÆɤޤì¤ë¤³¤È¤¬Í½ÁÛ¤µ¤ì¤ë¾ì¹ç¤Ë¤Ï¡¢ +»ö¸å¤Ç·ë¹½¤Ç¤¹¤Î¤ÇÊó¹ð¤·¤Æ¤¤¤¿¤À¤±¤ì¤Ð¡¢¤³¤Îʸ½ñ¤Î´°À®ÅÙ¤ò¾å¤²¤ë¤³¤È¤¬¤Ç¤­¤ë¤È»×¤¤¤Þ¤¹¡£ + +ËÝÌõ¤Ê¤É¤â´¿·Þ¤Ç¤¹¡£ +<sect1>¹¹¿·ÍúÎò +<p> +<verb> +2000-08-06 Yoichi Imai <yoichi@silver-forest.com> + * Version 0.1 + * ¹¹¿·ÍúÎò¤òÄɲà + * ¥é¥¤¥»¥ó¥¹¤òGPL2¤ËÊѹ¹ +2000-08-06 Yoichi Imai <yoichi@silver-forest.com> + * Version 0.1.2 + * KMail¤ÎÃí°Õ½ñ¤­¤òÄɲà + * ¶çÅÀ¤Î¥Ý¥ê¥·¡¼¤òÊѹ¹ + +2000-09-13 Yoichi Imai <yoichi@silver-forest.com> + * Version 0.1.3 + * ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®Éôʬ¤òµ­½Ò + * ¥¢¥«¥¦¥ó¥ÈÀßÄê¤ÇCc, Bcc, Reply-To¥Õ¥£¡¼¥ë¥É¼«Æ°»ØÄê¤Îµ­½Ò + +2000-09-27 Yoichi Imai <yoichi@silver-forest.com> + * Version 0.2 + * Hiro's page¤òÊѹ¹ + * imlib, faces¤ÎÃí°Õ½ñ¤­¤òÄɲà + * sylpheed/devel¥Ç¥£¥ì¥¯¥È¥ê¤Î¸ºß¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò¤òºï½ü + * cvs¤Ë¤Ä¤¤¤Æ¤Îµ­½Ò + * ¥¿¥°->Í×ÁÇ + * ¿¶¤êʬ¤±¤ÎÀßÄê + * Á´È̤ÎÀßÄê + * FAQ¤Ëgtkrc¤ÎÀßÄê, ¥·¥ç¡¼¥È¥«¥Ã¥È¥­¡¼¤ÎÊѹ¹¤òÄɲà + * µ¡Ç½¤òÄɲà + * Æ°ºî³Îǧ´Ä¶­¤òÄɲà + * ¤Ê¤·(¥í¡¼¥«¥ë)¤òÄɲà + * ³°Éô¥¨¥Ç¥£¥¿¤Î»È¤¤Êý¤òµ­½Ò +2000-09-27 Yoichi Imai <yoichi@silver-forest.com> + * Version 0.2.1 + * ¼õ¿®»þ¤Îtypo¤ò½¤Àµ + * ctrl+n,p + * $HOME +2000-11-09 Yoichi Imai <yoichi@silver-forest.com> + * Version 0.2.2 + * ML¤Î°ÆÆâ¤òÊѹ¹ + * ChangeLog¤Î·Á¼°¤òÊѹ¹ +</verb> +</sect1> +</sect> +</article> diff --git a/install-sh b/install-sh new file mode 100644 index 000000000..e9de23842 --- /dev/null +++ b/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# 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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/intl/ChangeLog b/intl/ChangeLog new file mode 100644 index 000000000..198950159 --- /dev/null +++ b/intl/ChangeLog @@ -0,0 +1,1086 @@ +1998-04-29 Ulrich Drepper <drepper@cygnus.com> + + * intl/localealias.c (read_alias_file): Use unsigned char for + local variables. Remove unused variable tp. + * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char * + for type of codeset. For loosing Solaris systems. + * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset. + * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable + len if not needed. + Patches by Jim Meyering. + +1998-04-28 Ulrich Drepper <drepper@cygnus.com> + + * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if + mmap is not supported. + + * hash-string.h: Don't include <values.h>. + +1998-04-27 Ulrich Drepper <drepper@cygnus.com> + + * textdomain.c: Use strdup is available. + + * localealias.c: Define HAVE_MEMPCPY so that we can use this + function. Define and use semapahores to protect modfication of + global objects when compiling for glibc. Add code to allow + freeing alias table. + + * l10nflist.c: Don't assume stpcpy not being a macro. + + * gettextP.h: Define internal_function macri if not already done. + Use glibc byte-swap macros instead of defining SWAP when compiled + for glibc. + (struct loaded_domain): Add elements to allow unloading. + + * Makefile.in (distclean): Don't remove libintl.h here. + + * bindtextdomain.c: Carry over changes from glibc. Use strdup if + available. + + * dcgettext.c: Don't assume stpcpy not being a macro. Mark internal + functions. Add memory freeing code for glibc. + + * dgettext.c: Update copyright. + + * explodename.c: Include stdlib.h and string.h only if they exist. + Use strings.h eventually. + + * finddomain.c: Mark internal functions. Use strdup if available. + Add memory freeing code for glibc. + +1997-10-10 20:00 Ulrich Drepper <drepper@cygnus.com> + + * libgettext.h: Fix dummy textdomain and bindtextdomain macros. + They should return reasonable values. + Reported by Tom Tromey <tromey@cygnus.com>. + +1997-09-16 03:33 Ulrich Drepper <drepper@cygnus.com> + + * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined. + * intlh.inst.in: Likewise. + Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>. + + * libintl.glibc: Update from current glibc version. + +1997-09-06 02:10 Ulrich Drepper <drepper@cygnus.com> + + * intlh.inst.in: Reformat copyright. + +1997-08-19 15:22 Ulrich Drepper <drepper@cygnus.com> + + * dcgettext.c (DCGETTEXT): Remove wrong comment. + +1997-08-16 00:13 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (install-data): Don't change directory to install. + +1997-08-01 14:30 Ulrich Drepper <drepper@cygnus.com> + + * cat-compat.c: Fix copyright. + + * localealias.c: Don't define strchr unless !HAVE_STRCHR. + + * loadmsgcat.c: Update copyright. Fix typos. + + * l10nflist.c: Don't define strchr unless !HAVE_STRCHR. + (_nl_make_l10nflist): Handle sponsor and revision correctly. + + * gettext.c: Update copyright. + * gettext.h: Likewise. + * hash-string.h: Likewise. + + * finddomain.c: Remoave dead code. Define strchr only if + !HAVE_STRCHR. + + * explodename.c: Include <sys/types.h>. + + * explodename.c: Reformat copyright text. + (_nl_explode_name): Fix typo. + + * dcgettext.c: Define and use __set_errno. + (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is + not defined. + + * bindtextdom.c: Pretty printing. + +1997-05-01 02:25 Ulrich Drepper <drepper@cygnus.com> + + * dcgettext.c (guess_category_value): Don't depend on + HAVE_LC_MESSAGES. We don't need the macro here. + Patch by Bruno Haible <haible@ilog.fr>. + + * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL + macro. Instead use HAVE_LOCALE_NULL and define it when using + glibc, as in dcgettext.c. + Patch by Bruno Haible <haible@ilog.fr>. + + * Makefile.in (CPPFLAGS): New variable. Reported by Franc,ois + Pinard. + +Mon Mar 10 06:51:17 1997 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in: Implement handling of libtool. + + * gettextP.h: Change data structures for use of generic lowlevel + i18n file handling. + +Wed Dec 4 20:21:18 1996 Ulrich Drepper <drepper@cygnus.com> + + * textdomain.c: Put parentheses around arguments of memcpy macro + definition. + * localealias.c: Likewise. + * l10nflist.c: Likewise. + * finddomain.c: Likewise. + * bindtextdom.c: Likewise. + Reported by Thomas Esken. + +Mon Nov 25 22:57:51 1996 Ulrich Drepper <drepper@cygnus.com> + + * textdomain.c: Move definition of `memcpy` macro to right + position. + +Fri Nov 22 04:01:58 1996 Ulrich Drepper <drepper@cygnus.com> + + * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using + bcopy if not already defined. Reported by Thomas Esken. + * bindtextdom.c: Likewise. + * l10nflist.c: Likewise. + * localealias.c: Likewise. + * textdomain.c: Likewise. + +Tue Oct 29 11:10:27 1996 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (libdir): Change to use exec_prefix instead of + prefix. Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>. + +Sat Aug 31 03:07:09 1996 Ulrich Drepper <drepper@cygnus.com> + + * l10nflist.c (_nl_normalize_codeset): We convert to lower case, + so don't prepend uppercase `ISO' for only numeric arg. + +Fri Jul 19 00:15:46 1996 Ulrich Drepper <drepper@cygnus.com> + + * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after + definition of _GNU_SOURCE. Patch by Roland McGrath. + + * Makefile.in (uninstall): Fix another bug with `for' loop and + empty arguments. Patch by Jim Meyering. Correct name os + uninstalled files: no intl- prefix anymore. + + * Makefile.in (install-data): Again work around shells which + cannot handle mpty for list. Reported by Jim Meyering. + +Sat Jul 13 18:11:35 1996 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (install): Split goal. Now depend on install-exec + and install-data. + (install-exec, install-data): New goals. Created from former + install goal. + Reported by Karl Berry. + +Sat Jun 22 04:58:14 1996 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (MKINSTALLDIRS): New variable. Path to + mkinstalldirs script. + (install): use MKINSTALLDIRS variable or if the script is not present + try to find it in the $top_scrdir). + +Wed Jun 19 02:56:56 1996 Ulrich Drepper <drepper@cygnus.com> + + * l10nflist.c: Linux libc *partly* includes the argz_* functions. + Grr. Work around by renaming the static version and use macros + for renaming. + +Tue Jun 18 20:11:17 1996 Ulrich Drepper <drepper@cygnus.com> + + * l10nflist.c: Correct presence test macros of __argz_* functions. + + * l10nflist.c: Include <argz.h> based on test of it instead when + __argz_* functions are available. + Reported by Andreas Schwab. + +Thu Jun 13 15:17:44 1996 Ulrich Drepper <drepper@cygnus.com> + + * explodename.c, l10nflist.c: Define NULL for dumb systems. + +Tue Jun 11 17:05:13 1996 Ulrich Drepper <drepper@cygnus.com> + + * intlh.inst.in, libgettext.h (dcgettext): Rename local variable + result to __result to prevent name clash. + + * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to + get prototype for stpcpy and strcasecmp. + + * intlh.inst.in, libgettext.h: Move declaration of + `_nl_msg_cat_cntr' outside __extension__ block to prevent warning + from gcc's -Wnested-extern option. + +Fri Jun 7 01:58:00 1996 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (install): Remove comment. + +Thu Jun 6 17:28:17 1996 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (install): Work around for another Buglix stupidity. + Always use an `else' close for `if's. Reported by Nelson Beebe. + + * Makefile.in (intlh.inst): Correct typo in phony rule. + Reported by Nelson Beebe. + +Thu Jun 6 01:49:52 1996 Ulrich Drepper <drepper@cygnus.com> + + * dcgettext.c (read_alias_file): Rename variable alloca_list to + block_list as the macro calls assume. + Patch by Eric Backus. + + * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using + malloc. + (read_alias_file): Rename varriabe alloca_list to block_list as the + macro calls assume. + Patch by Eric Backus. + + * l10nflist.c: Correct conditional for <argz.h> inclusion. + Reported by Roland McGrath. + + * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not + all-@USE_NLS@. + + * Makefile.in (install): intlh.inst comes from local dir, not + $(srcdir). + + * Makefile.in (intlh.inst): Special handling of this goal. If + used in gettext, this is really a rul to construct this file. If + used in any other package it is defined as a .PHONY rule with + empty body. + + * finddomain.c: Extract locale file information handling into + l10nfile.c. Rename local stpcpy__ function to stpcpy. + + * dcgettext.c (stpcpy): Add local definition. + + * l10nflist.c: Solve some portability problems. Patches partly by + Thomas Esken. Add local definition of stpcpy. + +Tue Jun 4 02:47:49 1996 Ulrich Drepper <drepper@cygnus.com> + + * intlh.inst.in: Don't depend including <locale.h> on + HAVE_LOCALE_H. Instead configure must rewrite this fiile + depending on the result of the configure run. + + * Makefile.in (install): libintl.inst is now called intlh.inst. + Add rules for updating intlh.inst from intlh.inst.in. + + * libintl.inst: Renamed to intlh.inst.in. + + * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1 + because gcc has __buitlin_alloca. + Reported by Roland McGrath. + +Mon Jun 3 00:32:16 1996 Ulrich Drepper <drepper@cygnus.com> + + * Makefile.in (installcheck): New goal to fulfill needs of + automake's distcheck. + + * Makefile.in (install): Reorder commands so that VERSION is + found. + + * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in + @datadir@/gettext. + (COMSRCS): Add l10nfile.c. + (OBJECTS): Add l10nfile.o. + (DISTFILES): Rename to DISTFILE.normal. Remove $(DISTFILES.common). + (DISTFILE.gettext): Remove $(DISTFILES.common). + (all-gettext): Remove goal. + (install): If $(PACKAGE) = gettext install, otherwose do nothing. No + package but gettext itself should install libintl.h + headers. + (dist): Extend goal to work for gettext, too. + (dist-gettext): Remove goal. + + * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc. + +Sun Jun 2 17:33:06 1996 Ulrich Drepper <drepper@cygnus.com> + + * loadmsgcat.c (_nl_load_domain): Parameter is now comes from + find_l10nfile. + +Sat Jun 1 02:23:03 1996 Ulrich Drepper <drepper@cygnus.com> + + * l10nflist.c (__argz_next): Add definition. + + * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca + code. Use new l10nfile handling. + + * localealias.c [!HAVE_ALLOCA]: Add code for handling missing + alloca code. + + * l10nflist.c: Initial revision. + +Tue Apr 2 18:51:18 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-gettext): New goal. Same as all-yes. + +Thu Mar 28 23:01:22 1996 Karl Eichwalder <ke@ke.central.de> + + * Makefile.in (gettextsrcdir): Define using @datadir@. + +Tue Mar 26 12:39:14 1996 Ulrich Drepper <drepper@myware> + + * finddomain.c: Include <ctype.h>. Reported by Roland McGrath. + +Sat Mar 23 02:00:35 1996 Ulrich Drepper <drepper@myware> + + * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing + with external declaration. + +Sat Mar 2 00:47:09 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all-no): Rename from all_no. + +Sat Feb 17 00:25:59 1996 Ulrich Drepper <drepper@myware> + + * gettextP.h [loaded_domain]: Array `successor' must now contain up + to 63 elements (because of codeset name normalization). + + * finddomain.c: Implement codeset name normalization. + +Thu Feb 15 04:39:09 1996 Ulrich Drepper <drepper@myware> + + * Makefile.in (all): Define to `all-@USE_NLS@'. + (all-yes, all_no): New goals. `all-no' is noop, `all-yes' + is former all. + +Mon Jan 15 21:46:01 1996 Howard Gayle <howard@hal.com> + + * localealias.c (alias_compare): Increment string pointers in loop + of strcasecmp replacement. + +Fri Dec 29 21:16:34 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): Who commented this goal out ? :-) + +Fri Dec 29 15:08:16 1995 Ulrich Drepper <drepper@myware> + + * dcgettext.c (DCGETTEXT): Save `errno'. Failing system calls + should not effect it because a missing catalog is no error. + Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>. + +Tue Dec 19 22:09:13 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (Makefile): Explicitly use $(SHELL) for running + shell scripts. + +Fri Dec 15 17:34:59 1995 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> + + * Makefile.in (install-src): Only install library and header when + we use the own implementation. Don't do it when using the + system's gettext or catgets functions. + + * dcgettext.c (find_msg): Must not swap domain->hash_size here. + +Sat Dec 9 16:24:37 1995 Ulrich Drepper <drepper@myware> + + * localealias.c, libintl.inst, libgettext.h, hash-string.h, + gettextP.h, finddomain.c, dcgettext.c, cat-compat.c: + Use PARAMS instead of __P. Suggested by Roland McGrath. + +Tue Dec 5 11:39:14 1995 Larry Schwimmer <rosebud@cyclone.stanford.edu> + + * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if + !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty. + +Mon Dec 4 15:42:07 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): + Install libintl.inst instead of libintl.h.install. + +Sat Dec 2 22:51:38 1995 Marcus Daniels <marcus@sysc.pdx.edu> + + * cat-compat.c (textdomain): + Reverse order in which files are tried you load. First + try local file, when this failed absolute path. + +Wed Nov 29 02:03:53 1995 Nelson H. F. Beebe <beebe@math.utah.edu> + + * cat-compat.c (bindtextdomain): Add missing { }. + +Sun Nov 26 18:21:41 1995 Ulrich Drepper <drepper@myware> + + * libintl.inst: Add missing __P definition. Reported by Nelson Beebe. + + * Makefile.in: + Add dummy `all' and `dvi' goals. Reported by Tom Tromey. + +Sat Nov 25 16:12:01 1995 Franc,ois Pinard <pinard@iro.umontreal.ca> + + * hash-string.h: Capitalize arguments of macros. + +Sat Nov 25 12:01:36 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Prevent files names longer than 13 + characters. libintl.h.glibc->libintl.glibc, + libintl.h.install->libintl.inst. Reported by Joshua R. Poulson. + +Sat Nov 25 11:31:12 1995 Eric Backus <ericb@lsid.hp.com> + + * dcgettext.c: Fix bug in preprocessor conditionals. + +Sat Nov 25 02:35:27 1995 Nelson H. F. Beebe <beebe@math.utah.edu> + + * libgettext.h: Solaris cc does not understand + #if !SYMBOL1 && !SYMBOL2. Sad but true. + +Thu Nov 23 16:22:14 1995 Ulrich Drepper <drepper@myware> + + * hash-string.h (hash_string): + Fix for machine with >32 bit `unsigned long's. + + * dcgettext.c (DCGETTEXT): + Fix horrible bug in loop for alternative translation. + +Thu Nov 23 01:45:29 1995 Ulrich Drepper <drepper@myware> + + * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed: + Some further simplifications in message number generation. + +Mon Nov 20 21:08:43 1995 Ulrich Drepper <drepper@myware> + + * libintl.h.glibc: Use __const instead of const in prototypes. + + * Makefile.in (install-src): + Install libintl.h.install instead of libintl.h. This + is a stripped-down version. Suggested by Peter Miller. + + * libintl.h.install, libintl.h.glibc: Initial revision. + + * localealias.c (_nl_expand_alias, read_alias_file): + Protect prototypes in type casts by __P. + +Tue Nov 14 16:43:58 1995 Ulrich Drepper <drepper@myware> + + * hash-string.h: Correct prototype for hash_string. + +Sun Nov 12 12:42:30 1995 Ulrich Drepper <drepper@myware> + + * hash-string.h (hash_string): Add prototype. + + * gettextP.h: Fix copyright. + (SWAP): Add prototype. + +Wed Nov 8 22:56:33 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (read_alias_file): Forgot sizeof. + Avoid calling *printf function. This introduces a big overhead. + Patch by Roland McGrath. + +Tue Nov 7 14:21:08 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy. + + * finddomain.c (stpcpy): + Define substitution function local. The macro was to flaky. + + * cat-compat.c: Fix typo. + + * xopen-msg.sed, linux-msg.sed: + While bringing message number to right place only accept digits. + + * linux-msg.sed, xopen-msg.sed: Now that the counter does not have + leading 0s we don't need to remove them. Reported by Marcus + Daniels. + + * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in + dependency. Reported by Marcus Daniels. + + * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement. + Generally cleanup using #if instead of #ifndef. + + * Makefile.in: Correct typos in comment. By Franc,ois Pinard. + +Mon Nov 6 00:27:02 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (install-src): Don't install libintl.h and libintl.a + if we use an available gettext implementation. + +Sun Nov 5 22:02:08 1995 Ulrich Drepper <drepper@myware> + + * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS. Reported + by Franc,ois Pinard. + + * libgettext.h: Use #if instead of #ifdef/#ifndef. + + * finddomain.c: + Comments describing what has to be done should start with FIXME. + +Sun Nov 5 19:38:01 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Split. Use DISTFILES with normal meaning. + DISTFILES.common names the files common to both dist goals. + DISTFILES.gettext are the files only distributed in GNU gettext. + +Sun Nov 5 17:32:54 1995 Ulrich Drepper <drepper@myware> + + * dcgettext.c (DCGETTEXT): Correct searching in derived locales. + This was necessary since a change in _nl_find_msg several weeks + ago. I really don't know this is still not fixed. + +Sun Nov 5 12:43:12 1995 Ulrich Drepper <drepper@myware> + + * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL. This + might mark a special condition. + + * finddomain.c (make_entry_rec): Don't make illegal entry as decided. + + * Makefile.in (dist): Suppress error message when ln failed. + Get files from $(srcdir) explicitly. + + * libgettext.h (gettext_const): Rename to gettext_noop. + +Fri Nov 3 07:36:50 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (make_entry_rec): + Protect against wrong locale names by testing mask. + + * libgettext.h (gettext_const): Add macro definition. + Capitalize macro arguments. + +Thu Nov 2 23:15:51 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (_nl_find_domain): + Test for pointer != NULL before accessing value. + Reported by Tom Tromey. + + * gettext.c (NULL): + Define as (void*)0 instad of 0. Reported by Franc,ois Pinard. + +Mon Oct 30 21:28:52 1995 Ulrich Drepper <drepper@myware> + + * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering. + +Sat Oct 28 23:20:47 1995 Ulrich Drepper <drepper@myware> + + * libgettext.h: Disable dcgettext optimization for Solaris 2.3. + + * localealias.c (alias_compare): + Peter Miller reported that tolower in some systems is + even dumber than I thought. Protect call by `isupper'. + +Fri Oct 27 22:22:51 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (libdir, includedir): New variables. + (install-src): Install libintl.a and libintl.h in correct dirs. + +Fri Oct 27 22:07:29 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c. + + * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques. + + * localealias.c: + Fix typo and superflous test. Reported by Christian von Roques. + +Fri Oct 6 11:52:05 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (_nl_find_domain): + Correct some remainder from the pre-CEN syntax. Now + we don't have a constant number of successors anymore. + +Wed Sep 27 21:41:13 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): Add libintl.h.glibc. + + * Makefile.in (dist-libc): Add goal for packing sources for glibc. + (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc. + + * loadmsgcat.c: Forget to continue #if line. + + * localealias.c: + [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name + space clean. + + * dcgettext.c, finddomain.c: Better comment to last change. + + * loadmsgcat.c: + [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to + __fstat, __open, __close, __read, __mmap, and __munmap resp + to keep ANSI C name space clean. + + * finddomain.c: + [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean. + + * dcgettext.c: + [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to + keep ANSI C name space clean. + + * libgettext.h: + Include sys/types.h for those old SysV systems out there. + Reported by Francesco Potorti`. + + * loadmsgcat.c (use_mmap): Define if compiled for glibc. + + * bindtextdom.c: Include all those standard headers + unconditionally if _LIBC is defined. + + * finddomain.c: Fix 2 times defiend -> defined. + + * textdomain.c: Include libintl.h instead of libgettext.h when + compiling for glibc. Include all those standard headers + unconditionally if _LIBC is defined. + + * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc. + + * gettext.c: + Include libintl.h instead of libgettext.h when compiling for glibc. + Get NULL from stddef.h if we compile for glibc. + + * finddomain.c: Include libintl.h instead of libgettext.h when + compiling for glibc. Include all those standard headers + unconditionally if _LIBC is defined. + + * dcgettext.c: Include all those standard headers unconditionally + if _LIBC is defined. + + * dgettext.c: If compiled in glibc include libintl.h instead of + libgettext.h. + (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc. + + * dcgettext.c: If compiled in glibc include libintl.h instead of + libgettext.h. + (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc. + + * bindtextdom.c: + If compiled in glibc include libintl.h instead of libgettext.h. + +Mon Sep 25 22:23:06 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0. + Reported by Marcus Daniels. + + * cat-compat.c (bindtextdomain): + String used in putenv must not be recycled. + Reported by Marcus Daniels. + + * libgettext.h (__USE_GNU_GETTEXT): + Additional symbol to signal that we use GNU gettext + library. + + * cat-compat.c (bindtextdomain): + Fix bug with the strange stpcpy replacement. + Reported by Nelson Beebe. + +Sat Sep 23 08:23:51 1995 Ulrich Drepper <drepper@myware> + + * cat-compat.c: Include <string.h> for stpcpy prototype. + + * localealias.c (read_alias_file): + While expand strdup code temporary variable `cp' hided + higher level variable with same name. Rename to `tp'. + + * textdomain.c (textdomain): + Avoid warning by using temporary variable in strdup code. + + * finddomain.c (_nl_find_domain): Remove unused variable `application'. + +Thu Sep 21 15:51:44 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (alias_compare): + Use strcasecmp() only if available. Else use + implementation in place. + + * intl-compat.c: + Wrapper functions now call *__ functions instead of __*. + + * libgettext.h: Declare prototypes for *__ functions instead for __*. + + * cat-compat.c, loadmsgcat.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + + * bindtextdom.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + Rename to bindtextdomain__ if not used in GNU C Library. + + * dgettext.c: + Rename function to dgettext__ if not used in GNU C Library. + + * gettext.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + Functions now called gettext__ if not used in GNU C Library. + + * dcgettext.c, localealias.c, textdomain.c, finddomain.c: + Don't use xmalloc, xstrdup, and stpcpy. These functions are not part + of the standard libc and so prevent libintl.a from being used + standalone. + +Sun Sep 17 23:14:49 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c: Correct some bugs in handling of CEN standard + locale definitions. + +Thu Sep 7 01:49:28 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c: Implement CEN syntax. + + * gettextP.h (loaded_domain): Extend number of successors to 31. + +Sat Aug 19 19:25:29 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (aliaspath): Remove path to X11 locale dir. + + * Makefile.in: Make install-src depend on install. This helps + gettext to install the sources and other packages can use the + install goal. + +Sat Aug 19 15:19:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (uninstall): Remove stuff installed by install-src. + +Tue Aug 15 13:13:53 1995 Ulrich Drepper <drepper@myware> + + * VERSION.in: Initial revision. + + * Makefile.in (DISTFILES): + Add VERSION file. This is not necessary for gettext, but + for other packages using this library. + +Tue Aug 15 06:16:44 1995 Ulrich Drepper <drepper@myware> + + * gettextP.h (_nl_find_domain): + New prototype after changing search strategy. + + * finddomain.c (_nl_find_domain): + We now try only to find a specified catalog. Fall back to other + catalogs listed in the locale list is now done in __dcgettext. + + * dcgettext.c (__dcgettext): + Now we provide message fall back even to different languages. + I.e. if a message is not available in one language all the other + in the locale list a tried. Formerly fall back was only possible + within one language. Implemented by moving one loop from + _nl_find_domain to here. + +Mon Aug 14 23:45:50 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (gettextsrcdir): + Directory where source of GNU gettext library are made + available. + (INSTALL, INSTALL_DATA): Programs used for installing sources. + (gettext-src): New. Rule to install GNU gettext sources for use in + gettextize shell script. + +Sun Aug 13 14:40:48 1995 Ulrich Drepper <drepper@myware> + + * loadmsgcat.c (_nl_load_domain): + Use mmap for loading only when munmap function is + also available. + + * Makefile.in (install): Depend on `all' goal. + +Wed Aug 9 11:04:33 1995 Ulrich Drepper <drepper@myware> + + * localealias.c (read_alias_file): + Do not overwrite '\n' when terminating alias value string. + + * localealias.c (read_alias_file): + Handle long lines. Ignore the rest not fitting in + the buffer after the initial `fgets' call. + +Wed Aug 9 00:54:29 1995 Ulrich Drepper <drepper@myware> + + * gettextP.h (_nl_load_domain): + Add prototype, replacing prototype for _nl_load_msg_cat. + + * finddomain.c (_nl_find_domain): + Remove unneeded variable filename and filename_len. + (expand_alias): Remove prototype because functions does not + exist anymore. + + * localealias.c (read_alias_file): + Change type of fname_len parameter to int. + (xmalloc): Add prototype. + + * loadmsgcat.c: Better prototypes for xmalloc. + +Tue Aug 8 22:30:39 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (_nl_find_domain): + Allow alias name to be constructed from the four components. + + * Makefile.in (aliaspath): New variable. Set to preliminary value. + (SOURCES): Add localealias.c. + (OBJECTS): Add localealias.o. + + * gettextP.h: Add prototype for _nl_expand_alias. + + * finddomain.c: Aliasing handled in intl/localealias.c. + + * localealias.c: Aliasing for locale names. + + * bindtextdom.c: Better prototypes for xmalloc and xstrdup. + +Mon Aug 7 23:47:42 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): gettext.perl is now found in misc/. + + * cat-compat.c (bindtextdomain): + Correct implementation. dirname parameter was not used. + Reported by Marcus Daniels. + + * gettextP.h (loaded_domain): + New fields `successor' and `decided' for oo, lazy + message handling implementation. + + * dcgettext.c: + Adopt for oo, lazy message handliing. + Now we can inherit translations from less specific locales. + (find_msg): New function. + + * loadmsgcat.c, finddomain.c: + Complete rewrite. Implement oo, lazy message handling :-). + We now have an additional environment variable `LANGUAGE' with + a higher priority than LC_ALL for the LC_MESSAGE locale. + Here we can set a colon separated list of specifications each + of the form `language[_territory[.codeset]][@modifier]'. + +Sat Aug 5 09:55:42 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (unistd.h): + Include to get _PC_PATH_MAX defined on system having it. + +Fri Aug 4 22:42:00 1995 Ulrich Drepper <drepper@myware> + + * finddomain.c (stpcpy): Include prototype. + + * Makefile.in (dist): Remove `copying instead' message. + +Wed Aug 2 18:52:03 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ID, TAGS): Do not use $^. + +Tue Aug 1 20:07:11 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (TAGS, ID): Use $^ as command argument. + (TAGS): Give etags -o option t write to current directory, + not $(srcdir). + (ID): Use $(srcdir) instead os $(top_srcdir)/src. + (distclean): Remove ID. + +Sun Jul 30 11:51:46 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (gnulocaledir): + New variable, always using share/ for data directory. + (DEFS): Add GNULOCALEDIR, used in finddomain.c. + + * finddomain.c (_nl_default_dirname): + Set to GNULOCALEDIR, because it always has to point + to the directory where GNU gettext Library writes it to. + + * intl-compat.c (textdomain, bindtextdomain): + Undefine macros before function definition. + +Sat Jul 22 01:10:02 1995 Ulrich Drepper <drepper@myware> + + * libgettext.h (_LIBINTL_H): + Protect definition in case where this file is included as + libgettext.h on Solaris machines. Add comment about this. + +Wed Jul 19 02:36:42 1995 Ulrich Drepper <drepper@myware> + + * intl-compat.c (textdomain): Correct typo. + +Wed Jul 19 01:51:35 1995 Ulrich Drepper <drepper@myware> + + * dcgettext.c (dcgettext): Function now called __dcgettext. + + * dgettext.c (dgettext): Now called __dgettext and calls + __dcgettext. + + * gettext.c (gettext): + Function now called __gettext and calls __dgettext. + + * textdomain.c (textdomain): Function now called __textdomain. + + * bindtextdom.c (bindtextdomain): Function now called + __bindtextdomain. + + * intl-compat.c: Initial revision. + + * Makefile.in (SOURCES): Add intl-compat.c. + (OBJECTS): We always compile the GNU gettext library functions. + OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o, + and intl-compat.o. + (GETTOBJS): Contains now only intl-compat.o. + + * libgettext.h: + Re-include protection matches dualistic character of libgettext.h. + For all functions in GNU gettext library define __ counter part. + + * finddomain.c (strchr): Define as index if not found in C library. + (_nl_find_domain): For relative paths paste / in between. + +Tue Jul 18 16:37:45 1995 Ulrich Drepper <drepper@myware> + + * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h. + + * xopen-msg.sed: Fix bug with `msgstr ""' lines. + A little bit better comments. + +Tue Jul 18 01:18:27 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: + po-mode.el, makelinks, combine-sh are now found in ../misc. + + * po-mode.el, makelinks, combine-sh, elisp-comp: + Moved to ../misc/. + + * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__. + +Sun Jul 16 22:33:02 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (INSTALL, INSTALL_DATA): New variables. + (install-data, uninstall): Install/uninstall .elc file. + + * po-mode.el (Installation comment): + Add .pox as possible extension of .po files. + +Sun Jul 16 13:23:27 1995 Ulrich Drepper <drepper@myware> + + * elisp-comp: Complete new version by Franc,ois: This does not + fail when not compiling in the source directory. + +Sun Jul 16 00:12:17 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (../po/cat-id-tbl.o): + Use $(MAKE) instead of make for recursive make. + + * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh. + (install-exec): Add missing dummy goal. + (install-data, uninstall): @ in multi-line shell command at + beginning, not in front of echo. Reported by Eric Backus. + +Sat Jul 15 00:21:28 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (DISTFILES): + Rename libgettext.perl to gettext.perl to fit in 14 chars + file systems. + + * gettext.perl: + Rename to gettext.perl to fit in 14 chars file systems. + +Thu Jul 13 23:17:20 1995 Ulrich Drepper <drepper@myware> + + * cat-compat.c: If !STDC_HEADERS try to include malloc.h. + +Thu Jul 13 20:55:02 1995 Ulrich Drepper <drepper@myware> + + * po2tbl.sed.in: Pretty printing. + + * linux-msg.sed, xopen-msg.sed: + Correct bugs with handling substitute flags in branches. + + * hash-string.h (hash_string): + Old K&R compilers don't under stand `unsigned char'. + + * gettext.h (nls_uint32): + Some old K&R compilers (eg HP) don't understand `unsigned int'. + + * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes. + +Thu Jul 13 01:34:33 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (ELCFILES): New variable. + (DISTFILES): Add elisp-comp. + Add implicit rule for .el -> .elc compilation. + (install-data): install $ELCFILES + (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp. + + * elisp-comp: Initial revision + +Wed Jul 12 16:14:52 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: + cat-id-tbl.c is now found in po/. This enables us to use an identical + intl/ directory in all packages. + + * dcgettext.c (dcgettext): hashing does not work for table size <= 2. + + * textdomain.c: fix typo (#if def -> #if defined) + +Tue Jul 11 18:44:43 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in (stamp-cat-id): use top_srcdir to address source files + (DISTFILES,distclean): move tupdate.perl to src/ + + * po-to-tbl.sed.in: + add additional jump to clear change flag to recognize multiline strings + +Tue Jul 11 01:32:50 1995 Ulrich Drepper <drepper@myware> + + * textdomain.c: Protect inclusion of stdlib.h and string.h. + + * loadmsgcat.c: Protect inclusion of stdlib.h. + + * libgettext.h: Protect inclusion of locale.h. + Allow use in C++ programs. + Define NULL is not happened already. + + * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of + po-to-tbl.sed. + (distclean): remove po-to-tbl.sed and tupdate.perl. + + * tupdate.perl.in: Substitute Perl path even in exec line. + Don't include entries without translation from old .po file. + +Tue Jul 4 00:41:51 1995 Ulrich Drepper <drepper@myware> + + * tupdate.perl.in: use "Updated: " in msgid "". + + * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR). + Define getenv if !__STDC__. + + * bindtextdom.c: Protect stdlib.h and string.h inclusion. + Define free if !__STDC__. + + * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. + Define free if !__STDC__. + + * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR. + +Mon Jul 3 23:56:30 1995 Ulrich Drepper <drepper@myware> + + * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR. + Remove unneeded $(srcdir) from Makefile.in dependency. + + * makelinks: Add copyright and short description. + + * po-mode.el: Last version for 0.7. + + * tupdate.perl.in: Fix die message. + + * dcgettext.c: Protect include of string.h. + + * gettext.c: Protect include of stdlib.h and further tries to get NULL. + + * finddomain.c: Some corrections in includes. + + * Makefile.in (INCLUDES): Prune list correct path to Makefile.in. + + * po-to-tbl.sed: Adopt for new .po file format. + + * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format. + +Sun Jul 2 23:55:03 1995 Ulrich Drepper <drepper@myware> + + * tupdate.perl.in: Complete rewrite for new .po file format. + +Sun Jul 2 02:06:50 1995 Ulrich Drepper <drepper@myware> + + * First official release. This directory contains all the code + needed to internationalize own packages. It provides functions + which allow to use the X/Open catgets function with an interface + like the Uniforum gettext function. For system which does not + have neither of those a complete implementation is provided. diff --git a/intl/Makefile.in b/intl/Makefile.in new file mode 100644 index 000000000..4bdb186d2 --- /dev/null +++ b/intl/Makefile.in @@ -0,0 +1,214 @@ +# Makefile for directory with message catalog handling in GNU NLS Utilities. +# Copyright (C) 1995, 1996, 1997 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +top_builddir = .. +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +transform = @program_transform_name@ +libdir = $(exec_prefix)/lib +includedir = $(prefix)/include +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale +gnulocaledir = $(prefix)/share/locale +gettextsrcdir = @datadir@/gettext/intl +aliaspath = $(localedir):. +subdir = intl + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ + +l = @l@ + +AR = ar +CC = @CC@ +LIBTOOL = @LIBTOOL@ +RANLIB = @RANLIB@ + +DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \ +-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@ +CPPFLAGS = @CPPFLAGS@ +CFLAGS = @CFLAGS@ +LDFLAGS = @LDFLAGS@ + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +HEADERS = $(COMHDRS) libgettext.h loadinfo.h +COMHDRS = gettext.h gettextP.h hash-string.h +SOURCES = $(COMSRCS) intl-compat.c cat-compat.c +COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \ +finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \ +explodename.c +OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \ +finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \ +explodename.$lo +CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo +GETTOBJS = intl-compat.$lo +DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \ +xopen-msg.sed $(HEADERS) $(SOURCES) +DISTFILES.normal = VERSION +DISTFILES.gettext = libintl.glibc intlh.inst.in + +.SUFFIXES: +.SUFFIXES: .c .o .lo +.c.o: + $(COMPILE) $< +.c.lo: + $(LIBTOOL) --mode=compile $(COMPILE) $< + +INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib + +all: all-@USE_INCLUDED_LIBINTL@ + +all-yes: libintl.$la intlh.inst +all-no: + +libintl.a: $(OBJECTS) + rm -f $@ + $(AR) cru $@ $(OBJECTS) + $(RANLIB) $@ + +libintl.la: $(OBJECTS) + $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \ + -version-info 1:0 -rpath $(libdir) + +../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot + cd ../po && $(MAKE) cat-id-tbl.$lo + +check: all + +# This installation goal is only used in GNU gettext. Packages which +# only use the library should use install instead. + +# We must not install the libintl.h/libintl.a files if we are on a +# system which has the gettext() function in its C library or in a +# separate library or use the catgets interface. A special case is +# where configure found a previously installed GNU gettext library. +# If you want to use the one which comes with this version of the +# package, you have to use `configure --with-included-gettext'. +install: install-exec install-data +install-exec: all + if test "$(PACKAGE)" = "gettext" \ + && test '@INTLOBJS@' = '$(GETTOBJS)'; then \ + if test -r $(MKINSTALLDIRS); then \ + $(MKINSTALLDIRS) $(libdir) $(includedir); \ + else \ + $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \ + fi; \ + $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \ + $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \ + else \ + : ; \ + fi +install-data: all + if test "$(PACKAGE)" = "gettext"; then \ + if test -r $(MKINSTALLDIRS); then \ + $(MKINSTALLDIRS) $(gettextsrcdir); \ + else \ + $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \ + dists="$(DISTFILES.common)"; \ + for file in $$dists; do \ + $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + dists="$(DISTFILES.common)"; \ + for file in $$dists; do \ + rm -f $(gettextsrcdir)/$$file; \ + done + +info dvi: + +$(OBJECTS): ../config.h libgettext.h +bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h +dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.h + +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) + here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) + +id: ID + +ID: $(HEADERS) $(SOURCES) + here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) + + +mostlyclean: + rm -f *.a *.o *.lo core core.* + +clean: mostlyclean + +distclean: clean + rm -f Makefile ID TAGS po2msg.sed po2tbl.sed + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + + +# GNU gettext needs not contain the file `VERSION' but contains some +# other files which should not be distributed in other packages. +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: Makefile $(DISTFILES) + if test "$(PACKAGE)" = gettext; then \ + additional="$(DISTFILES.gettext)"; \ + else \ + additional="$(DISTFILES.normal)"; \ + fi; \ + for file in $(DISTFILES.common) $$additional; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +dist-libc: + tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc + +Makefile: Makefile.in ../config.status + cd .. \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + +# The dependency for intlh.inst is different in gettext and all other +# packages. Because we cannot you GNU make features we have to solve +# the problem while rewriting Makefile.in. +@GT_YES@intlh.inst: intlh.inst.in ../config.status +@GT_YES@ cd .. \ +@GT_YES@ && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \ +@GT_YES@ $(SHELL) ./config.status +@GT_NO@.PHONY: intlh.inst +@GT_NO@intlh.inst: + +# 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: diff --git a/intl/VERSION b/intl/VERSION new file mode 100644 index 000000000..ee66b0612 --- /dev/null +++ b/intl/VERSION @@ -0,0 +1 @@ +GNU gettext library from gettext-0.10.35 diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c new file mode 100644 index 000000000..d9c3f349e --- /dev/null +++ b/intl/bindtextdom.c @@ -0,0 +1,203 @@ +/* Implementation of the bindtextdomain(3) function + Copyright (C) 1995, 1996, 1997, 1998 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif +#include "gettext.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +/* Contains the default location of the message catalogs. */ +extern const char _nl_default_dirname[]; + +/* List with bindings of specific domains. */ +extern struct binding *_nl_domain_bindings; + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define BINDTEXTDOMAIN __bindtextdomain +# ifndef strdup +# define strdup(str) __strdup (str) +# endif +#else +# define BINDTEXTDOMAIN bindtextdomain__ +#endif + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +char * +BINDTEXTDOMAIN (domainname, dirname) + const char *domainname; + const char *dirname; +{ + struct binding *binding; + + /* Some sanity checks. */ + if (domainname == NULL || domainname[0] == '\0') + return NULL; + + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (dirname == NULL) + /* The current binding has be to returned. */ + return binding == NULL ? (char *) _nl_default_dirname : binding->dirname; + + if (binding != NULL) + { + /* The domain is already bound. If the new value and the old + one are equal we simply do nothing. Otherwise replace the + old binding. */ + if (strcmp (dirname, binding->dirname) != 0) + { + char *new_dirname; + + if (strcmp (dirname, _nl_default_dirname) == 0) + new_dirname = (char *) _nl_default_dirname; + else + { +#if defined _LIBC || defined HAVE_STRDUP + new_dirname = strdup (dirname); + if (new_dirname == NULL) + return NULL; +#else + size_t len = strlen (dirname) + 1; + new_dirname = (char *) malloc (len); + if (new_dirname == NULL) + return NULL; + + memcpy (new_dirname, dirname, len); +#endif + } + + if (binding->dirname != _nl_default_dirname) + free (binding->dirname); + + binding->dirname = new_dirname; + } + } + else + { + /* We have to create a new binding. */ +#if !defined _LIBC && !defined HAVE_STRDUP + size_t len; +#endif + struct binding *new_binding = + (struct binding *) malloc (sizeof (*new_binding)); + + if (new_binding == NULL) + return NULL; + +#if defined _LIBC || defined HAVE_STRDUP + new_binding->domainname = strdup (domainname); + if (new_binding->domainname == NULL) + return NULL; +#else + len = strlen (domainname) + 1; + new_binding->domainname = (char *) malloc (len); + if (new_binding->domainname == NULL) + return NULL; + memcpy (new_binding->domainname, domainname, len); +#endif + + if (strcmp (dirname, _nl_default_dirname) == 0) + new_binding->dirname = (char *) _nl_default_dirname; + else + { +#if defined _LIBC || defined HAVE_STRDUP + new_binding->dirname = strdup (dirname); + if (new_binding->dirname == NULL) + return NULL; +#else + len = strlen (dirname) + 1; + new_binding->dirname = (char *) malloc (len); + if (new_binding->dirname == NULL) + return NULL; + memcpy (new_binding->dirname, dirname, len); +#endif + } + + /* Now enqueue it. */ + if (_nl_domain_bindings == NULL + || strcmp (domainname, _nl_domain_bindings->domainname) < 0) + { + new_binding->next = _nl_domain_bindings; + _nl_domain_bindings = new_binding; + } + else + { + binding = _nl_domain_bindings; + while (binding->next != NULL + && strcmp (domainname, binding->next->domainname) > 0) + binding = binding->next; + + new_binding->next = binding->next; + binding->next = new_binding; + } + + binding = new_binding; + } + + return binding->dirname; +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__bindtextdomain, bindtextdomain); +#endif diff --git a/intl/cat-compat.c b/intl/cat-compat.c new file mode 100644 index 000000000..867d901b8 --- /dev/null +++ b/intl/cat-compat.c @@ -0,0 +1,262 @@ +/* Compatibility code for gettext-using-catgets interface. + Copyright (C) 1995, 1997 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <stdio.h> + +#ifdef STDC_HEADERS +# include <stdlib.h> +# include <string.h> +#else +char *getenv (); +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# endif +#endif + +#ifdef HAVE_NL_TYPES_H +# include <nl_types.h> +#endif + +#include "libgettext.h" + +/* @@ end of prolog @@ */ + +/* XPG3 defines the result of `setlocale (category, NULL)' as: + ``Directs `setlocale()' to query `category' and return the current + setting of `local'.'' + However it does not specify the exact format. And even worse: POSIX + defines this not at all. So we can use this feature only on selected + system (e.g. those using GNU C Library). */ +#ifdef _LIBC +# define HAVE_LOCALE_NULL +#endif + +/* The catalog descriptor. */ +static nl_catd catalog = (nl_catd) -1; + +/* Name of the default catalog. */ +static const char default_catalog_name[] = "messages"; + +/* Name of currently used catalog. */ +static const char *catalog_name = default_catalog_name; + +/* Get ID for given string. If not found return -1. */ +static int msg_to_cat_id PARAMS ((const char *msg)); + +/* Substitution for systems lacking this function in their C library. */ +#if !_LIBC && !HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +#endif + + +/* Set currently used domain/catalog. */ +char * +textdomain (domainname) + const char *domainname; +{ + nl_catd new_catalog; + char *new_name; + size_t new_name_len; + char *lang; + +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \ + && defined HAVE_LOCALE_NULL + lang = setlocale (LC_MESSAGES, NULL); +#else + lang = getenv ("LC_ALL"); + if (lang == NULL || lang[0] == '\0') + { + lang = getenv ("LC_MESSAGES"); + if (lang == NULL || lang[0] == '\0') + lang = getenv ("LANG"); + } +#endif + if (lang == NULL || lang[0] == '\0') + lang = "C"; + + /* See whether name of currently used domain is asked. */ + if (domainname == NULL) + return (char *) catalog_name; + + if (domainname[0] == '\0') + domainname = default_catalog_name; + + /* Compute length of added path element. */ + new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang) + + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1 + + sizeof (".cat"); + + new_name = (char *) malloc (new_name_len); + if (new_name == NULL) + return NULL; + + strcpy (new_name, PACKAGE); + new_catalog = catopen (new_name, 0); + + if (new_catalog == (nl_catd) -1) + { + /* NLSPATH search didn't work, try absolute path */ + sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang, + PACKAGE); + new_catalog = catopen (new_name, 0); + + if (new_catalog == (nl_catd) -1) + { + free (new_name); + return (char *) catalog_name; + } + } + + /* Close old catalog. */ + if (catalog != (nl_catd) -1) + catclose (catalog); + if (catalog_name != default_catalog_name) + free ((char *) catalog_name); + + catalog = new_catalog; + catalog_name = new_name; + + return (char *) catalog_name; +} + +char * +bindtextdomain (domainname, dirname) + const char *domainname; + const char *dirname; +{ +#if HAVE_SETENV || HAVE_PUTENV + char *old_val, *new_val, *cp; + size_t new_val_len; + + /* This does not make much sense here but to be compatible do it. */ + if (domainname == NULL) + return NULL; + + /* Compute length of added path element. If we use setenv we don't need + the first byts for NLSPATH=, but why complicate the code for this + peanuts. */ + new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname) + + sizeof ("/%L/LC_MESSAGES/%N.cat"); + + old_val = getenv ("NLSPATH"); + if (old_val == NULL || old_val[0] == '\0') + { + old_val = NULL; + new_val_len += 1 + sizeof (LOCALEDIR) - 1 + + sizeof ("/%L/LC_MESSAGES/%N.cat"); + } + else + new_val_len += strlen (old_val); + + new_val = (char *) malloc (new_val_len); + if (new_val == NULL) + return NULL; + +# if HAVE_SETENV + cp = new_val; +# else + cp = stpcpy (new_val, "NLSPATH="); +# endif + + cp = stpcpy (cp, dirname); + cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:"); + + if (old_val == NULL) + { +# if __STDC__ + stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat"); +# else + + cp = stpcpy (cp, LOCALEDIR); + stpcpy (cp, "/%L/LC_MESSAGES/%N.cat"); +# endif + } + else + stpcpy (cp, old_val); + +# if HAVE_SETENV + setenv ("NLSPATH", new_val, 1); + free (new_val); +# else + putenv (new_val); + /* Do *not* free the environment entry we just entered. It is used + from now on. */ +# endif + +#endif + + return (char *) domainname; +} + +#undef gettext +char * +gettext (msg) + const char *msg; +{ + int msgid; + + if (msg == NULL || catalog == (nl_catd) -1) + return (char *) msg; + + /* Get the message from the catalog. We always use set number 1. + The message ID is computed by the function `msg_to_cat_id' + which works on the table generated by `po-to-tbl'. */ + msgid = msg_to_cat_id (msg); + if (msgid == -1) + return (char *) msg; + + return catgets (catalog, 1, msgid, (char *) msg); +} + +/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries + for the one equal to msg. If it is found return the ID. In case when + the string is not found return -1. */ +static int +msg_to_cat_id (msg) + const char *msg; +{ + int cnt; + + for (cnt = 0; cnt < _msg_tbl_length; ++cnt) + if (strcmp (msg, _msg_tbl[cnt]._msg) == 0) + return _msg_tbl[cnt]._msg_number; + + return -1; +} + + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif diff --git a/intl/dcgettext.c b/intl/dcgettext.c new file mode 100644 index 000000000..0f7bb4862 --- /dev/null +++ b/intl/dcgettext.c @@ -0,0 +1,655 @@ +/* Implementation of the dcgettext(3) function. + Copyright (C) 1995, 1996, 1997, 1998 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <sys/types.h> + +#if defined __GNUC__ && !defined C_ALLOCA +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if (defined HAVE_ALLOCA_H || defined _LIBC) && !defined C_ALLOCA +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#include <errno.h> +#ifndef errno +extern int errno; +#endif +#ifndef __set_errno +# define __set_errno(val) errno = (val) +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +char *getenv (); +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +# endif +# include <string.h> +#else +# include <strings.h> +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#include "gettext.h" +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif +#include "hash-string.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# define getcwd __getcwd +# ifndef stpcpy +# define stpcpy __stpcpy +# endif +#else +# if !defined HAVE_GETCWD +char *getwd (); +# define getcwd(buf, max) getwd (buf) +# else +char *getcwd (); +# endif +# ifndef HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +# endif +#endif + +/* Amount to increase buffer size by in each try. */ +#define PATH_INCR 32 + +/* The following is from pathmax.h. */ +/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define + PATH_MAX but might cause redefinition warnings when sys/param.h is + later included (as on MORE/BSD 4.3). */ +#if defined(_POSIX_VERSION) || (defined(HAVE_LIMITS_H) && !defined(__GNUC__)) +# include <limits.h> +#endif + +#ifndef _POSIX_PATH_MAX +# define _POSIX_PATH_MAX 255 +#endif + +#if !defined(PATH_MAX) && defined(_PC_PATH_MAX) +# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) +#endif + +/* Don't include sys/param.h if it already has been. */ +#if defined(HAVE_SYS_PARAM_H) && !defined(PATH_MAX) && !defined(MAXPATHLEN) +# include <sys/param.h> +#endif + +#if !defined(PATH_MAX) && defined(MAXPATHLEN) +# define PATH_MAX MAXPATHLEN +#endif + +#ifndef PATH_MAX +# define PATH_MAX _POSIX_PATH_MAX +#endif + +/* XPG3 defines the result of `setlocale (category, NULL)' as: + ``Directs `setlocale()' to query `category' and return the current + setting of `local'.'' + However it does not specify the exact format. And even worse: POSIX + defines this not at all. So we can use this feature only on selected + system (e.g. those using GNU C Library). */ +#ifdef _LIBC +# define HAVE_LOCALE_NULL +#endif + +/* Name of the default domain used for gettext(3) prior any call to + textdomain(3). The default value for this is "messages". */ +const char _nl_default_default_domain[] = "messages"; + +/* Value used as the default domain for gettext(3). */ +const char *_nl_current_default_domain = _nl_default_default_domain; + +/* Contains the default location of the message catalogs. */ +const char _nl_default_dirname[] = GNULOCALEDIR; + +/* List with bindings of specific domains created by bindtextdomain() + calls. */ +struct binding *_nl_domain_bindings; + +/* Prototypes for local functions. */ +static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file, + const char *msgid)) internal_function; +static const char *category_to_name PARAMS ((int category)) internal_function; +static const char *guess_category_value PARAMS ((int category, + const char *categoryname)) + internal_function; + + +/* For those loosing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +/* Nothing has to be done. */ +# define ADD_BLOCK(list, address) /* nothing */ +# define FREE_BLOCKS(list) /* nothing */ +#else +struct block_list +{ + void *address; + struct block_list *next; +}; +# define ADD_BLOCK(list, addr) \ + do { \ + struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ + /* If we cannot get a free block we cannot add the new element to \ + the list. */ \ + if (newp != NULL) { \ + newp->address = (addr); \ + newp->next = (list); \ + (list) = newp; \ + } \ + } while (0) +# define FREE_BLOCKS(list) \ + do { \ + while (list != NULL) { \ + struct block_list *old = list; \ + list = list->next; \ + free (old); \ + } \ + } while (0) +# undef alloca +# define alloca(size) (malloc (size)) +#endif /* have alloca */ + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DCGETTEXT __dcgettext +#else +# define DCGETTEXT dcgettext__ +#endif + +/* Checking whether the binaries runs SUID must be done and glibc provides + easier methods therefore we make a difference here. */ +#ifdef _LIBC +# define ENABLE_SECURE __libc_enable_secure +# define DETERMINE_SECURE +#else +static int enable_secure; +# define ENABLE_SECURE (enable_secure == 1) +# define DETERMINE_SECURE \ + if (enable_secure == 0) \ + { \ + if (getuid () != geteuid () || getgid () != getegid ()) \ + enable_secure = 1; \ + else \ + enable_secure = -1; \ + } +#endif + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +char * +DCGETTEXT (domainname, msgid, category) + const char *domainname; + const char *msgid; + int category; +{ +#ifndef HAVE_ALLOCA + struct block_list *block_list = NULL; +#endif + struct loaded_l10nfile *domain; + struct binding *binding; + const char *categoryname; + const char *categoryvalue; + char *dirname, *xdomainname; + char *single_locale; + char *retval; + int saved_errno = errno; + + /* If no real MSGID is given return NULL. */ + if (msgid == NULL) + return NULL; + + /* See whether this is a SUID binary or not. */ + DETERMINE_SECURE; + + /* If DOMAINNAME is NULL, we are interested in the default domain. If + CATEGORY is not LC_MESSAGES this might not make much sense but the + definition left this undefined. */ + if (domainname == NULL) + domainname = _nl_current_default_domain; + + /* First find matching binding. */ + for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) + { + int compare = strcmp (domainname, binding->domainname); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It is not in the list. */ + binding = NULL; + break; + } + } + + if (binding == NULL) + dirname = (char *) _nl_default_dirname; + else if (binding->dirname[0] == '/') + dirname = binding->dirname; + else + { + /* We have a relative path. Make it absolute now. */ + size_t dirname_len = strlen (binding->dirname) + 1; + size_t path_max; + char *ret; + + path_max = (unsigned int) PATH_MAX; + path_max += 2; /* The getcwd docs say to do this. */ + + dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, dirname); + + __set_errno (0); + while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE) + { + path_max += PATH_INCR; + dirname = (char *) alloca (path_max + dirname_len); + ADD_BLOCK (block_list, dirname); + __set_errno (0); + } + + if (ret == NULL) + { + /* We cannot get the current working directory. Don't signal an + error but simply return the default string. */ + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + return (char *) msgid; + } + + stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname); + } + + /* Now determine the symbolic name of CATEGORY and its value. */ + categoryname = category_to_name (category); + categoryvalue = guess_category_value (category, categoryname); + + xdomainname = (char *) alloca (strlen (categoryname) + + strlen (domainname) + 5); + ADD_BLOCK (block_list, xdomainname); + + stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), + domainname), + ".mo"); + + /* Creating working area. */ + single_locale = (char *) alloca (strlen (categoryvalue) + 1); + ADD_BLOCK (block_list, single_locale); + + + /* Search for the given string. This is a loop because we perhaps + got an ordered list of languages to consider for the translation. */ + while (1) + { + /* Make CATEGORYVALUE point to the next element of the list. */ + while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') + ++categoryvalue; + if (categoryvalue[0] == '\0') + { + /* The whole contents of CATEGORYVALUE has been searched but + no valid entry has been found. We solve this situation + by implicitly appending a "C" entry, i.e. no translation + will take place. */ + single_locale[0] = 'C'; + single_locale[1] = '\0'; + } + else + { + char *cp = single_locale; + while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') + *cp++ = *categoryvalue++; + *cp = '\0'; + + /* When this is a SUID binary we must not allow accessing files + outside the dedicated directories. */ + if (ENABLE_SECURE + && (memchr (single_locale, '/', + _nl_find_language (single_locale) - single_locale) + != NULL)) + /* Ingore this entry. */ + continue; + } + + /* If the current locale value is C (or POSIX) we don't load a + domain. Return the MSGID. */ + if (strcmp (single_locale, "C") == 0 + || strcmp (single_locale, "POSIX") == 0) + { + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + return (char *) msgid; + } + + + /* Find structure describing the message catalog matching the + DOMAINNAME and CATEGORY. */ + domain = _nl_find_domain (dirname, single_locale, xdomainname); + + if (domain != NULL) + { + retval = find_msg (domain, msgid); + + if (retval == NULL) + { + int cnt; + + for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) + { + retval = find_msg (domain->successor[cnt], msgid); + + if (retval != NULL) + break; + } + } + + if (retval != NULL) + { + FREE_BLOCKS (block_list); + __set_errno (saved_errno); + return retval; + } + } + } + /* NOTREACHED */ +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dcgettext, dcgettext); +#endif + + +static char * +internal_function +find_msg (domain_file, msgid) + struct loaded_l10nfile *domain_file; + const char *msgid; +{ + size_t act = 0; + size_t top, bottom; + struct loaded_domain *domain; + + if (domain_file->decided == 0) + _nl_load_domain (domain_file); + + if (domain_file->data == NULL) + return NULL; + + domain = (struct loaded_domain *) domain_file->data; + + /* Locate the MSGID and its translation. */ + if (domain->hash_size > 2 && domain->hash_tab != NULL) + { + /* Use the hashing table. */ + nls_uint32 len = strlen (msgid); + nls_uint32 hash_val = hash_string (msgid); + nls_uint32 idx = hash_val % domain->hash_size; + nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); + nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]); + + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + + if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len + && strcmp (msgid, + domain->data + W (domain->must_swap, + domain->orig_tab[nstr - 1].offset)) == 0) + return (char *) domain->data + W (domain->must_swap, + domain->trans_tab[nstr - 1].offset); + + while (1) + { + if (idx >= domain->hash_size - incr) + idx -= domain->hash_size - incr; + else + idx += incr; + + nstr = W (domain->must_swap, domain->hash_tab[idx]); + if (nstr == 0) + /* Hash table entry is empty. */ + return NULL; + + if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) == len + && strcmp (msgid, + domain->data + W (domain->must_swap, + domain->orig_tab[nstr - 1].offset)) + == 0) + return (char *) domain->data + + W (domain->must_swap, domain->trans_tab[nstr - 1].offset); + } + /* NOTREACHED */ + } + + /* Now we try the default method: binary search in the sorted + array of messages. */ + bottom = 0; + top = domain->nstrings; + while (bottom < top) + { + int cmp_val; + + act = (bottom + top) / 2; + cmp_val = strcmp (msgid, domain->data + + W (domain->must_swap, + domain->orig_tab[act].offset)); + if (cmp_val < 0) + top = act; + else if (cmp_val > 0) + bottom = act + 1; + else + break; + } + + /* If an translation is found return this. */ + return bottom >= top ? NULL : (char *) domain->data + + W (domain->must_swap, + domain->trans_tab[act].offset); +} + + +/* Return string representation of locale CATEGORY. */ +static const char * +internal_function +category_to_name (category) + int category; +{ + const char *retval; + + switch (category) + { +#ifdef LC_COLLATE + case LC_COLLATE: + retval = "LC_COLLATE"; + break; +#endif +#ifdef LC_CTYPE + case LC_CTYPE: + retval = "LC_CTYPE"; + break; +#endif +#ifdef LC_MONETARY + case LC_MONETARY: + retval = "LC_MONETARY"; + break; +#endif +#ifdef LC_NUMERIC + case LC_NUMERIC: + retval = "LC_NUMERIC"; + break; +#endif +#ifdef LC_TIME + case LC_TIME: + retval = "LC_TIME"; + break; +#endif +#ifdef LC_MESSAGES + case LC_MESSAGES: + retval = "LC_MESSAGES"; + break; +#endif +#ifdef LC_RESPONSE + case LC_RESPONSE: + retval = "LC_RESPONSE"; + break; +#endif +#ifdef LC_ALL + case LC_ALL: + /* This might not make sense but is perhaps better than any other + value. */ + retval = "LC_ALL"; + break; +#endif + default: + /* If you have a better idea for a default value let me know. */ + retval = "LC_XXX"; + } + + return retval; +} + +/* Guess value of current locale from value of the environment variables. */ +static const char * +internal_function +guess_category_value (category, categoryname) + int category; + const char *categoryname; +{ + const char *retval; + + /* The highest priority value is the `LANGUAGE' environment + variable. This is a GNU extension. */ + retval = getenv ("LANGUAGE"); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* `LANGUAGE' is not set. So we have to proceed with the POSIX + methods of looking to `LC_ALL', `LC_xxx', and `LANG'. On some + systems this can be done by the `setlocale' function itself. */ +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL + return setlocale (category, NULL); +#else + /* Setting of LC_ALL overwrites all other. */ + retval = getenv ("LC_ALL"); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* Next comes the name of the desired category. */ + retval = getenv (categoryname); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* Last possibility is the LANG environment variable. */ + retval = getenv ("LANG"); + if (retval != NULL && retval[0] != '\0') + return retval; + + /* We use C as the default domain. POSIX says this is implementation + defined. */ + return "C"; +#endif +} + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif + + +#ifdef _LIBC +/* If we want to free all resources we have to do some work at + program's end. */ +static void __attribute__ ((unused)) +free_mem (void) +{ + struct binding *runp; + + for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next) + { + free (runp->domainname); + if (runp->dirname != _nl_default_dirname) + /* Yes, this is a pointer comparison. */ + free (runp->dirname); + } + + if (_nl_current_default_domain != _nl_default_default_domain) + /* Yes, again a pointer comparison. */ + free ((char *) _nl_current_default_domain); +} + +text_set_element (__libc_subfreeres, free_mem); +#endif diff --git a/intl/dgettext.c b/intl/dgettext.c new file mode 100644 index 000000000..0510c2b07 --- /dev/null +++ b/intl/dgettext.c @@ -0,0 +1,59 @@ +/* Implementation of the dgettext(3) function + Copyright (C) 1995, 1996, 1997 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined HAVE_LOCALE_H || defined _LIBC +# include <locale.h> +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define DGETTEXT __dgettext +# define DCGETTEXT __dcgettext +#else +# define DGETTEXT dgettext__ +# define DCGETTEXT dcgettext__ +#endif + +/* Look up MSGID in the DOMAINNAME message catalog of the current + LC_MESSAGES locale. */ +char * +DGETTEXT (domainname, msgid) + const char *domainname; + const char *msgid; +{ + return DCGETTEXT (domainname, msgid, LC_MESSAGES); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__dgettext, dgettext); +#endif diff --git a/intl/explodename.c b/intl/explodename.c new file mode 100644 index 000000000..7f4809739 --- /dev/null +++ b/intl/explodename.c @@ -0,0 +1,198 @@ +/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +#endif +#include <sys/types.h> + +#include "loadinfo.h" + +/* On some strange systems still no definition of NULL is found. Sigh! */ +#ifndef NULL +# if defined __STDC__ && __STDC__ +# define NULL ((void *) 0) +# else +# define NULL 0 +# endif +#endif + +/* @@ end of prolog @@ */ + +char * +_nl_find_language (name) + const char *name; +{ + while (name[0] != '\0' && name[0] != '_' && name[0] != '@' + && name[0] != '+' && name[0] != ',') + ++name; + + return (char *) name; +} + + +int +_nl_explode_name (name, language, modifier, territory, codeset, + normalized_codeset, special, sponsor, revision) + char *name; + const char **language; + const char **modifier; + const char **territory; + const char **codeset; + const char **normalized_codeset; + const char **special; + const char **sponsor; + const char **revision; +{ + enum { undecided, xpg, cen } syntax; + char *cp; + int mask; + + *modifier = NULL; + *territory = NULL; + *codeset = NULL; + *normalized_codeset = NULL; + *special = NULL; + *sponsor = NULL; + *revision = NULL; + + /* Now we determine the single parts of the locale name. First + look for the language. Termination symbols are `_' and `@' if + we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + mask = 0; + syntax = undecided; + *language = cp = name; + cp = _nl_find_language (*language); + + if (*language == cp) + /* This does not make sense: language has to be specified. Use + this entry as it is without exploding. Perhaps it is an alias. */ + cp = strchr (*language, '\0'); + else if (cp[0] == '_') + { + /* Next is the territory. */ + cp[0] = '\0'; + *territory = ++cp; + + while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@' + && cp[0] != '+' && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= TERRITORY; + + if (cp[0] == '.') + { + /* Next is the codeset. */ + syntax = xpg; + cp[0] = '\0'; + *codeset = ++cp; + + while (cp[0] != '\0' && cp[0] != '@') + ++cp; + + mask |= XPG_CODESET; + + if (*codeset != cp && (*codeset)[0] != '\0') + { + *normalized_codeset = _nl_normalize_codeset (*codeset, + cp - *codeset); + if (strcmp (*codeset, *normalized_codeset) == 0) + free ((char *) *normalized_codeset); + else + mask |= XPG_NORM_CODESET; + } + } + } + + if (cp[0] == '@' || (syntax != xpg && cp[0] == '+')) + { + /* Next is the modifier. */ + syntax = cp[0] == '@' ? xpg : cen; + cp[0] = '\0'; + *modifier = ++cp; + + while (syntax == cen && cp[0] != '\0' && cp[0] != '+' + && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= XPG_MODIFIER | CEN_AUDIENCE; + } + + if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_')) + { + syntax = cen; + + if (cp[0] == '+') + { + /* Next is special application (CEN syntax). */ + cp[0] = '\0'; + *special = ++cp; + + while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_') + ++cp; + + mask |= CEN_SPECIAL; + } + + if (cp[0] == ',') + { + /* Next is sponsor (CEN syntax). */ + cp[0] = '\0'; + *sponsor = ++cp; + + while (cp[0] != '\0' && cp[0] != '_') + ++cp; + + mask |= CEN_SPONSOR; + } + + if (cp[0] == '_') + { + /* Next is revision (CEN syntax). */ + cp[0] = '\0'; + *revision = ++cp; + + mask |= CEN_REVISION; + } + } + + /* For CEN syntax values it might be important to have the + separator character in the file name, not for XPG syntax. */ + if (syntax == xpg) + { + if (*territory != NULL && (*territory)[0] == '\0') + mask &= ~TERRITORY; + + if (*codeset != NULL && (*codeset)[0] == '\0') + mask &= ~XPG_CODESET; + + if (*modifier != NULL && (*modifier)[0] == '\0') + mask &= ~XPG_MODIFIER; + } + + return mask; +} diff --git a/intl/finddomain.c b/intl/finddomain.c new file mode 100644 index 000000000..81ea29bf4 --- /dev/null +++ b/intl/finddomain.c @@ -0,0 +1,216 @@ +/* Handle list of needed message catalogs + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <errno.h> +#include <stdio.h> +#include <sys/types.h> + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#include "gettext.h" +#include "gettextP.h" +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ +/* List of already loaded domains. */ +static struct loaded_l10nfile *_nl_loaded_domains; + + +/* Return a data structure describing the message catalog described by + the DOMAINNAME and CATEGORY parameters with respect to the currently + established bindings. */ +struct loaded_l10nfile * +internal_function +_nl_find_domain (dirname, locale, domainname) + const char *dirname; + char *locale; + const char *domainname; +{ + struct loaded_l10nfile *retval; + const char *language; + const char *modifier; + const char *territory; + const char *codeset; + const char *normalized_codeset; + const char *special; + const char *sponsor; + const char *revision; + const char *alias_value; + int mask; + + /* LOCALE can consist of up to four recognized parts for the XPG syntax: + + language[_territory[.codeset]][@modifier] + + and six parts for the CEN syntax: + + language[_territory][+audience][+special][,[sponsor][_revision]] + + Beside the first part all of them are allowed to be missing. If + the full specified locale is not found, the less specific one are + looked for. The various parts will be stripped off according to + the following order: + (1) revision + (2) sponsor + (3) special + (4) codeset + (5) normalized codeset + (6) territory + (7) audience/modifier + */ + + /* If we have already tested for this locale entry there has to + be one data set in the list of loaded domains. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, 0, locale, NULL, NULL, + NULL, NULL, NULL, NULL, NULL, domainname, 0); + if (retval != NULL) + { + /* We know something about this locale. */ + int cnt; + + if (retval->decided == 0) + _nl_load_domain (retval); + + if (retval->data != NULL) + return retval; + + for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) + { + if (retval->successor[cnt]->decided == 0) + _nl_load_domain (retval->successor[cnt]); + + if (retval->successor[cnt]->data != NULL) + break; + } + return cnt >= 0 ? retval : NULL; + /* NOTREACHED */ + } + + /* See whether the locale value is an alias. If yes its value + *overwrites* the alias name. No test for the original value is + done. */ + alias_value = _nl_expand_alias (locale); + if (alias_value != NULL) + { +#if defined _LIBC || defined HAVE_STRDUP + locale = strdup (alias_value); + if (locale == NULL) + return NULL; +#else + size_t len = strlen (alias_value) + 1; + locale = (char *) malloc (len); + if (locale == NULL) + return NULL; + + memcpy (locale, alias_value, len); +#endif + } + + /* Now we determine the single parts of the locale name. First + look for the language. Termination symbols are `_' and `@' if + we use XPG4 style, and `_', `+', and `,' if we use CEN syntax. */ + mask = _nl_explode_name (locale, &language, &modifier, &territory, + &codeset, &normalized_codeset, &special, + &sponsor, &revision); + + /* Create all possible locale entries which might be interested in + generalization. */ + retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, + strlen (dirname) + 1, mask, language, territory, + codeset, normalized_codeset, modifier, special, + sponsor, revision, domainname, 1); + if (retval == NULL) + /* This means we are out of core. */ + return NULL; + + if (retval->decided == 0) + _nl_load_domain (retval); + if (retval->data == NULL) + { + int cnt; + for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) + { + if (retval->successor[cnt]->decided == 0) + _nl_load_domain (retval->successor[cnt]); + if (retval->successor[cnt]->data != NULL) + break; + } + } + + /* The room for an alias was dynamically allocated. Free it now. */ + if (alias_value != NULL) + free (locale); + + return retval; +} + + +#ifdef _LIBC +static void __attribute__ ((unused)) +free_mem (void) +{ + struct loaded_l10nfile *runp = _nl_loaded_domains; + + while (runp != NULL) + { + struct loaded_l10nfile *here = runp; + if (runp->data != NULL) + _nl_unload_domain ((struct loaded_domain *) runp->data); + runp = runp->next; + free (here); + } +} + +text_set_element (__libc_subfreeres, free_mem); +#endif diff --git a/intl/gettext.c b/intl/gettext.c new file mode 100644 index 000000000..d929f98d6 --- /dev/null +++ b/intl/gettext.c @@ -0,0 +1,70 @@ +/* Implementation of gettext(3) function. + Copyright (C) 1995, 1997 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef _LIBC +# define __need_NULL +# include <stddef.h> +#else +# ifdef STDC_HEADERS +# include <stdlib.h> /* Just for NULL. */ +# else +# ifdef HAVE_STRING_H +# include <string.h> +# else +# define NULL ((void *) 0) +# endif +# endif +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define GETTEXT __gettext +# define DGETTEXT __dgettext +#else +# define GETTEXT gettext__ +# define DGETTEXT dgettext__ +#endif + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +char * +GETTEXT (msgid) + const char *msgid; +{ + return DGETTEXT (NULL, msgid); +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__gettext, gettext); +#endif diff --git a/intl/gettext.h b/intl/gettext.h new file mode 100644 index 000000000..3cd23d7d6 --- /dev/null +++ b/intl/gettext.h @@ -0,0 +1,105 @@ +/* Internal header for GNU gettext internationalization functions. + Copyright (C) 1995, 1997 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 Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef _GETTEXT_H +#define _GETTEXT_H 1 + +#include <stdio.h> + +#if HAVE_LIMITS_H || _LIBC +# include <limits.h> +#endif + +/* @@ end of prolog @@ */ + +/* The magic number of the GNU message catalog format. */ +#define _MAGIC 0x950412de +#define _MAGIC_SWAPPED 0xde120495 + +/* Revision number of the currently used .mo (binary) file format. */ +#define MO_REVISION_NUMBER 0 + +/* The following contortions are an attempt to use the C preprocessor + to determine an unsigned integral type that is 32 bits wide. An + alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but + doing that would require that the configure script compile and *run* + the resulting executable. Locally running cross-compiled executables + is usually not possible. */ + +#if __STDC__ +# define UINT_MAX_32_BITS 4294967295U +#else +# define UINT_MAX_32_BITS 0xFFFFFFFF +#endif + +/* If UINT_MAX isn't defined, assume it's a 32-bit type. + This should be valid for all systems GNU cares about because + that doesn't include 16-bit systems, and only modern systems + (that certainly have <limits.h>) have 64+-bit integral types. */ + +#ifndef UINT_MAX +# define UINT_MAX UINT_MAX_32_BITS +#endif + +#if UINT_MAX == UINT_MAX_32_BITS +typedef unsigned nls_uint32; +#else +# if USHRT_MAX == UINT_MAX_32_BITS +typedef unsigned short nls_uint32; +# else +# if ULONG_MAX == UINT_MAX_32_BITS +typedef unsigned long nls_uint32; +# else + /* The following line is intended to throw an error. Using #error is + not portable enough. */ + "Cannot determine unsigned 32-bit data type." +# endif +# endif +#endif + + +/* Header for binary .mo file format. */ +struct mo_file_header +{ + /* The magic number. */ + nls_uint32 magic; + /* The revision number of the file format. */ + nls_uint32 revision; + /* The number of strings pairs. */ + nls_uint32 nstrings; + /* Offset of table with start offsets of original strings. */ + nls_uint32 orig_tab_offset; + /* Offset of table with start offsets of translation strings. */ + nls_uint32 trans_tab_offset; + /* Size of hashing table. */ + nls_uint32 hash_tab_size; + /* Offset of first hashing entry. */ + nls_uint32 hash_tab_offset; +}; + +struct string_desc +{ + /* Length of addressed string. */ + nls_uint32 length; + /* Offset of string in file. */ + nls_uint32 offset; +}; + +/* @@ begin of epilog @@ */ + +#endif /* gettext.h */ diff --git a/intl/gettextP.h b/intl/gettextP.h new file mode 100644 index 000000000..00c520319 --- /dev/null +++ b/intl/gettextP.h @@ -0,0 +1,89 @@ +/* Header describing internals of gettext library + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef _GETTEXTP_H +#define _GETTEXTP_H + +#include "loadinfo.h" + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifndef internal_function +# define internal_function +#endif + +#ifndef W +# define W(flag, data) ((flag) ? SWAP (data) : (data)) +#endif + + +#ifdef _LIBC +# include <byteswap.h> +# define SWAP(i) bswap_32 (i) +#else +static nls_uint32 SWAP PARAMS ((nls_uint32 i)); + +static inline nls_uint32 +SWAP (i) + nls_uint32 i; +{ + return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); +} +#endif + + +struct loaded_domain +{ + const char *data; + int use_mmap; + size_t mmap_size; + int must_swap; + nls_uint32 nstrings; + struct string_desc *orig_tab; + struct string_desc *trans_tab; + nls_uint32 hash_size; + nls_uint32 *hash_tab; +}; + +struct binding +{ + struct binding *next; + char *domainname; + char *dirname; +}; + +struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname, + char *__locale, + const char *__domainname)) + internal_function; +void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain)) + internal_function; +void _nl_unload_domain PARAMS ((struct loaded_domain *__domain)) + internal_function; + +/* @@ begin of epilog @@ */ + +#endif /* gettextP.h */ diff --git a/intl/hash-string.h b/intl/hash-string.h new file mode 100644 index 000000000..939e95828 --- /dev/null +++ b/intl/hash-string.h @@ -0,0 +1,59 @@ +/* Implements a string hashing function. + Copyright (C) 1995, 1997 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 Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +#endif + +/* We assume to have `unsigned long int' value with at least 32 bits. */ +#define HASHWORDBITS 32 + + +/* Defines the so called `hashpjw' function by P.J. Weinberger + [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, + 1986, 1987 Bell Telephone Laboratories, Inc.] */ +static unsigned long int hash_string PARAMS ((const char *__str_param)); + +static inline unsigned long int +hash_string (str_param) + const char *str_param; +{ + unsigned long int hval, g; + const char *str = str_param; + + /* Compute the hash value for the given string. */ + hval = 0; + while (*str != '\0') + { + hval <<= 4; + hval += (unsigned long int) *str++; + g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); + if (g != 0) + { + hval ^= g >> (HASHWORDBITS - 8); + hval ^= g; + } + } + return hval; +} diff --git a/intl/intl-compat.c b/intl/intl-compat.c new file mode 100644 index 000000000..503efa0fa --- /dev/null +++ b/intl/intl-compat.c @@ -0,0 +1,76 @@ +/* intl-compat.c - Stub functions to call gettext functions from GNU gettext + Library. + Copyright (C) 1995 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, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libgettext.h" + +/* @@ end of prolog @@ */ + + +#undef gettext +#undef dgettext +#undef dcgettext +#undef textdomain +#undef bindtextdomain + + +char * +bindtextdomain (domainname, dirname) + const char *domainname; + const char *dirname; +{ + return bindtextdomain__ (domainname, dirname); +} + + +char * +dcgettext (domainname, msgid, category) + const char *domainname; + const char *msgid; + int category; +{ + return dcgettext__ (domainname, msgid, category); +} + + +char * +dgettext (domainname, msgid) + const char *domainname; + const char *msgid; +{ + return dgettext__ (domainname, msgid); +} + + +char * +gettext (msgid) + const char *msgid; +{ + return gettext__ (msgid); +} + + +char * +textdomain (domainname) + const char *domainname; +{ + return textdomain__ (domainname); +} diff --git a/intl/l10nflist.c b/intl/l10nflist.c new file mode 100644 index 000000000..30f5f6457 --- /dev/null +++ b/intl/l10nflist.c @@ -0,0 +1,411 @@ +/* Handle list of needed message catalogs + Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. + Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + + +#if defined HAVE_STRING_H || defined _LIBC +# ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +# endif +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#if defined _LIBC || defined HAVE_ARGZ_H +# include <argz.h> +#endif +#include <ctype.h> +#include <sys/types.h> + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#include "loadinfo.h" + +/* On some strange systems still no definition of NULL is found. Sigh! */ +#ifndef NULL +# if defined __STDC__ && __STDC__ +# define NULL ((void *) 0) +# else +# define NULL 0 +# endif +#endif + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# ifndef stpcpy +# define stpcpy(dest, src) __stpcpy(dest, src) +# endif +#else +# ifndef HAVE_STPCPY +static char *stpcpy PARAMS ((char *dest, const char *src)); +# endif +#endif + +/* Define function which are usually not available. */ + +#if !defined _LIBC && !defined HAVE___ARGZ_COUNT +/* Returns the number of strings in ARGZ. */ +static size_t argz_count__ PARAMS ((const char *argz, size_t len)); + +static size_t +argz_count__ (argz, len) + const char *argz; + size_t len; +{ + size_t count = 0; + while (len > 0) + { + size_t part_len = strlen (argz); + argz += part_len + 1; + len -= part_len + 1; + count++; + } + return count; +} +# undef __argz_count +# define __argz_count(argz, len) argz_count__ (argz, len) +#endif /* !_LIBC && !HAVE___ARGZ_COUNT */ + +#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY +/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's + except the last into the character SEP. */ +static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep)); + +static void +argz_stringify__ (argz, len, sep) + char *argz; + size_t len; + int sep; +{ + while (len > 0) + { + size_t part_len = strlen (argz); + argz += part_len; + len -= part_len + 1; + if (len > 0) + *argz++ = sep; + } +} +# undef __argz_stringify +# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) +#endif /* !_LIBC && !HAVE___ARGZ_STRINGIFY */ + +#if !defined _LIBC && !defined HAVE___ARGZ_NEXT +static char *argz_next__ PARAMS ((char *argz, size_t argz_len, + const char *entry)); + +static char * +argz_next__ (argz, argz_len, entry) + char *argz; + size_t argz_len; + const char *entry; +{ + if (entry) + { + if (entry < argz + argz_len) + entry = strchr (entry, '\0') + 1; + + return entry >= argz + argz_len ? NULL : (char *) entry; + } + else + if (argz_len > 0) + return argz; + else + return 0; +} +# undef __argz_next +# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) +#endif /* !_LIBC && !HAVE___ARGZ_NEXT */ + + +/* Return number of bits set in X. */ +static int pop PARAMS ((int x)); + +static inline int +pop (x) + int x; +{ + /* We assume that no more than 16 bits are used. */ + x = ((x & ~0x5555) >> 1) + (x & 0x5555); + x = ((x & ~0x3333) >> 2) + (x & 0x3333); + x = ((x >> 4) + x) & 0x0f0f; + x = ((x >> 8) + x) & 0xff; + + return x; +} + + +struct loaded_l10nfile * +_nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, mask, language, + territory, codeset, normalized_codeset, modifier, special, + sponsor, revision, filename, do_allocate) + struct loaded_l10nfile **l10nfile_list; + const char *dirlist; + size_t dirlist_len; + int mask; + const char *language; + const char *territory; + const char *codeset; + const char *normalized_codeset; + const char *modifier; + const char *special; + const char *sponsor; + const char *revision; + const char *filename; + int do_allocate; +{ + char *abs_filename; + struct loaded_l10nfile *last = NULL; + struct loaded_l10nfile *retval; + char *cp; + size_t entries; + int cnt; + + /* Allocate room for the full file name. */ + abs_filename = (char *) malloc (dirlist_len + + strlen (language) + + ((mask & TERRITORY) != 0 + ? strlen (territory) + 1 : 0) + + ((mask & XPG_CODESET) != 0 + ? strlen (codeset) + 1 : 0) + + ((mask & XPG_NORM_CODESET) != 0 + ? strlen (normalized_codeset) + 1 : 0) + + (((mask & XPG_MODIFIER) != 0 + || (mask & CEN_AUDIENCE) != 0) + ? strlen (modifier) + 1 : 0) + + ((mask & CEN_SPECIAL) != 0 + ? strlen (special) + 1 : 0) + + (((mask & CEN_SPONSOR) != 0 + || (mask & CEN_REVISION) != 0) + ? (1 + ((mask & CEN_SPONSOR) != 0 + ? strlen (sponsor) + 1 : 0) + + ((mask & CEN_REVISION) != 0 + ? strlen (revision) + 1 : 0)) : 0) + + 1 + strlen (filename) + 1); + + if (abs_filename == NULL) + return NULL; + + retval = NULL; + last = NULL; + + /* Construct file name. */ + memcpy (abs_filename, dirlist, dirlist_len); + __argz_stringify (abs_filename, dirlist_len, ':'); + cp = abs_filename + (dirlist_len - 1); + *cp++ = '/'; + cp = stpcpy (cp, language); + + if ((mask & TERRITORY) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, territory); + } + if ((mask & XPG_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, codeset); + } + if ((mask & XPG_NORM_CODESET) != 0) + { + *cp++ = '.'; + cp = stpcpy (cp, normalized_codeset); + } + if ((mask & (XPG_MODIFIER | CEN_AUDIENCE)) != 0) + { + /* This component can be part of both syntaces but has different + leading characters. For CEN we use `+', else `@'. */ + *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@'; + cp = stpcpy (cp, modifier); + } + if ((mask & CEN_SPECIAL) != 0) + { + *cp++ = '+'; + cp = stpcpy (cp, special); + } + if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0) + { + *cp++ = ','; + if ((mask & CEN_SPONSOR) != 0) + cp = stpcpy (cp, sponsor); + if ((mask & CEN_REVISION) != 0) + { + *cp++ = '_'; + cp = stpcpy (cp, revision); + } + } + + *cp++ = '/'; + stpcpy (cp, filename); + + /* Look in list of already loaded domains whether it is already + available. */ + last = NULL; + for (retval = *l10nfile_list; retval != NULL; retval = retval->next) + if (retval->filename != NULL) + { + int compare = strcmp (retval->filename, abs_filename); + if (compare == 0) + /* We found it! */ + break; + if (compare < 0) + { + /* It's not in the list. */ + retval = NULL; + break; + } + + last = retval; + } + + if (retval != NULL || do_allocate == 0) + { + free (abs_filename); + return retval; + } + + retval = (struct loaded_l10nfile *) + malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len) + * (1 << pop (mask)) + * sizeof (struct loaded_l10nfile *))); + if (retval == NULL) + return NULL; + + retval->filename = abs_filename; + retval->decided = (__argz_count (dirlist, dirlist_len) != 1 + || ((mask & XPG_CODESET) != 0 + && (mask & XPG_NORM_CODESET) != 0)); + retval->data = NULL; + + if (last == NULL) + { + retval->next = *l10nfile_list; + *l10nfile_list = retval; + } + else + { + retval->next = last->next; + last->next = retval; + } + + entries = 0; + /* If the DIRLIST is a real list the RETVAL entry corresponds not to + a real file. So we have to use the DIRLIST separation mechanism + of the inner loop. */ + cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask; + for (; cnt >= 0; --cnt) + if ((cnt & ~mask) == 0 + && ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0) + && ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0)) + { + /* Iterate over all elements of the DIRLIST. */ + char *dir = NULL; + + while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) + != NULL) + retval->successor[entries++] + = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, + language, territory, codeset, + normalized_codeset, modifier, special, + sponsor, revision, filename, 1); + } + retval->successor[entries] = NULL; + + return retval; +} + +/* Normalize codeset name. There is no standard for the codeset + names. Normalization allows the user to use any of the common + names. */ +const char * +_nl_normalize_codeset (codeset, name_len) + const char *codeset; + size_t name_len; +{ + int len = 0; + int only_digit = 1; + char *retval; + char *wp; + size_t cnt; + + for (cnt = 0; cnt < name_len; ++cnt) + if (isalnum (codeset[cnt])) + { + ++len; + + if (isalpha (codeset[cnt])) + only_digit = 0; + } + + retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); + + if (retval != NULL) + { + if (only_digit) + wp = stpcpy (retval, "iso"); + else + wp = retval; + + for (cnt = 0; cnt < name_len; ++cnt) + if (isalpha (codeset[cnt])) + *wp++ = tolower (codeset[cnt]); + else if (isdigit (codeset[cnt])) + *wp++ = codeset[cnt]; + + *wp = '\0'; + } + + return (const char *) retval; +} + + +/* @@ begin of epilog @@ */ + +/* We don't want libintl.a to depend on any other library. So we + avoid the non-standard function stpcpy. In GNU C Library this + function is available, though. Also allow the symbol HAVE_STPCPY + to be defined. */ +#if !_LIBC && !HAVE_STPCPY +static char * +stpcpy (dest, src) + char *dest; + const char *src; +{ + while ((*dest++ = *src++) != '\0') + /* Do nothing. */ ; + return dest - 1; +} +#endif diff --git a/intl/libgettext.h b/intl/libgettext.h new file mode 100644 index 000000000..3a92960ae --- /dev/null +++ b/intl/libgettext.h @@ -0,0 +1,182 @@ +/* Message catalogs for internationalization. + Copyright (C) 1995, 1996, 1997, 1998 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* Because on some systems (e.g. Solaris) we sometimes have to include + the systems libintl.h as well as this file we have more complex + include protection above. But the systems header might perhaps also + define _LIBINTL_H and therefore we have to protect the definition here. */ + +#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H +#ifndef _LIBINTL_H +# define _LIBINTL_H 1 +#endif +#define _LIBGETTEXT_H 1 + +/* We define an additional symbol to signal that we use the GNU + implementation of gettext. */ +#define __USE_GNU_GETTEXT 1 + +#include <sys/types.h> + +#if HAVE_LOCALE_H +# include <locale.h> +#endif + + +#ifdef __cplusplus +extern "C" { +#endif + +/* @@ end of prolog @@ */ + +#ifndef PARAMS +# if __STDC__ || defined __cplusplus +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +#ifndef NULL +# if !defined __cplusplus || defined __GNUC__ +# define NULL ((void *) 0) +# else +# define NULL (0) +# endif +#endif + +#if !HAVE_LC_MESSAGES +/* This value determines the behaviour of the gettext() and dgettext() + function. But some system does not have this defined. Define it + to a default value. */ +# define LC_MESSAGES (-1) +#endif + + +/* Declarations for gettext-using-catgets interface. Derived from + Jim Meyering's libintl.h. */ +struct _msg_ent +{ + const char *_msg; + int _msg_number; +}; + + +#if HAVE_CATGETS +/* These two variables are defined in the automatically by po-to-tbl.sed + generated file `cat-id-tbl.c'. */ +extern const struct _msg_ent _msg_tbl[]; +extern int _msg_tbl_length; +#endif + + +/* For automatical extraction of messages sometimes no real + translation is needed. Instead the string itself is the result. */ +#define gettext_noop(Str) (Str) + +/* Look up MSGID in the current default message catalog for the current + LC_MESSAGES locale. If not found, returns MSGID itself (the default + text). */ +extern char *gettext PARAMS ((const char *__msgid)); +extern char *gettext__ PARAMS ((const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current + LC_MESSAGES locale. */ +extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid)); +extern char *dgettext__ PARAMS ((const char *__domainname, + const char *__msgid)); + +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY + locale. */ +extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid, + int __category)); +extern char *dcgettext__ PARAMS ((const char *__domainname, + const char *__msgid, int __category)); + + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +extern char *textdomain PARAMS ((const char *__domainname)); +extern char *textdomain__ PARAMS ((const char *__domainname)); + +/* Specify that the DOMAINNAME message catalog will be found + in DIRNAME rather than in the system locale data base. */ +extern char *bindtextdomain PARAMS ((const char *__domainname, + const char *__dirname)); +extern char *bindtextdomain__ PARAMS ((const char *__domainname, + const char *__dirname)); + +#if ENABLE_NLS + +/* Solaris 2.3 has the gettext function but dcgettext is missing. + So we omit this optimization for Solaris 2.3. BTW, Solaris 2.4 + has dcgettext. */ +# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT) + +# define gettext(Msgid) \ + dgettext (NULL, Msgid) + +# define dgettext(Domainname, Msgid) \ + dcgettext (Domainname, Msgid, LC_MESSAGES) + +# if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7 +/* This global variable is defined in loadmsgcat.c. We need a sign, + whether a new catalog was loaded, which can be associated with all + translations. */ +extern int _nl_msg_cat_cntr; + +# define dcgettext(Domainname, Msgid, Category) \ + (__extension__ \ + ({ \ + char *__result; \ + if (__builtin_constant_p (Msgid)) \ + { \ + static char *__translation__; \ + static int __catalog_counter__; \ + if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr) \ + { \ + __translation__ = \ + dcgettext__ (Domainname, Msgid, Category); \ + __catalog_counter__ = _nl_msg_cat_cntr; \ + } \ + __result = __translation__; \ + } \ + else \ + __result = dcgettext__ (Domainname, Msgid, Category); \ + __result; \ + })) +# endif +# endif + +#else + +# define gettext(Msgid) (Msgid) +# define dgettext(Domainname, Msgid) (Msgid) +# define dcgettext(Domainname, Msgid, Category) (Msgid) +# define textdomain(Domainname) ((char *) Domainname) +# define bindtextdomain(Domainname, Dirname) ((char *) Dirname) + +#endif + +/* @@ begin of epilog @@ */ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/intl/linux-msg.sed b/intl/linux-msg.sed new file mode 100644 index 000000000..5918e720a --- /dev/null +++ b/intl/linux-msg.sed @@ -0,0 +1,100 @@ +# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file +# Copyright (C) 1995 Free Software Foundation, Inc. +# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# The first directive in the .msg should be the definition of the +# message set number. We use always set number 1. +# +1 { + i\ +$set 1 # Automatically created by po2msg.sed + h + s/.*/0/ + x +} +# +# Mitch's old catalog format does not allow comments. +# +# We copy the original message as a comment into the .msg file. +# +/^msgid/ { + s/msgid[ ]*"// +# +# This does not work now with the new format. +# /"$/! { +# s/\\$// +# s/$/ ... (more lines following)"/ +# } + x +# The following nice solution is by +# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de> + td +# Increment a decimal number in pattern space. +# First hide trailing `9' digits. + :d + s/9\(_*\)$/_\1/ + td +# Assure at least one digit is available. + s/^\(_*\)$/0\1/ +# Increment the last digit. + s/8\(_*\)$/9\1/ + s/7\(_*\)$/8\1/ + s/6\(_*\)$/7\1/ + s/5\(_*\)$/6\1/ + s/4\(_*\)$/5\1/ + s/3\(_*\)$/4\1/ + s/2\(_*\)$/3\1/ + s/1\(_*\)$/2\1/ + s/0\(_*\)$/1\1/ +# Convert the hidden `9' digits to `0's. + s/_/0/g + x + G + s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p +} +# +# The .msg file contains, other then the .po file, only the translations +# but each given a unique ID. Starting from 1 and incrementing by 1 for +# each message we assign them to the messages. +# It is important that the .po file used to generate the cat-id-tbl.c file +# (with po-to-tbl) is the same as the one used here. (At least the order +# of declarations must not be changed.) +# +/^msgstr/ { + s/msgstr[ ]*"\(.*\)"/# \1/ +# Clear substitution flag. + tb +# Append the next line. + :b + N +# Look whether second part is continuation line. + s/\(.*\n\)"\(.*\)"/\1\2/ +# Yes, then branch. + ta + P + D +# Note that D includes a jump to the start!! +# We found a continuation line. But before printing insert '\'. + :a + s/\(.*\)\(\n.*\)/\1\\\2/ + P +# We cannot use D here. + s/.*\n\(.*\)/\1/ + tb +} +d diff --git a/intl/loadinfo.h b/intl/loadinfo.h new file mode 100644 index 000000000..1c4524abb --- /dev/null +++ b/intl/loadinfo.h @@ -0,0 +1,78 @@ +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Ulrich Drepper <drepper@cygnus.com>, 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifndef PARAMS +# if __STDC__ +# define PARAMS(args) args +# else +# define PARAMS(args) () +# endif +#endif + +/* Encoding of locale name parts. */ +#define CEN_REVISION 1 +#define CEN_SPONSOR 2 +#define CEN_SPECIAL 4 +#define XPG_NORM_CODESET 8 +#define XPG_CODESET 16 +#define TERRITORY 32 +#define CEN_AUDIENCE 64 +#define XPG_MODIFIER 128 + +#define CEN_SPECIFIC (CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE) +#define XPG_SPECIFIC (XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER) + + +struct loaded_l10nfile +{ + const char *filename; + int decided; + + const void *data; + + struct loaded_l10nfile *next; + struct loaded_l10nfile *successor[1]; +}; + + +extern const char *_nl_normalize_codeset PARAMS ((const char *codeset, + size_t name_len)); + +extern struct loaded_l10nfile * +_nl_make_l10nflist PARAMS ((struct loaded_l10nfile **l10nfile_list, + const char *dirlist, size_t dirlist_len, int mask, + const char *language, const char *territory, + const char *codeset, + const char *normalized_codeset, + const char *modifier, const char *special, + const char *sponsor, const char *revision, + const char *filename, int do_allocate)); + + +extern const char *_nl_expand_alias PARAMS ((const char *name)); + +extern int _nl_explode_name PARAMS ((char *name, const char **language, + const char **modifier, + const char **territory, + const char **codeset, + const char **normalized_codeset, + const char **special, + const char **sponsor, + const char **revision)); + +extern char *_nl_find_language PARAMS ((const char *name)); diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c new file mode 100644 index 000000000..2c6a5650d --- /dev/null +++ b/intl/loadmsgcat.c @@ -0,0 +1,220 @@ +/* Load needed message catalogs. + Copyright (C) 1995, 1996, 1997, 1998 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <fcntl.h> +#include <sys/types.h> +#include <sys/stat.h> + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#if defined HAVE_UNISTD_H || defined _LIBC +# include <unistd.h> +#endif + +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ + || (defined _LIBC && defined _POSIX_MAPPED_FILES) +# include <sys/mman.h> +# undef HAVE_MMAP +# define HAVE_MMAP 1 +#else +# undef HAVE_MMAP +#endif + +#include "gettext.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ISO C functions. This is required by the standard + because some ISO C functions will require linking with this object + file and the name space must not be polluted. */ +# define open __open +# define close __close +# define read __read +# define mmap __mmap +# define munmap __munmap +#endif + +/* We need a sign, whether a new catalog was loaded, which can be associated + with all translations. This is important if the translations are + cached by one of GCC's features. */ +int _nl_msg_cat_cntr = 0; + + +/* Load the message catalogs specified by FILENAME. If it is no valid + message catalog do nothing. */ +void +internal_function +_nl_load_domain (domain_file) + struct loaded_l10nfile *domain_file; +{ + int fd; + size_t size; + struct stat st; + struct mo_file_header *data = (struct mo_file_header *) -1; + int use_mmap = 0; + struct loaded_domain *domain; + + domain_file->decided = 1; + domain_file->data = NULL; + + /* If the record does not represent a valid locale the FILENAME + might be NULL. This can happen when according to the given + specification the locale file name is different for XPG and CEN + syntax. */ + if (domain_file->filename == NULL) + return; + + /* Try to open the addressed file. */ + fd = open (domain_file->filename, O_RDONLY); + if (fd == -1) + return; + + /* We must know about the size of the file. */ + if (fstat (fd, &st) != 0 + || (size = (size_t) st.st_size) != st.st_size + || size < sizeof (struct mo_file_header)) + { + /* Something went wrong. */ + close (fd); + return; + } + +#ifdef HAVE_MMAP + /* Now we are ready to load the file. If mmap() is available we try + this first. If not available or it failed we try to load it. */ + data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, + MAP_PRIVATE, fd, 0); + + if (data != (struct mo_file_header *) -1) + { + /* mmap() call was successful. */ + close (fd); + use_mmap = 1; + } +#endif + + /* If the data is not yet available (i.e. mmap'ed) we try to load + it manually. */ + if (data == (struct mo_file_header *) -1) + { + size_t to_read; + char *read_ptr; + + data = (struct mo_file_header *) malloc (size); + if (data == NULL) + return; + + to_read = size; + read_ptr = (char *) data; + do + { + long int nb = (long int) read (fd, read_ptr, to_read); + if (nb == -1) + { + close (fd); + return; + } + + read_ptr += nb; + to_read -= nb; + } + while (to_read > 0); + + close (fd); + } + + /* Using the magic number we can test whether it really is a message + catalog file. */ + if (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED) + { + /* The magic number is wrong: not a message catalog file. */ +#ifdef HAVE_MMAP + if (use_mmap) + munmap ((caddr_t) data, size); + else +#endif + free (data); + return; + } + + domain_file->data + = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); + if (domain_file->data == NULL) + return; + + domain = (struct loaded_domain *) domain_file->data; + domain->data = (char *) data; + domain->use_mmap = use_mmap; + domain->mmap_size = size; + domain->must_swap = data->magic != _MAGIC; + + /* Fill in the information about the available tables. */ + switch (W (domain->must_swap, data->revision)) + { + case 0: + domain->nstrings = W (domain->must_swap, data->nstrings); + domain->orig_tab = (struct string_desc *) + ((char *) data + W (domain->must_swap, data->orig_tab_offset)); + domain->trans_tab = (struct string_desc *) + ((char *) data + W (domain->must_swap, data->trans_tab_offset)); + domain->hash_size = W (domain->must_swap, data->hash_tab_size); + domain->hash_tab = (nls_uint32 *) + ((char *) data + W (domain->must_swap, data->hash_tab_offset)); + break; + default: + /* This is an invalid revision. */ +#ifdef HAVE_MMAP + if (use_mmap) + munmap ((caddr_t) data, size); + else +#endif + free (data); + free (domain); + domain_file->data = NULL; + return; + } + + /* Show that one domain is changed. This might make some cached + translations invalid. */ + ++_nl_msg_cat_cntr; +} + + +#ifdef _LIBC +void +internal_function +_nl_unload_domain (domain) + struct loaded_domain *domain; +{ +#ifdef _POSIX_MAPPED_FILES + if (domain->use_mmap) + munmap ((caddr_t) domain->data, domain->mmap_size); + else +#endif /* _POSIX_MAPPED_FILES */ + free ((void *) domain->data); + + free (domain); +} +#endif diff --git a/intl/localealias.c b/intl/localealias.c new file mode 100644 index 000000000..861020dd5 --- /dev/null +++ b/intl/localealias.c @@ -0,0 +1,438 @@ +/* Handle aliases for locale names. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <ctype.h> +#include <stdio.h> +#include <sys/types.h> + +#ifdef __GNUC__ +# define alloca __builtin_alloca +# define HAVE_ALLOCA 1 +#else +# if defined HAVE_ALLOCA_H || defined _LIBC +# include <alloca.h> +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca +char *alloca (); +# endif +# endif +# endif +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#else +char *getenv (); +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# else +void free (); +# endif +#endif + +#if defined HAVE_STRING_H || defined _LIBC +# ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +# endif +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif +#if !HAVE_STRCHR && !defined _LIBC +# ifndef strchr +# define strchr index +# endif +#endif + +#include "gettext.h" +#include "gettextP.h" + +/* @@ end of prolog @@ */ + +#ifdef _LIBC +/* Rename the non ANSI C functions. This is required by the standard + because some ANSI C functions will require linking with this object + file and the name space must not be polluted. */ +# define strcasecmp __strcasecmp + +# ifndef mempcpy +# define mempcpy __mempcpy +# endif +# define HAVE_MEMPCPY 1 + +/* We need locking here since we can be called from different places. */ +# include <bits/libc-lock.h> + +__libc_lock_define_initialized (static, lock); +#endif + +#ifndef internal_function +# define internal_function +#endif + +/* For those loosing systems which don't have `alloca' we have to add + some additional code emulating it. */ +#ifdef HAVE_ALLOCA +/* Nothing has to be done. */ +# define ADD_BLOCK(list, address) /* nothing */ +# define FREE_BLOCKS(list) /* nothing */ +#else +struct block_list +{ + void *address; + struct block_list *next; +}; +# define ADD_BLOCK(list, addr) \ + do { \ + struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ + /* If we cannot get a free block we cannot add the new element to \ + the list. */ \ + if (newp != NULL) { \ + newp->address = (addr); \ + newp->next = (list); \ + (list) = newp; \ + } \ + } while (0) +# define FREE_BLOCKS(list) \ + do { \ + while (list != NULL) { \ + struct block_list *old = list; \ + list = list->next; \ + free (old); \ + } \ + } while (0) +# undef alloca +# define alloca(size) (malloc (size)) +#endif /* have alloca */ + +#if defined _LIBC_REENTRANT || defined HAVE_FGETS_UNLOCKED +# undef fgets +# define fgets(buf, len, s) fgets_unlocked (buf, len, s) +#endif +#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED +# undef feof +# define feof(s) feof_unlocked (s) +#endif + + +struct alias_map +{ + const char *alias; + const char *value; +}; + + +static char *string_space = NULL; +static size_t string_space_act = 0; +static size_t string_space_max = 0; +static struct alias_map *map; +static size_t nmap = 0; +static size_t maxmap = 0; + + +/* Prototypes for local functions. */ +static size_t read_alias_file PARAMS ((const char *fname, int fname_len)) + internal_function; +static void extend_alias_table PARAMS ((void)); +static int alias_compare PARAMS ((const struct alias_map *map1, + const struct alias_map *map2)); + + +const char * +_nl_expand_alias (name) + const char *name; +{ + static const char *locale_alias_path = LOCALE_ALIAS_PATH; + struct alias_map *retval; + const char *result = NULL; + size_t added; + +#ifdef _LIBC + __libc_lock_lock (lock); +#endif + + do + { + struct alias_map item; + + item.alias = name; + + if (nmap > 0) + retval = (struct alias_map *) bsearch (&item, map, nmap, + sizeof (struct alias_map), + (int (*) PARAMS ((const void *, + const void *)) + ) alias_compare); + else + retval = NULL; + + /* We really found an alias. Return the value. */ + if (retval != NULL) + { + result = retval->value; + break; + } + + /* Perhaps we can find another alias file. */ + added = 0; + while (added == 0 && locale_alias_path[0] != '\0') + { + const char *start; + + while (locale_alias_path[0] == ':') + ++locale_alias_path; + start = locale_alias_path; + + while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':') + ++locale_alias_path; + + if (start < locale_alias_path) + added = read_alias_file (start, locale_alias_path - start); + } + } + while (added != 0); + +#ifdef _LIBC + __libc_lock_unlock (lock); +#endif + + return result; +} + + +static size_t +internal_function +read_alias_file (fname, fname_len) + const char *fname; + int fname_len; +{ +#ifndef HAVE_ALLOCA + struct block_list *block_list = NULL; +#endif + FILE *fp; + char *full_fname; + size_t added; + static const char aliasfile[] = "/locale.alias"; + + full_fname = (char *) alloca (fname_len + sizeof aliasfile); + ADD_BLOCK (block_list, full_fname); +#ifdef HAVE_MEMPCPY + mempcpy (mempcpy (full_fname, fname, fname_len), + aliasfile, sizeof aliasfile); +#else + memcpy (full_fname, fname, fname_len); + memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); +#endif + + fp = fopen (full_fname, "r"); + if (fp == NULL) + { + FREE_BLOCKS (block_list); + return 0; + } + + added = 0; + while (!feof (fp)) + { + /* It is a reasonable approach to use a fix buffer here because + a) we are only interested in the first two fields + b) these fields must be usable as file names and so must not + be that long + */ + char buf[BUFSIZ]; + char *alias; + char *value; + char *cp; + + if (fgets (buf, sizeof buf, fp) == NULL) + /* EOF reached. */ + break; + + /* Possibly not the whole line fits into the buffer. Ignore + the rest of the line. */ + if (strchr (buf, '\n') == NULL) + { + char altbuf[BUFSIZ]; + do + if (fgets (altbuf, sizeof altbuf, fp) == NULL) + /* Make sure the inner loop will be left. The outer loop + will exit at the `feof' test. */ + break; + while (strchr (altbuf, '\n') == NULL); + } + + cp = buf; + /* Ignore leading white space. */ + while (isspace (cp[0])) + ++cp; + + /* A leading '#' signals a comment line. */ + if (cp[0] != '\0' && cp[0] != '#') + { + alias = cp++; + while (cp[0] != '\0' && !isspace (cp[0])) + ++cp; + /* Terminate alias name. */ + if (cp[0] != '\0') + *cp++ = '\0'; + + /* Now look for the beginning of the value. */ + while (isspace (cp[0])) + ++cp; + + if (cp[0] != '\0') + { + size_t alias_len; + size_t value_len; + + value = cp++; + while (cp[0] != '\0' && !isspace (cp[0])) + ++cp; + /* Terminate value. */ + if (cp[0] == '\n') + { + /* This has to be done to make the following test + for the end of line possible. We are looking for + the terminating '\n' which do not overwrite here. */ + *cp++ = '\0'; + *cp = '\n'; + } + else if (cp[0] != '\0') + *cp++ = '\0'; + + if (nmap >= maxmap) + extend_alias_table (); + + alias_len = strlen (alias) + 1; + value_len = strlen (value) + 1; + + if (string_space_act + alias_len + value_len > string_space_max) + { + /* Increase size of memory pool. */ + size_t new_size = (string_space_max + + (alias_len + value_len > 1024 + ? alias_len + value_len : 1024)); + char *new_pool = (char *) realloc (string_space, new_size); + if (new_pool == NULL) + { + FREE_BLOCKS (block_list); + return added; + } + string_space = new_pool; + string_space_max = new_size; + } + + map[nmap].alias = memcpy (&string_space[string_space_act], + alias, alias_len); + string_space_act += alias_len; + + map[nmap].value = memcpy (&string_space[string_space_act], + value, value_len); + string_space_act += value_len; + + ++nmap; + ++added; + } + } + } + + /* Should we test for ferror()? I think we have to silently ignore + errors. --drepper */ + fclose (fp); + + if (added > 0) + qsort (map, nmap, sizeof (struct alias_map), + (int (*) PARAMS ((const void *, const void *))) alias_compare); + + FREE_BLOCKS (block_list); + return added; +} + + +static void +extend_alias_table () +{ + size_t new_size; + struct alias_map *new_map; + + new_size = maxmap == 0 ? 100 : 2 * maxmap; + new_map = (struct alias_map *) realloc (map, (new_size + * sizeof (struct alias_map))); + if (new_map == NULL) + /* Simply don't extend: we don't have any more core. */ + return; + + map = new_map; + maxmap = new_size; +} + + +#ifdef _LIBC +static void __attribute__ ((unused)) +free_mem (void) +{ + if (string_space != NULL) + free (string_space); + if (map != NULL) + free (map); +} +text_set_element (__libc_subfreeres, free_mem); +#endif + + +static int +alias_compare (map1, map2) + const struct alias_map *map1; + const struct alias_map *map2; +{ +#if defined _LIBC || defined HAVE_STRCASECMP + return strcasecmp (map1->alias, map2->alias); +#else + const unsigned char *p1 = (const unsigned char *) map1->alias; + const unsigned char *p2 = (const unsigned char *) map2->alias; + unsigned char c1, c2; + + if (p1 == p2) + return 0; + + do + { + /* I know this seems to be odd but the tolower() function in + some systems libc cannot handle nonalpha characters. */ + c1 = isupper (*p1) ? tolower (*p1) : *p1; + c2 = isupper (*p2) ? tolower (*p2) : *p2; + if (c1 == '\0') + break; + ++p1; + ++p2; + } + while (c1 == c2); + + return c1 - c2; +#endif +} diff --git a/intl/po2tbl.sed.in b/intl/po2tbl.sed.in new file mode 100644 index 000000000..b3bcca4d7 --- /dev/null +++ b/intl/po2tbl.sed.in @@ -0,0 +1,102 @@ +# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets +# Copyright (C) 1995 Free Software Foundation, Inc. +# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +1 { + i\ +/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot. */\ +\ +#if HAVE_CONFIG_H\ +# include <config.h>\ +#endif\ +\ +#include "libgettext.h"\ +\ +const struct _msg_ent _msg_tbl[] = { + h + s/.*/0/ + x +} +# +# Write msgid entries in C array form. +# +/^msgid/ { + s/msgid[ ]*\(".*"\)/ {\1/ + tb +# Append the next line + :b + N +# Look whether second part is continuation line. + s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/ +# Yes, then branch. + ta +# Because we assume that the input file correctly formed the line +# just read cannot be again be a msgid line. So it's safe to ignore +# it. + s/\(.*\)\n.*/\1/ + bc +# We found a continuation line. But before printing insert '\'. + :a + s/\(.*\)\(\n.*\)/\1\\\2/ + P +# We cannot use D here. + s/.*\n\(.*\)/\1/ +# Some buggy seds do not clear the `successful substitution since last ``t''' +# flag on `N', so we do a `t' here to clear it. + tb +# Not reached + :c + x +# The following nice solution is by +# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de> + td +# Increment a decimal number in pattern space. +# First hide trailing `9' digits. + :d + s/9\(_*\)$/_\1/ + td +# Assure at least one digit is available. + s/^\(_*\)$/0\1/ +# Increment the last digit. + s/8\(_*\)$/9\1/ + s/7\(_*\)$/8\1/ + s/6\(_*\)$/7\1/ + s/5\(_*\)$/6\1/ + s/4\(_*\)$/5\1/ + s/3\(_*\)$/4\1/ + s/2\(_*\)$/3\1/ + s/1\(_*\)$/2\1/ + s/0\(_*\)$/1\1/ +# Convert the hidden `9' digits to `0's. + s/_/0/g + x + G + s/\(.*\)\n\([0-9]*\)/\1, \2},/ + s/\(.*\)"$/\1/ + p +} +# +# Last line. +# +$ { + i\ +};\ + + g + s/0*\(.*\)/int _msg_tbl_length = \1;/p +} +d diff --git a/intl/textdomain.c b/intl/textdomain.c new file mode 100644 index 000000000..88557460f --- /dev/null +++ b/intl/textdomain.c @@ -0,0 +1,108 @@ +/* Implementation of the textdomain(3) function. + Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. + Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. + + 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, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#if defined STDC_HEADERS || defined _LIBC +# include <stdlib.h> +#endif + +#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC +# include <string.h> +#else +# include <strings.h> +# ifndef memcpy +# define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num) +# endif +#endif + +#ifdef _LIBC +# include <libintl.h> +#else +# include "libgettext.h" +#endif + +/* @@ end of prolog @@ */ + +/* Name of the default text domain. */ +extern const char _nl_default_default_domain[]; + +/* Default text domain in which entries for gettext(3) are to be found. */ +extern const char *_nl_current_default_domain; + + +/* Names for the libintl functions are a problem. They must not clash + with existing names and they should follow ANSI C. But this source + code is also used in GNU C Library where the names have a __ + prefix. So we have to make a difference here. */ +#ifdef _LIBC +# define TEXTDOMAIN __textdomain +# ifndef strdup +# define strdup(str) __strdup (str) +# endif +#else +# define TEXTDOMAIN textdomain__ +#endif + +/* Set the current default message catalog to DOMAINNAME. + If DOMAINNAME is null, return the current default. + If DOMAINNAME is "", reset to the default of "messages". */ +char * +TEXTDOMAIN (domainname) + const char *domainname; +{ + char *old; + + /* A NULL pointer requests the current setting. */ + if (domainname == NULL) + return (char *) _nl_current_default_domain; + + old = (char *) _nl_current_default_domain; + + /* If domain name is the null string set to default domain "messages". */ + if (domainname[0] == '\0' + || strcmp (domainname, _nl_default_default_domain) == 0) + _nl_current_default_domain = _nl_default_default_domain; + else + { + /* If the following malloc fails `_nl_current_default_domain' + will be NULL. This value will be returned and so signals we + are out of core. */ +#if defined _LIBC || defined HAVE_STRDUP + _nl_current_default_domain = strdup (domainname); +#else + size_t len = strlen (domainname) + 1; + char *cp = (char *) malloc (len); + if (cp != NULL) + memcpy (cp, domainname, len); + _nl_current_default_domain = cp; +#endif + } + + if (old != _nl_default_default_domain) + free (old); + + return (char *) _nl_current_default_domain; +} + +#ifdef _LIBC +/* Alias for function name in GNU C Library. */ +weak_alias (__textdomain, textdomain); +#endif diff --git a/intl/xopen-msg.sed b/intl/xopen-msg.sed new file mode 100644 index 000000000..b19c0bbd0 --- /dev/null +++ b/intl/xopen-msg.sed @@ -0,0 +1,104 @@ +# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file +# Copyright (C) 1995 Free Software Foundation, Inc. +# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. +# +# 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# The first directive in the .msg should be the definition of the +# message set number. We use always set number 1. +# +1 { + i\ +$set 1 # Automatically created by po2msg.sed + h + s/.*/0/ + x +} +# +# We copy all comments into the .msg file. Perhaps they can help. +# +/^#/ s/^#[ ]*/$ /p +# +# We copy the original message as a comment into the .msg file. +# +/^msgid/ { +# Does not work now +# /"$/! { +# s/\\$// +# s/$/ ... (more lines following)"/ +# } + s/^msgid[ ]*"\(.*\)"$/$ Original Message: \1/ + p +} +# +# The .msg file contains, other then the .po file, only the translations +# but each given a unique ID. Starting from 1 and incrementing by 1 for +# each message we assign them to the messages. +# It is important that the .po file used to generate the cat-id-tbl.c file +# (with po-to-tbl) is the same as the one used here. (At least the order +# of declarations must not be changed.) +# +/^msgstr/ { + s/msgstr[ ]*"\(.*\)"/\1/ + x +# The following nice solution is by +# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de> + td +# Increment a decimal number in pattern space. +# First hide trailing `9' digits. + :d + s/9\(_*\)$/_\1/ + td +# Assure at least one digit is available. + s/^\(_*\)$/0\1/ +# Increment the last digit. + s/8\(_*\)$/9\1/ + s/7\(_*\)$/8\1/ + s/6\(_*\)$/7\1/ + s/5\(_*\)$/6\1/ + s/4\(_*\)$/5\1/ + s/3\(_*\)$/4\1/ + s/2\(_*\)$/3\1/ + s/1\(_*\)$/2\1/ + s/0\(_*\)$/1\1/ +# Convert the hidden `9' digits to `0's. + s/_/0/g + x +# Bring the line in the format `<number> <message>' + G + s/^[^\n]*$/& / + s/\(.*\)\n\([0-9]*\)/\2 \1/ +# Clear flag from last substitution. + tb +# Append the next line. + :b + N +# Look whether second part is a continuation line. + s/\(.*\n\)"\(.*\)"/\1\2/ +# Yes, then branch. + ta + P + D +# Note that `D' includes a jump to the start!! +# We found a continuation line. But before printing insert '\'. + :a + s/\(.*\)\(\n.*\)/\1\\\2/ + P +# We cannot use the sed command `D' here + s/.*\n\(.*\)/\1/ + tb +} +d diff --git a/libkcc/Makefile.am b/libkcc/Makefile.am new file mode 100644 index 000000000..a60b56e3c --- /dev/null +++ b/libkcc/Makefile.am @@ -0,0 +1,54 @@ +noinst_LIBRARIES = libkcc.a + +libkcc_a_SOURCES = \ + compare.c \ + getstr.c \ + guess.c \ + showcode.c \ + check.c \ + filter.c \ + buffer.c \ + dec.c \ + euc.c \ + jis.c \ + out.c \ + outchar.c \ + setfunc.c \ + sjis.c \ + kcc.h \ + libkcc.h + +EXTRA_DIST = \ + Makefile.std \ + ROUTINE \ + outsjis.c \ + test.c \ + test_check.c \ + test_file \ + test_file.sjis \ + test_filter.c \ + testfile + +#lib_LTLIBRARIES = libkcc.la + +#libkcc_la_SOURCES = \ +# compare.c \ +# getstr.c \ +# guess.c \ +# showcode.c \ +# check.c \ +# filter.c \ +# buffer.c \ +# dec.c \ +# euc.c \ +# jis.c \ +# out.c \ +# outchar.c \ +# setfunc.c \ +# sjis.c \ +# kcc.h \ +# libkcc.h + +#libkcc_la_LDFLAGS = \ +# -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ +# -release $(LT_RELEASE) diff --git a/libkcc/Makefile.in b/libkcc/Makefile.in new file mode 100644 index 000000000..397e2ebfd --- /dev/null +++ b/libkcc/Makefile.in @@ -0,0 +1,399 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GDK_IMLIB_CFLAGS = @GDK_IMLIB_CFLAGS@ +GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GPGME_CFLAGS = @GPGME_CFLAGS@ +GPGME_CONFIG = @GPGME_CONFIG@ +GPGME_LIBS = @GPGME_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +IMLIB_CFLAGS = @IMLIB_CFLAGS@ +IMLIB_CONFIG = @IMLIB_CONFIG@ +IMLIB_LIBS = @IMLIB_LIBS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ +localedir = @localedir@ +manualdir = @manualdir@ + +noinst_LIBRARIES = libkcc.a + +libkcc_a_SOURCES = compare.c getstr.c guess.c showcode.c check.c filter.c buffer.c dec.c euc.c jis.c out.c outchar.c setfunc.c sjis.c kcc.h libkcc.h + + +EXTRA_DIST = Makefile.std ROUTINE outsjis.c test.c test_check.c test_file test_file.sjis test_filter.c testfile + +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +CPPFLAGS = @CPPFLAGS@ +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +libkcc_a_LIBADD = +libkcc_a_OBJECTS = compare.o getstr.o guess.o showcode.o check.o \ +filter.o buffer.o dec.o euc.o jis.o out.o outchar.o setfunc.o sjis.o +AR = ar +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = README Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/buffer.P .deps/check.P .deps/compare.P .deps/dec.P \ +.deps/euc.P .deps/filter.P .deps/getstr.P .deps/guess.P .deps/jis.P \ +.deps/out.P .deps/outchar.P .deps/setfunc.P .deps/showcode.P \ +.deps/sjis.P +SOURCES = $(libkcc_a_SOURCES) +OBJECTS = $(libkcc_a_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign libkcc/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-noinstLIBRARIES: + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) + +distclean-noinstLIBRARIES: + +maintainer-clean-noinstLIBRARIES: + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +libkcc.a: $(libkcc_a_OBJECTS) $(libkcc_a_DEPENDENCIES) + -rm -f libkcc.a + $(AR) cru libkcc.a $(libkcc_a_OBJECTS) $(libkcc_a_LIBADD) + $(RANLIB) libkcc.a + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = libkcc + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign libkcc/Makefile + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: +uninstall: uninstall-am +all-am: Makefile $(LIBRARIES) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-noinstLIBRARIES clean-compile clean-libtool clean-tags \ + clean-depend clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-noinstLIBRARIES distclean-compile \ + distclean-libtool distclean-tags distclean-depend \ + distclean-generic clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-noinstLIBRARIES \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-depend \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-noinstLIBRARIES distclean-noinstLIBRARIES \ +clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +#lib_LTLIBRARIES = libkcc.la + +#libkcc_la_SOURCES = \ +# compare.c \ +# getstr.c \ +# guess.c \ +# showcode.c \ +# check.c \ +# filter.c \ +# buffer.c \ +# dec.c \ +# euc.c \ +# jis.c \ +# out.c \ +# outchar.c \ +# setfunc.c \ +# sjis.c \ +# kcc.h \ +# libkcc.h + +#libkcc_la_LDFLAGS = \ +# -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ +# -release $(LT_RELEASE) + +# 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: diff --git a/libkcc/Makefile.std b/libkcc/Makefile.std new file mode 100644 index 000000000..2eb9cdf74 --- /dev/null +++ b/libkcc/Makefile.std @@ -0,0 +1,54 @@ +PRG = libkcc.a +SHLIB = libkcc.so.0.2.0 +CC = gcc +CFLAGS = -g -O2 -Wall + +PREFIX = /usr/local + +LIBDIR = $(PREFIX)/lib +INCDIR = $(PREFIX)/include + +SRC_C = compare.c getstr.c guess.c showcode.c +SRC_1 = check.c +SRC_2 = filter.c buffer.c dec.c euc.c jis.c out.c outchar.c setfunc.c sjis.c + +SRCS = $(SRC_C) $(SRC_1) $(SRC_2) + +HDRS = filter.h kcc.h setfunc.h + +OBJS = $(SRCS:.c=.o) +OBJ_C = $(SRC_C:.c=.o) +OBJ_1 = $(SRC_1:.c=.o) +OBJ_2 = $(SRC_2:.c=.o) + +.c.o: + $(CC) $(CFLAGS) -c $< + +all: $(PRG) + +$(PRG): $(OBJS) + ar crv $(PRG) $(OBJS) + +shared: + $(CC) -shared $(OBJS) -Wl,-soname,libkcc.so.0 -o $(SHLIB) \ + -Wl,--rpath,$(LIBDIR) + +install: + cp kcc.h $(INCDIR)/ + cp $(PRG) $(LIBDIR)/ + cp $(SHLIB) $(LIBDIR)/ + cd $(LIBDIR) + ln -s $(SHLIB) libkcc.so + ldconfig + +clean: + rm -f *.o $(PRG) test test_check test_filter *~ + +test_check: test_check.o $(OBJ_C) $(OBJ_1) + $(CC) $(CFLAGS) -o test_check test_check.o $(OBJ_C) $(OBJ_1) + +test_filter: test_filter.o $(OBJ_C) $(OBJ_2) + $(CC) $(CFLAGS) -o test_filter test_filter.o $(OBJ_C) $(OBJ_2) + +test: test.o $(PRG) + $(CC) $(CFLAGS) -o test test.o $(PRG) diff --git a/libkcc/README b/libkcc/README new file mode 100644 index 000000000..04429e8eb --- /dev/null +++ b/libkcc/README @@ -0,0 +1,461 @@ +************************************************ +libkcc README +************************************************ +1999-04-20 + +¤³¤ì¤Ï¡¢kcc-2.3 ¤ò¡¢lib ²½¤·¤¿¤â¤Î¤Ç¤¹¡£ +¥é¥¤¥»¥ó¥¹¤Ï¡¢¸µ¤Î kcc-2.3 ¤¬ GPL2 ¤Ç¤¹¤Î¤Ç¡¢¤½¤ì¤Ë½¾¤¤¤Þ¤¹¡£ + +¤Þ¤À kcc ¤ÎÁ´¤Æ¤Î°ú¿ô¤Ï»ÈÍѤǤ­¤Þ¤»¤ó¤¬¡¢¤Þ¡¢¤È¤ê¤¢¤¨¤º¥Ð¡¼¥¸¥ç¥ó¤È¤¤¤¦¤³¤È¤Ç¡£ + +-------------------------- +1. »È¤¤¤«¤¿(´Ø¿ô¤ÎÀâÌÀ) +-------------------------- +´Á»ú¥³¡¼¥ÉȽÄê¤ò¹Ô¤¦´Ø¿ô¤È¡¢´Á»úÊÑ´¹¤ò¹Ô¤¦´Ø¿ô¤ÎÆó¤Ä¤òÍÑ°Õ¤·¤Þ¤·¤¿¡£ + +¥³¡¼¥ÉȽÄꡧ + unsigned KCC_check(char *s, int extend); + +ÊÑ´¹: KCC_filter() + int KCC_filter(char *ddd, char *outcode_name, char *sss, char *incode_name, int extend, int zenkaku, int gaiji); + +-------------------------- +1-1. ¥³¡¼¥ÉȽÄê´Ø¿ô +-------------------------- +unsigned KCC_check(char *s, int extend); + +¥³¡¼¥É¤òÄ´¤Ù¤¿¤¤ ʸ»úÎó(char * ·¿)¤ò Âè1°ú¿ô¤ËÍ¿¤¨¤ë¤È¡¢¥³¡¼¥É¤¬ÊÖ¤ê¤Þ¤¹ + + code = KCC_check(s,0); + +ÂèÆó°ú¿ô¤Î `int extend' ¤Ï¡¢ 0 ¤« 1 ¤Ç¤¹¡£ÉáÄÌ¡¢0 ¤òÍ¿¤¨¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤¹ + 1 ¡§ ¥ª¥ê¥¸¥Ê¥ë¤Î kcc -x ¤ÈƱÍͤÎÆ°¤­¤ò¤¹¤ë¤Ï¤º + 0 ¡§ Ä̾ï¤Ï¤³¤Á¤é¤ò»ØÄꤷ¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤·¤ç¤¦ + +ÊÖ¤µ¤ì¤ëÃͤϡ¢¼¡¤Î¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹ +-------------------------- +1-2. ¥³¡¼¥É¤ÎÈÖ¹æ +-------------------------- +#define BINARY 0x100 +#define ASCII 0x00 + +#define NONASCII 0x01 /* non-ASCII character */ +#define JIS 0x02 /* JIS */ +#define ESCI 0x04 /* "ESC(I" */ +#define ASSUME 0x08 /* assumed EUC (or DEC) */ +#define EUC 0x10 +#define DEC 0x20 +#define SJIS 0x40 +#define JIS8 0x80 /* 8-bit JIS */ +#define BIT8 (EUC | DEC | SJIS | JIS8) + +-------------------------- +1-3. ´Á»úÊÑ´¹´Ø¿ô +-------------------------- + int KCC_filter(char *ddd, char *outcode_name, char *sss, char *incode_name + , int extend, int zenkaku, int gaiji); + +ÊÑ´¹¤·¤¿¤¤Ê¸»úÎó (char *) ·¿ ¤ò sss +ÊÑ´¹¸å¤Îʸ»úÎó (char *) ·¿ ¤ò ddd +¤È¤·¤Þ¤¹¡£ + +ÊÖ¤êÃͤϴÁ»ú¥³¡¼¥É(1-2) ¤¬ÊÖ¤ê¤Þ¤¹¤¬¡¢ +¼ºÇÔ¤¹¤ë¤È -1 ¤¬ÊÖ¤ê¤Þ¤¹¡£ +0 ¤¬ÊÖ¤ë¾ì¹ç¤Ï ASCII ¤À¤È¤¤¤¦»ö¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£ + +Î㡧 +i = KCC_filter(d, "EUC", s, "AUTO", 0,0,0); + + +¡ªÃí°Õ¡§ + ddd ¤ÏÊÑ´¹Ê¸»ú¤òǼ¤á¤ë¤Ë½¼Ê¬¤ÊÎΰ褬¤¢¤é¤«¤¸¤á¤È¤Ã¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ + ¤³¤Î´Ø¿ô¤Ï¡¢strcpy ¤ß¤¿¤¤¤Ê¤â¤Î¤Ç¡¢sss ¤òÊÑ´¹¤·¤¿¤â¤Î¤ò¡¢ddd ¤Î¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤ò + ¥Á¥§¥Ã¥¯¤¹¤ë»ö̵¤¯¡¢ ddd ¤Ë½ç¼¡¥³¥Ô¡¼¤·¤Æ¤¤¤¯¤Î¤Ç¤¹¡ª + + +outcode_name, incode_name ¤Ï¡¢´Á»ú¤Î¥³¡¼¥É¤Î»ØÄê¤Ç¤¹¡£ + outcode_name¡§ ½ÐÎÏ¥³¡¼¥É¤ò»ØÄê + incode_name¡§ ÆþÎÏ¥³¡¼¥É¤ò»ØÄê + +¥³¡¼¥É¤Ï¡¢°Ê²¼¤Î "ʸ»ú" ¤Ç¡¢»ØÄꤷ¤Þ¤¹¡£ + ´Á»ú¥³¡¼¥É¡§ ʸ»ú¡§ ÀâÌÀ + ----------------------------------------------------------------- + EUC "EUC" euc + SJIS "SJIS" sjis + JIS 8bit "JIS8" 8 bit JIS + JIS "JIS" jis + JIS ESCI "JISI" jis ¤Ç¡¢ESC(I ¤ò»ÈÍѤ·¤Æ¤¤¤ë¤â¤Î + + ¼«Æ°È½ÊÌ "AUTO" incode_name ¤Ë¤Î¤ßÍ­¸ú¡£¥³¡¼¥É¤ò¼«Æ°È½Ê̤¹¤ë + + JIS, JISI, JIS8 ¤À¤±¤Ï¡¢¼¡¤ÎÆÃÊ̤ʻØÄê¤ò¹Ô¤¦»ö¤¬¤Ç¤­¤Þ¤¹¡£ + ¤³¤ì¤Ï¡¢outcode_name ¤Ë¤Î¤ßÍ­¸ú¤Ê¥ª¥×¥·¥ç¥ó¤Ç¡¢ + ¥ª¥ê¥¸¥Ê¥ë¤Î kcc ¤Î kcc -j[B@+][BJH] »ØÄê¤ÈƱ¤¸¤Ë¤Ê¤ê¤Þ¤¹ + + JIS[B@+][BJH] + JISI[B@+][BJH] + JIS8[B@+][BJH] + + Âè°ì + B: Âè1¼¡´Á»úɽ¼¨ + @: Âè2¼¡´Á»úɽ¼¨ + +: Âè3¼¡´Á»úɽ¼¨ + ÂèÆó + B: ±Ñ¿ô¤Ï ASCII »ØÄê + J: ±Ñ¿ô¤Ï JIS ¥í¡¼¥Þ»ú»ØÄê + H: ±Ñ¿ô¤Ï ¥¹¥¦¥§¡¼¥Ç¥ó + ----------------------------------------------------------------- + + +Âè5°ú¿ô¤Î `int extend' ¤Ï¡¢ 0 ¤« 1 ¤Ç¤¹¡£ÉáÄÌ¡¢0 ¤òÍ¿¤¨¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤¹ + 1 ¡§ ¥ª¥ê¥¸¥Ê¥ë¤Î kcc -x ¤ÈƱÍͤÎÆ°¤­¤ò¤¹¤ë¤Ï¤º + 0 ¡§ Ä̾ï¤Ï¤³¤Á¤é¤ò»ØÄꤷ¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤·¤ç¤¦ + +Âè6°ú¿ô¤Î `int zenkaku' ¤Ï¡¢ 0 ¤« 1 ¤Ç¤¹¡£ÉáÄÌ¡¢0 ¤òÍ¿¤¨¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤¹ + 1 ¡§ ¥ª¥ê¥¸¥Ê¥ë¤Î kcc -z ¤ÈƱÍͤÎÆ°¤­¤ò¤¹¤ë¤Ï¤º + 0 ¡§ Ä̾ï¤Ï¤³¤Á¤é¤ò»ØÄꤷ¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤·¤ç¤¦ + +Âè7°ú¿ô¤Î `int gaiji' ¤Ï¡¢ 0 ¤« 1 ¤Ç¤¹¡£ÉáÄÌ¡¢0 ¤òÍ¿¤¨¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤¹ + 1 ¡§ ¥ª¥ê¥¸¥Ê¥ë¤Î kcc -n ¤ÈƱÍͤÎÆ°¤­¤ò¤¹¤ë¤Ï¤º + 0 ¡§ Ä̾ï¤Ï¤³¤Á¤é¤ò»ØÄꤷ¤Æ¤ª¤±¤Ð¤è¤¤¤Ç¤·¤ç¤¦ + +-------------------------- +2. Make +-------------------------- +edit Makefile +shell> make +shell> ls libkcc.a + +-------------------------- +3. ¥¤¥ó¥¹¥È¡¼¥ë +-------------------------- +shell> make install + +¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤ë¤Î¤Ï¡¢libkcc.a ¤È kcc.h ¤À¤±¤Ç¤¹ + +-------------------------- +4. TODO +-------------------------- +1. gcc -Wall ¤Ç¤¤¤Ã¤Ñ¤¤¥¦¥©¡¼¥Ë¥ó¥° +2. ¥ª¥ê¥¸¥Ê¥ë¤Î kcc.c ¤òÊ£¿ô¤Î¥Õ¥¡¥¤¥ë¤Ë¤ï¤±¤¿¤Î¤Ï¡¢»ä¤Î¼ñÌ£¤Ç¤¹¤¬¡¢ + ¤ª¤«¤²¤Ç¡¢´Ø¿ô¤Î°ú¿ô¤¬Â¿¤¯¤Ê¤Ã¤Æ¤·¤Þ¤¤¤Þ¤·¤¿¡£ + ÃÙ¤¯¤Ê¤ë¡© +3. ÅϤµ¤ì¤¿Ê¸»úÎó¤Î½èÍý¤¬¤Á¤ç¤Ã¤È¤ä¤Ü¤Ã¤¿¤¤¤Ç¤¹¡£ + ´í¸±¤ÊÉôʬ¤¬¤¢¤ë¤«¤â¤·¤ì¤Þ¤»¤ó¡£(euc.c,jis.c,sjis.c,dec.c) +4. Ⱦ³Ñʸ»ú¤òÁ´³Ñ¤Ë¤·¤¿¤¤¤±¤É... +5. ¤¿¤Ö¤ó¤¢¤ë¤À¤í¤¦ bug fix + +°Ê¾å¡¢¤É¤Ê¤¿¤«Ã£¼Ô¤ÊÊý¡¢¤è¤í¤·¤¯¡£ + +-------------------------- +5. Îã +-------------------------- +test.c, test_check.c, test_filter.c ¤¬¤¢¤ê¤Þ¤¹ + +make test +make test_filer +make test_check + +-------------------------- +-------------------------- + +takeshi@SoftAgency.co.jp +http://www.softagency.co.jp/mysql/ + +************************************************ +¥ª¥ê¥¸¥Ê¥ë¤Î README +************************************************ + +kcc¤Ï¡¤¼«Æ°È½Ê̵¡Ç½¤Ä¤­´Á»ú¥³¡¼¥É¥Õ¥£¥ë¥¿¡¼¤Ç¤¹¡£ + +¡ÚÀâÌÀ¡Û + + ÆüËܸìEUC¡¤7¥Ó¥Ã¥ÈJIS¡¤8¥Ó¥Ã¥ÈJIS¡¤¥·¥Õ¥ÈJIS¤¬°·¤¨¤Þ¤¹¡£ + + ¡ÖȾ³Ñ¤«¤Ê¡×¤Ë¤âÂбþ¤·¤Æ¤¤¤Þ¤¹¡£ + + ¾Ü¤·¤¯¤ÏÆüËܸ쥪¥ó¥é¥¤¥ó¥Þ¥Ë¥å¥¢¥ë¤Ç¸«¤Æ²¼¤µ¤¤¡£ + +¡Ú¥¤¥ó¥¹¥È¡¼¥ë¡Û + + $ make install + + ¤Ç¡¤make¤È¥¤¥ó¥¹¥È¡¼¥ë¤¬¹Ô¤ï¤ì¤Þ¤¹¡£ + + $ make install.man + + ¤Ç¡¤ÆüËܸì¥Þ¥Ë¥å¥¢¥ë¤Î¥¤¥ó¥¹¥È¡¼¥ë¤¬¹Ô¤ï¤ì¤Þ¤¹¡£ + ÆüËܸì¥Þ¥Ë¥å¥¢¥ë¤Î¥µ¥Ö¥Ç¥£¥ì¥¯¥È¥ê¡¼¤¬¡Æjapanese¡Ç¤Ç¤Ê¤¤¤È¤­¤Ë¤Ï¡¤ + + $ make JMANDIR=ja.JP_EUC install.man + + ¤Ê¤É¤È¤·¤Æ¤¯¤À¤µ¤¤¡£ + + +************************************************ +¥ª¥ê¥¸¥Ê¥ë¤Î kcc.jman ¤ò catman ¤Ë¤·¤¿¤â¤Î +************************************************ + + + +KCC(L) KCC(L) + + +̾̾Á°Á° + kcc - ¼«Æ°È½Ê̵¡Ç½¤Ä¤­´Á»ú¥³¡¼¥ÉÊÑ´¹ + +·Á·Á¼°¼° + kkcccc [ --_I_Occhhnnvvxxzz ] [ --bb _b_u_f_s_i_z_e ] [ _f_i_l_e ] ... + +µ¡µ¡Ç½ǽÀâÀâÌÀÌÀ + kkcccc ¤Ï¡¤»ØÄꤷ¤¿ _f_i_l_e ¤ò½çÈÖ¤ËÆɤ߹þ¤ß¡¤´Á»ú¥³¡¼¥É¤òÊÑ´¹¤· + ¤Æɸ½à½ÐÎϤ˽ÐÎϤ¹¤ë¥Õ¥£¥ë¥¿¡¼¤Ç¤¹¡£¥Õ¥¡¥¤¥ë¤Î»ØÄ꤬¤Ê¤¤¤È + ¤­¡¤ ¤¢¤ë¤¤¤Ï¥Õ¥¡¥¤¥ë̾¤È¤·¤Æ -- ¤¬»ØÄꤵ¤ì¤¿¤È¤­¤Ë¤Ïɸ½àÆþ + ÎϤ«¤éÆɤ߹þ¤ß¤Þ¤¹¡£Æþ½ÐÎϤδÁ»ú¥³¡¼¥É¤Ï¥ª¥×¥·¥ç¥ó¤Ç»ØÄꤷ + ¤Þ¤¹¤¬¡¤ÆþÎÏ¥³¡¼¥É¤ò»ØÄꤷ¤Ê¤¤¤È¥Õ¥¡¥¤¥ë¤´¤È¤Î¼«Æ°È½ÊÌ¤Ë¤Ê + ¤ê¤Þ¤¹¡£ + + »È¤¨¤ë´Á»ú¥³¡¼¥É¤Ï JIS¡Ê7 ¥Ó¥Ã¥È¤ª¤è¤Ó 8 ¥Ó¥Ã¥È¡Ë¡¤¥·¥Õ ¥È + JIS¡¤EUC¡¤DEC ¤Ç¤¹¡£ÆþÎÏ¥³¡¼¥É¤Ï¡¤EUC¡¤DEC ¤¢¤ë¤¤¤Ï¥·¥Õ¥È + JIS ¤Î¤¤¤º¤ì¤«¤È 7 ¥Ó¥Ã¥È JIS ¤È¤ÎÁȤ߹礻¤Ë¸Â¤ê¡¤º®ºß¤¬²Ä + ǽ¤Ç¤¹¡£JIS ¤ÎȾ³Ñ²¾Ì¾¤Ï SSII/SSOO¡¤EESSCC((II ¤È¤â¤Ëǧ¼±¤µ¤ì¤Þ¤¹¡£ + +¥ª¥ª¥×¥×¥·¥·¥ç¥ç¥ó¥ó + --_O + --_I_O _I ¤ÇÆþÎÏ´Á»ú¥³¡¼¥É¤ò¡¤_O ¤Ç½ÐÎÏ´Á»ú¥³¡¼¥É¤ò»ØÄꤷ ¤Þ + ¤¹¡£ Æþ ÎÏ ¥³¡¼¥É¤Î»ØÄ꤬¤Ê¤¤¤È¤­¤Ë¤Ï¼«Æ°È½Ê̤ˡ¤¤Þ + ¤¿¡¤¤É¤Á¤é¤â»ØÄꤷ¤Ê¤¤¤È¤­½ÐÎÏ¥³¡¼¥É¤Ï 7 ¥Ó¥Ã¥È JIS + ¤Ë¤Ê¤ê¤Þ¤¹¡£ + + ÆþÎÏ¥³¡¼¥É¤ò»ØÄꤹ¤ë _I ¤Ï°Ê²¼¤Î¤¦¤Á¤Î 1 ¤Ä¤Ç¤¹¡£ + + ee EUC¡Ê7 ¥Ó¥Ã¥È JIS º®ºß²Ä¡Ë + dd DEC¡Ê7 ¥Ó¥Ã¥È JIS º®ºß²Ä¡Ë + ss ¥·¥Õ¥È JIS¡Ê7 ¥Ó¥Ã¥È JIS º®ºß²Ä¡Ë + jj¡¤77 ¤Þ¤¿¤Ï kk + 7 ¥Ó¥Ã¥È JIS + 88 8 ¥Ó¥Ã¥È JIS + + ½ÐÎÏ¥³¡¼¥É¤ò»ØÄꤹ¤ë _O ¤Ï°Ê²¼¤Î¤¦¤Á¤Î 1 ¤Ä¤Ç¤¹¡£ + + ee EUC + dd DEC + ss ¥·¥Õ¥È JIS + jj_X_Y ¤Þ¤¿¤Ï 77_X_Y + 7 ¥Ó¥Ã¥È JIS¡ÊSSII/SSOO ¤Ë¤è¤ë JIS ²¾Ì¾»Ø¼¨¡Ë + kk_X_Y 7 ¥Ó¥Ã¥È JIS¡ÊEESSCC((II ¤Ë¤è¤ë JIS ²¾Ì¾»Ø¼¨¡Ë + 88_X_Y 8 ¥Ó¥Ã¥È JIS + + _O Ãæ¤Î _X_Y ¤Ç¡¤JIS ¥³¡¼¥É½ÐÎϤǤΥ¨¥¹¥±¡¼¥×¥·¡¼¥¯¥§ + ¥ó¥¹¤¬»ØÄê¤Ç¤­¤Þ¤¹¡£¾Êά¤¹¤ë¤È BBJJ ¤È¤ß¤Ê¤µ¤ì¤Þ ¤¹¡£ + ¤Ê¤ª¡¤Êä½õ´Á»ú»ØÄê¤Ï EESSCC$$((DD ¤Ç¸ÇÄê¤Ç¤¹¡£ + + _X ´Á»ú»ØÄê + BB EESSCC$$BB¡ÊÂè 2 ¼¡µ¬³Ê´Á»ú»Ø¼¨¡Ë + @@ EESSCC$$@@¡ÊÂè 1 ¼¡µ¬³Ê´Á»ú»Ø¼¨¡Ë + ++ EESSCC&&@@EESSCC$$BB¡ÊÂè 3 ¼¡µ¬³Ê´Á»ú»Ø¼¨¡Ë + _Y ±Ñ¿ô»ú»ØÄê + + + +Y. Tonooka 1992ǯ11·î19Æü 1 + + + + + +KCC(L) KCC(L) + + + BB EESSCC((BB¡ÊASCII »Ø¼¨¡Ë + JJ EESSCC((JJ¡ÊJIS ¥í¡¼¥Þ»ú»Ø¼¨¡Ë + HH EESSCC((HH¡Ê¥¹¥¦¥§¡¼¥Ç¥ó̾Á°ÍÑʸ»ú»Ø¼¨¡Ë + + --vv ÆþÎÏ¥³¡¼¥É¤ÎȽÊÌ·ë²Ì¤òɸ½à¥¨¥é¡¼½ÐÎϤ˽ÐÎϤ·¤Þ¤¹¡£ + + --xx ³È Ä¥¥â¡¼¥É¡£ÆþÎÏ¥³¡¼¥É¤Î¼«Æ°È½Ê̤ǡ¤³°»ú¤ä³Èĥʸ»ú + Îΰè¡ÊEUC ¤Î³°»ú¡¦Ì¤ÄêµÁ¤ÎȾ³Ñ²¾Ì¾¡¦À©¸æʸ»ú C1 ¤Î + ³ÆÎΰ衤¤ª¤è¤Ó¥·¥Õ¥È JIS ¤Î³Èĥʸ»úÎΰè¡Ë¤òǧ¼±¤·¤Þ + ¤¹¡£DEC ¤È EUC ¤È¤ÎȽÊ̤Ϥ³¤Î¥â¡¼¥É¤Ç¤Î¤ß¡¤¤Ê¤µ¤ì¤Þ + ¤¹¡£ + + --zz ½Ì ¾®¥â¡¼¥É¡£ÆþÎÏ¥³¡¼¥É¤Î¼«Æ°È½Ê̤ÇȾ³Ñ²¾Ì¾¤òǧ¼±¤· + ¤Þ¤»¤ó¡Ê7 ¥Ó¥Ã¥È JIS ¤ò½ü¤¯¡Ë¡£È¾³Ñ²¾Ì¾¤ò´Þ¤Þ ¤Ê ¤¤ + ¥Õ¥¡ ¥¤¥ë¤Î¾ì¹ç¡¤¤³¤ì¤ò»ØÄꤹ¤ë¤ÈȽÊ̤γÎÅÙ¤¬¹â¤Þ¤ê + ¤Þ¤¹¡£ + + --hh Ⱦ³Ñ²¾Ì¾¤ò DEC ¤ËÊÑ´¹¤¹¤ë¤ÈÁ´³Ñ¤Î¥«¥¿¥«¥Ê¤ËÊÑ´¹¤µ¤ì + ¤Þ ¤¹¤¬¡¤¤³¤Î¥ª¥×¥·¥ç¥ó¤ò»ØÄꤹ¤ë¤È¤Ò¤é¤¬¤Ê¤Ë¤Ê¤ê¤Þ + ¤¹¡£ + + --nn ³°»ú¡¦³Èĥʸ»ú¡¦Êä½õ´Á»úÎΰè¤ò¡È¢¢¡É¤Ë¡¤È¾³Ñ²¾Ì¾ ¤Î + ̤ÄêµÁÎΰè¤òȾ³Ñ¤Î¡È¡¦¡É¤ËÊÑ´¹¤·¤Þ¤¹¡£ + + --bb _b_u_f_s_i_z_e + Æþ ÎϤÎȽÊ̤¬¤Ä¤«¤Ê¤¤¤¢¤¤¤ÀÆþÎϤò¤¿¤á¤Æ¤ª¤¯¥Ð¥Ã¥Õ¥¡ + ¡¼¤ÎÂ礭¤µ¤ò»ØÄꤷ¤Þ¤¹¡£¾Êά»þ¤Ï 8k ¥Ð¥¤¥È¤Ç¤¹¡£ + + --cc ÊÑ´¹¤ò¹Ô¤ï¤º¡¤ÆþÎÏ¥³¡¼¥É¤Î¼ïÎà¤À¤±¤òÄ´¤Ù¡¤·ë²Ì¤ò ɸ + ½à ½Ð ÎÏ ¤Ë½ÐÎϤ·¤Þ¤¹¡£Ä̾ï¤Î¼«Æ°È½Ê̤ξì¹ç¤È¤Ï°Û¤Ê + ¤ê¡¤¥Õ¥¡¥¤¥ë¤ÏºÇ¸å¤Þ¤ÇÄ´¤Ù¤é¤ì¤Þ¤¹¡£¤¿¤À¤·¡¤ÅÓÃæ ¤Ç + ¥³ ¡¼¥ÉÂηϤËÌ·½â¤¬¸«¤Ä¤«¤Ã¤¿¾ì¹ç¤Ë¤ÏÆɤ߹þ¤ß¤òÃæÃÇ + ¤·¡Èdata¡É¤Èɽ¼¨¤·¤Þ¤¹¡£--xx¡¤--zz °Ê³°¤Î¥ª¥×¥·¥ç¥ó¤Ï̵ + ¸ú¤Ë¤Ê¤ê¤Þ¤¹¡£ + +»È»ÈÍÑÍÑÎãÎã + %% kkcccc --ee _f_i_l_e + ÆþÎÏ¥³¡¼¥É¼«Æ°È½Ê̤ǽÐÎÏ¥³¡¼¥É¤Ï EUC + + %% kkcccc --ssjj _f_i_l_e_1 _f_i_l_e_2 + ¥·¥Õ¥È JIS ¤Î¥Õ¥¡¥¤¥ë 2 ¤Ä¤ò JIS ¤ØÊÑ´¹¤·Ï¢·ë + + %% _c_o_m_m_a_n_d || kkcccc --kk++JJ + _c_o_m_m_a_n_d ½ÐÎϤò JIS¡ÊJIS Âè 3 ¼¡µ¬³Ê´Á»ú»Ø¼¨¡¤JIS ¥í + ¡¼¥Þ»ú»Ø¼¨¡¤EESSCC((II ¤Ë¤è¤ë JIS ²¾Ì¾»Ø¼¨¡Ë¤Ø + + %% kkcccc --cc _f_i_l_e + _f_i_l_e ¤Î¥³¡¼¥É¤òȽÊ̤¹¤ë¡ÊÊÑ´¹¤Ï¹Ô¤ï¤Ê¤¤¡Ë + +ÊäÊä­­ÀâÀâÌÀÌÀ + ÆþÎÏ¥³¡¼¥É¤Î¼«Æ°È½Ê̤ÏÄ̾ï¤Îʸ½ñ¤Ë¤ª¤¤¤Æ¤Ï¤Û¤Ü³Î¼Â¤Ë¹Ô¤¨¤Þ + ¤¹¤¬¡¤°Ê²¼¤Î¤è¤¦¤ÊÌäÂê¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡£ + + 7 ¥Ó¥Ã¥È JIS ¤Ï¥¨¥¹¥±¡¼¥×¥·¡¼¥¯¥§¥ó¥¹¤Ë¤è¤ë¥â¡¼¥ÉÀÚ¤êÂؤ¨ + + + +Y. Tonooka 1992ǯ11·î19Æü 2 + + + + + +KCC(L) KCC(L) + + + ¤Ë¤è¤Ã¤Æ¤¤¤Æ³Î¼Â¤ËȽÊ̤µ¤ì¤Þ¤¹¡£EUC ¤È DEC ¤Ïº¬ËÜŪ¤Ë¤Ï Ʊ + ¤¸¤â¤Î¤Ç¤¹¡Ê°Ê²¼ EUC ·Ï¤È¸Æ¤Ö¡Ë¡£°ìÊý¡¤8 ¥Ó¥Ã¥È JIS ¤ÎȾ³Ñ + ²¾Ì¾¤Ï¥·¥Õ¥È JIS ¤ÎȾ³Ñ²¾Ì¾¤ÈƱ¤¸¤Ç¤¹¡ÊƱ¥·¥Õ¥È JIS ·Ï¡Ë¡£ + ¤È ¤³¤í¤¬¡¤¶¦¤Ë 8 ¥Ó¥Ã¥È¥³¡¼¥É¤Ç¤¢¤ë EUC ·Ï¤È¥·¥Õ¥È JIS ·Ï + ¤Ï¡¤Îΰ褬¹­¤¯½Å¤Ê¤Ã¤Æ¤¤¤ÆÇØÈ¿¤·¤Æ¤¤¤Þ¤¹¡£¤Ä¤Þ¤ê¡¤¥³¡¼¥É¤Î + ¼«Æ°È½Äê¤ÎÌäÂêÅÀ¤Ï¤³¤Î 2 ¤Ä¤ÎȽÊ̤ˤ¢¤ê¤Þ¤¹¡£ + + EUC ·Ï/¥·¥Õ¥È JIS ·Ï¤ÎȽÊ̤ϹÔñ°Ì¤Ç¹Ô¤¤¡¤¡Ö¥·¥Õ¥È JIS ·Ï + ¤Ç¤Ê¤¤¡×¤¢¤ë¤¤¤Ï¡ÖEUC ·Ï¤Ç¤Ê¤¤¡×¤Èʬ¤«¤Ã¤¿»þÅÀ¤Ç³ÎÄê¤È¤·¤Þ + ¤¹¡£¤É¤Á¤é¤Ë¤âÌ·½â¤¹¤ë¹Ô¤¬ºÇ½é¤Ë¸½¤ì¤¿¤È¤­¤Ë¤Ï¡Èdata¡É°·¤¤ + ¤Ë¤Ê¤ê¡¤½ÐÎÏÆâÍƤÏÊݾڤµ¤ì¤Þ¤»¤ó¡£ + + ºÇ½é¤Ë 8 ¥Ó¥Ã¥È¤Î´Á»ú¥³¡¼¥É¤¬¸½¤ì¤Æ¤«¤é EUC ·Ï/¥·¥Õ¥È JIS + ·Ï¤ÎȽÊ̤¬¤Ä¤¯¤Þ¤Ç¤Ï¡¤ÊÑ´¹¤òÊÝα¤·¡¤ÆþÎϤò¥Ð¥Ã¥Õ¥¡¡¼¤Ë¤¿¤á + ¤Æ¤ª¤­¤Þ¤¹¤¬¡¤¤³¤ì¤¬¤¤¤Ã¤Ñ¤¤¤Ë¤Ê¤ë¤È EUC ·Ï¤Ç¤¢¤ë¤È·è¤á ¤Ä + ¤±¤ÆÊÑ´¹¤ò¶¯¹Ô¤·¤Þ¤¹¡£º¬µò¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£Ä̾ï¤Î´Á»úÆþ + ¤ê¤Îʸ½ñ¤Ï JIS Èó´Á»ú¤« JIS Âè 1 ¿å½à¤Î´Á»ú¤ò¤Þ¤º´Þ¤ó¤Ç ¤¤ + ¤ë ¤È¹Í¤¨¤é¤ì¤Þ¤¹¤¬¡¤¥·¥Õ¥È JIS ¤Î¾ì¹ç¡¤¤³¤ì¤é¤Îʸ»ú¤Ï°ìÉô + ¤ò½ü¤¤¤Æ EUC ·Ï¤ÎÎΰè¤È¤Ï½Å¤Ê¤Ã¤Æ¤¤¤Ê¤¤¤¿¤á¡¤³Î¼Â¤ËȽÊÌ ¤µ + ¤ì ¤Þ¤¹¡£¤Ä¤Þ¤ê¡¤È½Ê̤Ǥ­¤Ê¤¤¤È¤­¤Ë¤Ï EUC ¤Ç¤¢¤ë²ÄǽÀ­¤¬¹â + ¤¤¤ï¤±¤Ç¤¹¡£ + + 8 ¥Ó¥Ã¥È JIS ¤Ç¡¤È¾³Ñ²¾Ì¾¤¬É¬¤º¶ö¿ô¸ÄϢ³¤·¤Æ¸½¤ì¤Æ¤¤¤ë ¤È + ¤­ ¤Ï¡¤EUC ¤Î´Á»ú¤Ç¤¢¤ë¤È¸íǧ¤µ¤ì¤Æ¤·¤Þ¤¦¤Î¤ÇÃí°Õ¤¬É¬Í×¤Ç + ¤¹¡£ + + ÆþÎϤ¬È¾³Ñ²¾Ì¾¤ò´Þ¤Þ¤Ê¤¤¤È¤­¤Ë¤Ï --zz ¥ª¥×¥·¥ç¥ó¤Î½Ì¾®¥â¡¼¥É + ¤òÍøÍѤ¹¤ë¤ÈȽÊ̤γÎÅÙ¤¬¹â¤Þ¤ê¤Þ¤¹¡£¤³¤ì¤Ï½Å¤Ê¤ëÎΰ褬 JIS + Âè 2 ¿å½à´Á»úÆâ¤Ë¸ÂÄꤵ¤ì¤ë¤«¤é¤Ç¤¹¡£ + + ¥·¥Õ¥È JIS ¤Î³ÈÄ¥Îΰ衦EUC ¤Î³°»úÎΰ衦EUC ¤ÎÀ©¸æʸ »ú C1 + ¤ÎÎΰ衦EUC ¤ÎȾ³Ñ²¾Ì¾¤Î̤ÄêµÁÎΰè¤Ï¡¤¼«Æ°È½Ê̤Îǧ¼±ÂÐ¾Ý¤Ë + ¤ÏÆþ¤é¤Ê¤¤¤Î¤Ç¡¤¤³¤ì¤é¤ò´Þ¤àÆþÎϤǤϸí¤Ã¤¿È½Ê̤¬¤Ê¤µ¤ì¤Æ¤· + ¤Þ ¤¤ ¤Þ¤¹¡£¤³¤Î¤È¤­¤Ï --xx ¥ª¥×¥·¥ç¥ó¤Ç³ÈÄ¥¥â¡¼¥É¤ò»ØÄꤹ¤ë + ¤«¡¤ÆþÎÏ¥³¡¼¥É¤òÌÀ¼¨Åª¤Ë»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£ + +´Ø´ØϢϢ¹à¹àÌÜÌÜ + ccaatt(1) + +¤½¤½¤Î¤Î¾¾ + Ä̾³°»ú¡¦³Èĥʸ»ú¡¦Êä½õ´Á»úÎΰè¤Ï¤½¤ì¤¾¤ì¤ÎÂбþ¤¹¤ëÎΰè + ¤Ë Åê±Æ¤µ¤ì¤Þ¤¹¡£¤¿¤À¤·¡¤¥·¥Õ¥È JIS ¤Ø¤ÎÊÑ´¹¤Ç³Èĥʸ»úÎΰè + ¤«¤é¤Ï¤ß½Ð¤¹Ê¸»ú¤Ï¡¤16 ¿Ê¤Ç FCFC ¤Ë¤Ê¤ê¤Þ¤¹¡£ EUC ¤È DEC + ¤Î À© ¸æ ʸ»úÎΰè C1 ¤Ï¡¤ JIS ¤ØÊÑ´¹¤¹¤ë¾ì¹ç¤Ï¤½¤Î¤Þ¤Þ¤Ç¤¹ + ¤¬¡¤¥·¥Õ¥È JIS ¤Ø¤Î¾ì¹ç¤Ë¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¤Þ¤¿¡¤È¾³Ñ²¾Ì¾ ¤Î + ̤ ÄêµÁÎΰè¤Ï¡¤¥·¥Õ¥È JIS ¤ËÊÑ´¹¤¹¤ë¤È¡¤È¾³Ñ¤Î¡È¡¦¡É¤ËÃÖ¤­ + ´¹¤¨¤é¤ì¤Þ¤¹¡£È¾³Ñ²¾Ì¾¤ò DEC ¤ËÊÑ´¹¤¹¤ë¤ÈÁ´³Ñ¤Î²¾Ì¾¤ËÊÑ ´¹ + ¤µ¤ì¤Þ¤¹¡£ + + JIS ¥³¡¼¥É½ÐÎϤξì¹ç¡¤²þ¹Ô¡¦¥¿¥Ö¡¦Ëõ¾Ã¤Ê¤É¤ÎÀ©¸æʸ»ú¤ä¶õÇò + ¡ÊȾ³Ñ¡Ë¤Ï¡¤±Ñ¿ô»ú¥â¡¼¥É¤Ç½ÐÎϤµ¤ì¤Þ¤¹¡£ + + ÆþÎÏ¥³¡¼¥É¤Î¼«Æ°È½Ê̤ò¸í¤Ã¤¿¾ì¹ç¡¤¤Þ¤¿¡¤¤½¤ì¤¾¤ì¤Îʸ»ú¥»¥Ã + ¥È¤Ë̤ÄêµÁ¤Îʸ»ú¤¬ÆþÎϤµ¤ì¤¿¾ì¹ç¡¤½ÐÎϤ¬¤É¤¦¤Ê¤ë¤«¤ÏÉÔÄê¤Ç + + + +Y. Tonooka 1992ǯ11·î19Æü 3 + + + + + +KCC(L) KCC(L) + + + ¤¹¡£ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Y. Tonooka 1992ǯ11·î19Æü 4 + + diff --git a/libkcc/ROUTINE b/libkcc/ROUTINE new file mode 100644 index 000000000..7e6cc0873 --- /dev/null +++ b/libkcc/ROUTINE @@ -0,0 +1,24 @@ + +* ´Á»ú¥³¡¼¥ÉȽÄê KCC_check + check.c -> getstr.c + guess.c -> compare.c + showcode.c + +* ´Á»ú¥³¡¼¥ÉÊÑ´¹ KCC_filter + filter.c -> setfunc.c + buffer.c + getstr.c + guess.c -> compare.c + showcode.c + out.c -> euc.c, sjis.c, jis.c, dec.c, outchar.c + +¥µ¥Ö¥ë¡¼¥Á¥ó¤Î̾¾Î¤Ï¡¢ +Kcc_ ¤« KCC_ +¤Ç»Ï¤Þ¤ë¤è¤¦¤ËÊѤ¨¤Þ¤·¤¿¡£ + +KCC_ +¤ÈÁ´¤ÆÂçʸ»ú¤Î¾ì¹ç¤Ï¡¢¥é¥¤¥Ö¥é¥ê¤È¤·¤Æ¸Æ½Ð¤µ¤ì¤Æ»ÈÍѤµ¤ì¤ë»ö¤ò +Á°Äó¤Ë¤·¤Æ¤¤¤Þ¤¹¡£ + +takeshi@SoftAgency.co.jp +http://www.softagency.co.jp/mysql/ diff --git a/libkcc/buffer.c b/libkcc/buffer.c new file mode 100644 index 000000000..cb846ed27 --- /dev/null +++ b/libkcc/buffer.c @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <stdlib.h> +#include <sys/types.h> + +#include "kcc.h" +#include "libkcc.h" + +/********************************************************************** + * * + * Hold Buffer Operations * + * * + **********************************************************************/ +char *holdbuf, *bufend; +char *bufp; + +/*--------------------------------------------------------------------- + NAME + buffalloc + ---------------------------------------------------------------------*/ +char *Kcc_buffalloc(len) + unsigned len; +{ + if ((bufp = holdbuf = (char *) malloc(len)) == NULL) + return NULL; + bufend = holdbuf + len; + return bufend; +} + +/*--------------------------------------------------------------------- + NAME + append + ---------------------------------------------------------------------*/ +bool Kcc_append(s, len) + register char *s; + register int len; +{ + if (bufp + len > bufend) + return (0); + for (; len; --len) + *bufp++ = *(u_char *) s++; + return (1); +} + +/*--------------------------------------------------------------------- + NAME + flush + ---------------------------------------------------------------------*/ +void Kcc_flush(code, ddd, outcode, inmode, insi, inso, innj, ingj) + unsigned code; + char **ddd; + enum mode *inmode; + unsigned long *insi, *inso, *innj, *ingj; + unsigned outcode; +{ + unsigned out(); + + Kcc_out(ddd, holdbuf, bufp - holdbuf, code, outcode, inmode, insi, inso, innj, ingj); + bufp = holdbuf; +} + +/*--------------------------------------------------------------------- + NAME + bufffree + ---------------------------------------------------------------------*/ +void Kcc_bufffree(void) +{ + if (holdbuf) { + free(holdbuf); + holdbuf = NULL; + } +} diff --git a/libkcc/check.c b/libkcc/check.c new file mode 100644 index 000000000..529dc86bf --- /dev/null +++ b/libkcc/check.c @@ -0,0 +1,36 @@ +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "kcc.h" +#include "libkcc.h" + +unsigned KCC_check(s, extend) + char *s; + int extend; +{ + register unsigned code, c; + register int len; + char str[LENLINE], *dummy; + unsigned KCC_guess(); +enum mode gsmode; /* guess: M_ASCII M_KANJI M_SO */ +unsigned long insi; /* JIS shift-in sequence flag */ +unsigned long inso; /* JIS shift-out sequence flag + * including "ESC(I" */ +unsigned long innj; /* JIS 1990 sequence flag */ +unsigned long ingj; /* JIS 1990 aux flag */ + + dummy = s; + code = extend ? BIT8 : BIT8 & ~DEC; + gsmode = M_ASCII; + insi = inso = innj = ingj = 0; + while ((len = Kcc_getstr(str, sizeof str, &dummy)) != 0) { + c = Kcc_guess(str, len, extend, 0, &gsmode, &insi, &inso, &innj, &ingj); + code |= c & (JIS | NONASCII), code &= c | ~BIT8; + if (code & NONASCII && !(code & BIT8)) + break; + } + + return Kcc_showcode(code); +} diff --git a/libkcc/compare.c b/libkcc/compare.c new file mode 100644 index 000000000..788805f51 --- /dev/null +++ b/libkcc/compare.c @@ -0,0 +1,14 @@ +#include "libkcc.h" + +/*--------------------------------------------------------------------- + NAME + compare + ---------------------------------------------------------------------*/ +bool Kcc_compare(s, str) + register char *s, *str; +{ + while (*s) + if (*s++ != *str++) + return (0); + return (1); +} diff --git a/libkcc/dec.c b/libkcc/dec.c new file mode 100644 index 000000000..84f04c5f5 --- /dev/null +++ b/libkcc/dec.c @@ -0,0 +1,132 @@ +#include "libkcc.h" + +/*--------------------------------------------------------------------- + TYPE + table + NAME + katakana, hiragana, dakuon - JIS X0201 kana to JIS kanji in DEC + ---------------------------------------------------------------------*/ +unsigned short katakana[] = { + 0, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa5f2, 0xa5a1, + 0xa5a3, 0xa5a5, 0xa5a7, 0xa5a9, 0xa5e3, 0xa5e5, 0xa5e7, 0xa5c3, + 0xa1bc, 0xa5a2, 0xa5a4, 0xa5a6, 0xa5a8, 0xa5aa, 0xa5ab, 0xa5ad, + 0xa5af, 0xa5b1, 0xa5b3, 0xa5b5, 0xa5b7, 0xa5b9, 0xa5bb, 0xa5bd, + 0xa5bf, 0xa5c1, 0xa5c4, 0xa5c6, 0xa5c8, 0xa5ca, 0xa5cb, 0xa5cc, + 0xa5cd, 0xa5ce, 0xa5cf, 0xa5d2, 0xa5d5, 0xa5d8, 0xa5db, 0xa5de, + 0xa5df, 0xa5e0, 0xa5e1, 0xa5e2, 0xa5e4, 0xa5e6, 0xa5e8, 0xa5e9, + 0xa5ea, 0xa5eb, 0xa5ec, 0xa5ed, 0xa5ef, 0xa5f3, 0xa1ab, 0xa1ac, +}; + +unsigned short hiragana[] = { + 0, 0xa1a3, 0xa1d6, 0xa1d7, 0xa1a2, 0xa1a6, 0xa4f2, 0xa4a1, + 0xa4a3, 0xa4a5, 0xa4a7, 0xa4a9, 0xa4e3, 0xa4e5, 0xa4e7, 0xa4c3, + 0xa1bc, 0xa4a2, 0xa4a4, 0xa4a6, 0xa4a8, 0xa4aa, 0xa4ab, 0xa4ad, + 0xa4af, 0xa4b1, 0xa4b3, 0xa4b5, 0xa4b7, 0xa4b9, 0xa4bb, 0xa4bd, + 0xa4bf, 0xa4c1, 0xa4c4, 0xa4c6, 0xa4c8, 0xa4ca, 0xa4cb, 0xa4cc, + 0xa4cd, 0xa4ce, 0xa4cf, 0xa4d2, 0xa4d5, 0xa4d8, 0xa4db, 0xa4de, + 0xa4df, 0xa4e0, 0xa4e1, 0xa4e2, 0xa4e4, 0xa4e6, 0xa4e8, 0xa4e9, + 0xa4ea, 0xa4eb, 0xa4ec, 0xa4ed, 0xa4ef, 0xa4f3, 0xa1ab, 0xa1ac, +}; + +unsigned char dakuon[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 0, + 0, 0, 3, 3, 3, 3, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, +}; + +/*********************************************************/ +unsigned short *kanatbl = katakana; +int lastkana=0; +extern bool nogaiji; + +/*--------------------------------------------------------------------- + NAME + decascii + ---------------------------------------------------------------------*/ +void Kcc_decascii(ddd, c) + register int c; + char **ddd; +{ + if (lastkana) { + **ddd = kanatbl[lastkana] >> 8; (*ddd)++; + **ddd = kanatbl[lastkana] & 0xff; (*ddd)++; + lastkana = 0; + } + **ddd = c; (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + decgaiji + ---------------------------------------------------------------------*/ +void Kcc_decgaiji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + if (lastkana) { + **ddd = kanatbl[lastkana] >> 8; (*ddd)++; + **ddd = kanatbl[lastkana] & 0xff; (*ddd)++; + lastkana = 0; + } + if (nogaiji) { + **ddd = ZENPAD >> 8 | 0x80; (*ddd)++; + **ddd = (ZENPAD & 0xff) | 0x80; (*ddd)++; + } else { + **ddd = c1 | 0x80; (*ddd)++; + **ddd = c2; (*ddd)++; + } +} + +/*--------------------------------------------------------------------- + NAME + deckana + ---------------------------------------------------------------------*/ +void Kcc_deckana(ddd, c) + register int c; + char **ddd; +{ + register int cc; + int i; + extern unsigned char dakuon[]; + + if (lastkana) { + cc = kanatbl[lastkana]; + if ((c == 0x5e || c == 0x5f) && + (i = dakuon[lastkana] & (c == 0x5e ? 1 : 2))) { + cc += i; + c = -1; + } + **ddd = cc >> 8; (*ddd)++; + **ddd = cc & 0xff; (*ddd)++; + } + if (c < 0x21 || 0x5f < c) { + if (c > 0) { + **ddd = ZENPAD >> 8; (*ddd)++; + **ddd = ZENPAD & 0xff; (*ddd)++; + } + lastkana = 0; + } else + lastkana = c - 0x20; +} +/*--------------------------------------------------------------------- + NAME + deckanji + ---------------------------------------------------------------------*/ +void Kcc_deckanji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + if (lastkana) { + **ddd = kanatbl[lastkana] >> 8; (*ddd)++; + **ddd = kanatbl[lastkana] & 0xff; (*ddd)++; + lastkana = 0; + } + **ddd = c1 | 0x80; (*ddd)++; + **ddd = c2 | 0x80; (*ddd)++; +} + diff --git a/libkcc/euc.c b/libkcc/euc.c new file mode 100644 index 000000000..f8f74ff35 --- /dev/null +++ b/libkcc/euc.c @@ -0,0 +1,47 @@ +#include "libkcc.h" + +extern bool nogaiji; + +/*--------------------------------------------------------------------- + NAME + eucgaiji + ---------------------------------------------------------------------*/ +void Kcc_eucgaiji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + if (nogaiji) { + **ddd = ZENPAD >> 8 | 0x80; (*ddd)++; + **ddd = (ZENPAD & 0xff) | 0x80; (*ddd)++; + } else { + **ddd = SS3; (*ddd)++; + **ddd = c1 | 0x80; (*ddd)++; + **ddd = c2 | 0x80; (*ddd)++; + } +} + +/*--------------------------------------------------------------------- + NAME + euckana + ---------------------------------------------------------------------*/ +void Kcc_euckana(ddd, c) + register int c; + char **ddd; +{ + **ddd = SS2; (*ddd)++; + **ddd = (!nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD) | 0x80; + (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + euckanji + ---------------------------------------------------------------------*/ +void Kcc_euckanji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + **ddd = c1 | 0x80; (*ddd)++; + **ddd = c2 | 0x80; (*ddd)++; +} + diff --git a/libkcc/filter.c b/libkcc/filter.c new file mode 100644 index 000000000..6992cd775 --- /dev/null +++ b/libkcc/filter.c @@ -0,0 +1,145 @@ +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "kcc.h" +#include "libkcc.h" + +unsigned incode, outcode; +char shiftin[7] = "\033$B"; +char shiftout[4] = "\033(J"; + +/********************************************************************** + * * + * Filter * + * * + **********************************************************************/ +enum mode gsmode; /* guess: M_ASCII M_KANJI M_SO */ +enum mode inmode; /* input: M_ASCII M_KANJI M_GAIJI + * M_SO M_ESCI */ +enum mode outmode; /* output: M_ASCII M_KANJI M_GAIJI + * M_SO M_ESCI */ + +unsigned long insi; /* JIS shift-in sequence flag */ +unsigned long inso; /* JIS shift-out sequence flag + * including "ESC(I" */ +unsigned long innj; /* JIS 1990 sequence flag */ +unsigned long ingj; /* JIS 1990 aux flag */ + +bool nogaiji = 0; +/*--------------------------------------------------------------------- + NAME + filter - filtering routine + ---------------------------------------------------------------------*/ +int KCC_filter(ddd, outcode_name, sss, incode_name, extend, zenkaku, gaiji) + char *sss, *ddd; + int extend, zenkaku; + char *incode_name, *outcode_name; + int gaiji; +{ + register bool hold; + register unsigned code, c = ASCII; + register int len; + char str[LENLINE]; + char *dummy, *dst; + unsigned incode, outcode; + unsigned size = HOLDBUFSIZ; + char s[3]; + s[0]='\0'; s[1]='\0'; s[2]='\0'; + + nogaiji = gaiji; + if (extend<0) {extend=0;} ; if (extend>1) {extend=1;} + if (zenkaku<0) {zenkaku=0;}; if (zenkaku>1) {zenkaku=1;} + if (nogaiji<0) {nogaiji=0;}; if (nogaiji>1) {nogaiji=1;} + + /* allocate hold buf */ + if (Kcc_buffalloc(size) == NULL) return (-1); + + incode =0; outcode = EUC; + if (!strcasecmp(incode_name,"AUTO")) { incode=0; } + if (!strcasecmp(incode_name,"SJIS")) { incode=SJIS; } + if (!strcasecmp(incode_name,"DEC")) { incode=DEC; } + if (!strcasecmp(incode_name,"JIS")) { incode=JIS; } + if (!strcasecmp(incode_name,"JIS8")) { incode=JIS8; } + if (!strcasecmp(incode_name,"JISI")) { incode=ESCI; } + + if (!strcasecmp(outcode_name,"EUC")) { outcode=EUC; } + if (!strcasecmp(outcode_name,"SJIS")) { outcode=SJIS; } + if (!strcasecmp(outcode_name,"DEC")) { outcode=DEC; } + if (!strncasecmp(outcode_name,"JIS", 3)) + { outcode=JIS; + if (outcode_name[3]!='\0' && outcode_name[3]!='8' && outcode_name[3]!='I' ) + { s[0]=outcode_name[3] ; s[1]=outcode_name[4]; } + } + if (!strncasecmp(outcode_name,"JIS8",4)) + { outcode=JIS8; + if (outcode_name[4]!='\0') + { s[0]=outcode_name[4] ; s[1]=outcode_name[5]; } + } + if (!strncasecmp(outcode_name,"JISI",4)) + { outcode=ESCI; + if (outcode_name[4]!='\0') + { s[0]=outcode_name[4] ; s[1]=outcode_name[5]; } + } + if ((s[0] == 'B' || s[0] == '@' || s[0] == '+') && + (s[1] == 'B' || s[1] == 'J' || s[1] == 'H')) + { + if (s[0] == '+') + sprintf(shiftin, "\033&@\033$B"); + else + sprintf(shiftin, "\033$%c", s[0]); + sprintf(shiftout, "\033(%c", s[1]); + } + + Kcc_setfunc(outcode); + + dummy = sss; + dst = ddd; + + code = incode ? incode : extend ? BIT8 : BIT8 & ~DEC; + gsmode = inmode = outmode = M_ASCII; + insi = inso = innj = ingj = 0; + hold = 0; + while ((len = Kcc_getstr(str, sizeof str, &dummy)) != 0) { + if ((!(code & NONASCII) && code & BIT8) || + (code & (EUC | DEC) && code & SJIS && !(code & ASSUME))) { + /* + * So far, no kanji has been seen, or ambiguous. + */ + c = Kcc_guess(str, len, extend, zenkaku, &gsmode, &insi, &inso, &innj, &ingj); + code |= c & (JIS | NONASCII), code &= c | ~BIT8; + if (code & NONASCII && code & (EUC | DEC) && code & SJIS) { + /* + * If ambiguous, store the line in hold buffer. + */ + if (Kcc_append(str, len)) { + hold = 1; + continue; + } + /* + * When buffer is full, assume EUC/DEC. + */ + code |= ASSUME; + } + } + if (hold) { + /* + * Flush hold buffer. + */ + Kcc_flush(code, &dst, outcode, &inmode, &insi, &inso, &innj, &ingj); + hold = 0; + } + c = Kcc_out(&dst, str, len, code, outcode, &inmode, &insi, &inso, &innj, &ingj); + code |= c & JIS, code &= c | ~BIT8; + } + if (hold) + /* + * Assume EUC. + */ + Kcc_flush(code |= ASSUME, &dst, outcode, &inmode, &insi, &inso, &innj, &ingj); + + *dst = '\0'; + Kcc_bufffree(); + return (Kcc_showcode(c)); +} diff --git a/libkcc/getstr.c b/libkcc/getstr.c new file mode 100644 index 000000000..ac10fc6ce --- /dev/null +++ b/libkcc/getstr.c @@ -0,0 +1,22 @@ +#include <stdio.h> + +/*--------------------------------------------------------------------- + NAME + getstr + ---------------------------------------------------------------------*/ +int Kcc_getstr(str, n, sp) + char *str; + register int n; + char **sp; +{ + register int c; + register char *s; + +/* for (s = str; --n > 0 && (c = **sp) != EOF ; ) {*/ + for (s = str; --n > 0 && (c = **sp) != EOF && c != '\0'; ) { + (*sp)++; + if ((*s++ = c) == '\n') + break; + } + return (s - str); +} diff --git a/libkcc/guess.c b/libkcc/guess.c new file mode 100644 index 000000000..d6de8862f --- /dev/null +++ b/libkcc/guess.c @@ -0,0 +1,194 @@ +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "kcc.h" +#include "libkcc.h" + +/********************************************************************** + * * + * Guessing * + * * + **********************************************************************/ +/*--------------------------------------------------------------------- + NAME + guess - distinguish code system + ---------------------------------------------------------------------*/ +unsigned Kcc_guess(str, len, extend, zenkaku, gsmode, insi, inso, innj, ingj) + char *str; + int len, extend; + enum mode *gsmode; + unsigned long *insi, *inso, *innj, *ingj; + bool zenkaku; +{ + register char *s; + register int euc, sjis, dec; + bool jis8; + register unsigned code; + register int i; + enum mode old; + + euc = sjis = 1; + dec = extend ? 1 : 0; + jis8 = 1; + code = 0; + for (s = str; s < str + len; s += i) { + i = 1; + switch (*(u_char *) s) { + case ESC: + if (*gsmode == M_SO) + continue; + old = *gsmode; + if (Kcc_compare("$B", s + 1) || Kcc_compare("$@", s + 1)) { + *gsmode = M_KANJI; /* kanji */ + *insi |= bitflag(((u_char *) s)[2]); + i = 3; + } else if (Kcc_compare("&@\033$B", s + 1)) { + *gsmode = M_KANJI; /* kanji 1990 */ + *innj |= bitflag('B'); + i = 6; + } else if (Kcc_compare("(B", s + 1) || + Kcc_compare("(J", s + 1) || Kcc_compare("(H", s + 1)) { + *gsmode = M_ASCII; /* kanji end */ + *inso |= bitflag(((u_char *) s)[2]); + i = 3; + } else if (Kcc_compare("(I", s + 1)) { + *gsmode = M_KANJI; /* "ESC(I" */ + *inso |= bitflag('I'); + i = 3; + } else if (Kcc_compare("$(D", s + 1)) { + *gsmode = M_KANJI; /* gaiji */ + *ingj |= bitflag('D'); + i = 4; + } else + break; + code |= JIS; + if (old != M_ASCII) + continue; + break; + case SO: + if (*gsmode == M_ASCII) { + code |= JIS; + *gsmode = M_SO; + break; + } + continue; + case SI: + if (*gsmode == M_SO) { + *gsmode = M_ASCII; + continue; + } + /* fall thru */ + default: + if (*gsmode != M_ASCII) + continue; + break; + } + if (*(u_char *) s & 0x80) + code |= NONASCII; + switch (euc) { + case 1: + /* + * EUC first byte. + */ + if (*(u_char *) s & 0x80) { + if ((0xa0 < *(u_char *) s && *(u_char *) s < 0xff) || + (!zenkaku && *(u_char *) s == SS2)) { + euc = 2; + break; + } + if (extend) { + if (*(u_char *) s == SS3) { + euc = 2; + break; + } else if (*(u_char *) s < 0xa0) + break; + } + euc = 0; /* not EUC */ + } + break; + case 2: + /* + * EUC second byte or third byte of CS3. + */ + if (((u_char *) s)[-1] == SS2) { + if (0xa0 < *(u_char *) s && + *(u_char *) s < (extend ? 0xff : 0xe0)) { + euc = 1; /* hankaku kana */ + break; + } + } else + if (0xa0 < *(u_char *) s && *(u_char *) s < 0xff) { + if (((u_char *) s)[-1] != SS3) + euc = 1;/* zenkaku */ + break; + } + euc = 0; /* not EUC */ + break; + } + if (extend) + switch (dec) { + case 1: + /* + * DEC first byte. + */ + if (*(u_char *) s & 0x80) { + if (0xa0 < *(u_char *) s && *(u_char *) s < 0xff) { + dec = 2; + break; + } else if (*(u_char *) s < 0xa0) + break; + dec = 0; /* not DEC */ + } + break; + case 2: + /* + * DEC second byte. + */ + if (0x20 < (*(u_char *) s & 0x7f) && + (*(u_char *) s & 0x7f) < 0x7f) { + dec = 1; + } else + dec = 0; /* not DEC */ + break; + } + switch (sjis) { + case 1: + /* + * shift-JIS first byte. + */ + if (*(u_char *) s & 0x80) { + if (0xa0 < *(u_char *) s && *(u_char *) s < 0xe0) { + if (!zenkaku) + break; /* hankaku */ + } else if (*(u_char *) s != 0x80 && + *(u_char *) s != 0xa0 && + *(u_char *) s <= (extend ? 0xfc : 0xef)) { + sjis = 2; /* zenkaku */ + jis8 = 0; + break; + } + sjis = 0; /* not SJIS */ + } + break; + case 2: + /* + * shift-JIS second byte. + */ + if (0x40 <= *(u_char *) s && *(u_char *) s != 0x7f && + *(u_char *) s <= 0xfc) + sjis = 1; + else + sjis = 0; /* not SJIS */ + break; + } + } + if (euc == 1) + code |= EUC; + if (dec == 1) + code |= DEC; + if (sjis == 1) + code |= zenkaku || !jis8 ? SJIS : SJIS | JIS8; + return (code); +} diff --git a/libkcc/jis.c b/libkcc/jis.c new file mode 100644 index 000000000..187dfeb4b --- /dev/null +++ b/libkcc/jis.c @@ -0,0 +1,130 @@ +#include "libkcc.h" + +extern enum mode outmode; +extern char shiftout[], shiftin[]; +extern bool nogaiji; +/*--------------------------------------------------------------------- + NAME + jisascii + ---------------------------------------------------------------------*/ +void Kcc_jisascii(ddd, c) + register int c; + char **ddd; +{ + int i; + + switch (outmode) { + case M_ASCII: + break; + case M_SO: + **ddd = SI; (*ddd)++; + outmode = M_ASCII; + break; + default: + for (i=0; i< strlen(shiftout); i++) { **ddd = shiftout[i]; (*ddd)++; } + outmode = M_ASCII; + break; + } + **ddd = c; (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + jisgaiji + ---------------------------------------------------------------------*/ +void Kcc_jisgaiji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + + if (nogaiji) + Kcc_jiskanji(ddd, ZENPAD >> 8, ZENPAD & 0xff); + else { + if (outmode != M_GAIJI) { + if (outmode == M_SO) { **ddd = SI; (*ddd)++; } + **ddd = '\033'; (*ddd)++; + **ddd = '$'; (*ddd)++; + **ddd = '('; (*ddd)++; + **ddd = 'D'; (*ddd)++; + outmode = M_GAIJI; + } + **ddd = c1; + **ddd = c2; + } +} + +/*--------------------------------------------------------------------- + NAME + jiskana + ---------------------------------------------------------------------*/ +void Kcc_jiskana(ddd, c) + register int c; + char **ddd; +{ + int i; + + if (outmode != M_SO) { + if (outmode != M_ASCII) { + for (i=0; i< strlen(shiftout); i++) {**ddd = shiftout[i]; (*ddd)++; } + } + **ddd = SO; (*ddd)++; + outmode = M_SO; + } + **ddd = !nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD; (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + jiskana8 + ---------------------------------------------------------------------*/ +void Kcc_jiskana8(ddd, c) + register int c; + char **ddd; +{ + int i; + + if (outmode != M_ASCII) { + for (i=0; i< strlen(shiftout); i++) {**ddd = shiftout[i]; (*ddd)++; } + outmode = M_ASCII; + } + **ddd = (!nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD) | 0x80; (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + jiskanak + ---------------------------------------------------------------------*/ +void Kcc_jiskanak(ddd, c) + register int c; + char **ddd; +{ + + if (outmode != M_ESCI) { + **ddd = '\033'; (*ddd)++; + **ddd = '('; (*ddd)++; + **ddd = 'I'; (*ddd)++; + outmode = M_ESCI; + } + **ddd = !nogaiji || (0x20 < c && c < 0x60) ? c : HANPAD; (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + jiskanji + ---------------------------------------------------------------------*/ +void Kcc_jiskanji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + int i; + + if (outmode != M_KANJI) { + if (outmode == M_SO) + { **ddd = SI; (*ddd)++; } + for (i=0; i< strlen(shiftin); i++) {**ddd = shiftin[i]; (*ddd)++; } + outmode = M_KANJI; + } + **ddd = c1; (*ddd)++; + **ddd = c2; (*ddd)++; +} + diff --git a/libkcc/kcc.h b/libkcc/kcc.h new file mode 100644 index 000000000..84edfc9e0 --- /dev/null +++ b/libkcc/kcc.h @@ -0,0 +1,22 @@ +#if 0 +#if !defined lint +static char sccsid[] = "@(#)kcc.c 2.3 (Y.Tonooka) 7/1/94"; +static char copyright[] = "@(#)Copyright (c) 1992 Yasuhiro Tonooka"; +#endif +#endif + +#define BINARY 0x100 +#define ASCII 0x00 + +#define NONASCII 0x01 /* non-ASCII character */ +#define JIS 0x02 /* JIS */ +#define ESCI 0x04 /* "ESC(I" */ +#define ASSUME 0x08 /* assumed EUC (or DEC) */ +#define EUC 0x10 +#define DEC 0x20 +#define SJIS 0x40 +#define JIS8 0x80 /* 8-bit JIS */ +#define BIT8 (EUC | DEC | SJIS | JIS8) + +extern int KCC_filter(char *ddd, char *outcode_name, char *sss, char *incode_name, int extend, int zenkaku, int gaiji); +extern unsigned KCC_check(char *s, int extend); diff --git a/libkcc/libkcc.h b/libkcc/libkcc.h new file mode 100644 index 000000000..829f7cd67 --- /dev/null +++ b/libkcc/libkcc.h @@ -0,0 +1,94 @@ +#define LENLINE (BUFSIZ * 4) +#define HOLDBUFSIZ 8192 /* default size of hold buffer */ + +#define ESC 0x1b +#define SO 0x0e +#define SI 0x0f +#define SS2 0x8e /* EUC single shift 2 */ +#define SS3 0x8f /* EUC single shift 3 */ + +#define ZENPAD 0x2222 /* padding char for zenkaku */ +#define HANPAD 0x25 /* padding char for hankaku */ + +typedef int bool; + +#define bitflag(c) (1L << ((c) - '@')) + +enum mode { + M_ASCII, + M_KANJI, + M_GAIJI, + M_SO, /* hankaku kana with SO */ + M_ESCI, /* hankaku kana with "ESC(I" */ +}; + +/* buffer.c */ +char *Kcc_buffalloc(unsigned len); +bool Kcc_append(register char *s, register int len); +void Kcc_flush(unsigned code, char **ddd, unsigned outcode, + enum mode *inmode, unsigned long *insi, + unsigned long *inso, unsigned long *innj, + unsigned long *ingj); +void Kcc_bufffree(void); + +/* check.c */ +unsigned KCC_check(char *s, int extend); + +/* compare.c */ +bool Kcc_compare(register char *s, register char *str); + +/* dec.c */ +void Kcc_decascii(char **ddd, register int c); +void Kcc_decgaiji(char **ddd, register int c1, register int c2); +void Kcc_deckana(char **ddd, register int c); +void Kcc_deckanji(char **ddd, register int c1, register int c2); + +/* euc.c */ +void Kcc_eucgaiji(char **ddd, register int c1, register int c2); +void Kcc_euckana(char **ddd, register int c); +void Kcc_euckanji(char **ddd, register int c1, register int c2); + +/* filter.c */ +int KCC_filter(char *ddd, char *outcode_name, char *sss, char *incode_name, + int extend, int zenkaku, int gaiji); + +/* getstr.c */ +int Kcc_getstr(char *str, register int n, char **sp); + +/* guess.c */ +unsigned Kcc_guess(char *str, int len, int extend, bool zenkaku, + enum mode *gsmode, unsigned long *insi, + unsigned long *inso, unsigned long *innj, + unsigned long *ingj); + +/* jis.c */ +void Kcc_jisascii(char **ddd, register int c); +void Kcc_jisgaiji(char **ddd, register int c1, register int c2); +void Kcc_jiskana(char **ddd, register int c); +void Kcc_jiskana8(char **ddd, register int c); +void Kcc_jiskanak(char **ddd, register int c); +void Kcc_jiskanji(char **ddd, register int c1, register int c2); + +/* out.c */ +void Kcc_outsjis(char **ddd, register int c1, register int c2); +unsigned Kcc_out(char **ddd, char *str, int len, register unsigned code, + unsigned outcode, enum mode *inmode, + unsigned long *insi, unsigned long *inso, + unsigned long *innj, unsigned long *ingj); + +/* outchar.c */ +void Kcc_outchar(char **ddd, register int c); + +/* outsjis.c */ +void outsjis(register int c1, register int c2); + +/* setfunc.c */ +void Kcc_setfunc(unsigned outcode); + +/* showcode.c */ +int Kcc_showcode(register unsigned code); + +/* sjis.c */ +void Kcc_sjisgaiji(char **ddd, register int c1, register int c2); +void Kcc_sjiskana(char **ddd, register int c); +void Kcc_sjiskanji(char **ddd, register int c1, register int c2); diff --git a/libkcc/out.c b/libkcc/out.c new file mode 100644 index 000000000..86e3dcb78 --- /dev/null +++ b/libkcc/out.c @@ -0,0 +1,188 @@ +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "kcc.h" +#include "libkcc.h" + +/********************************************************************** + * * + * Output Routines * + * * + **********************************************************************/ +extern void (*outascii)(), (*outkanji)(), (*outgaiji)(), (*outkana)(); + +/*--------------------------------------------------------------------- + NAME + outsjis + ---------------------------------------------------------------------*/ +void Kcc_outsjis(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + register int c; + + c = c1 * 2 - (c1 <= 0x9f ? 0x00e1 : (c1 < 0xf0 ? 0x0161 : 0x01bf)); + if (c2 < 0x9f) + c2 = c2 - (c2 > 0x7f ? 0x20 : 0x1f); + else { + c2 = c2 - 0x7e; + c++; + } + (*(c1 <= 0xef ? outkanji : outgaiji))(ddd, c, c2); +} + +/*--------------------------------------------------------------------- + NAME + out + ---------------------------------------------------------------------*/ +unsigned Kcc_out(ddd, str, len, code, outcode, inmode, insi, inso, innj, ingj) + char *str, **ddd; + int len; + register unsigned code; + enum mode *inmode; + unsigned long *insi, *inso, *innj, *ingj; + unsigned outcode; +{ + register char *s; + register int i; + + for (s = str; s < str + len; s += i) { + i = 1; + switch (*(u_char *) s) { + case ESC: + if (*inmode == M_SO) + break; + if (Kcc_compare("$B", s + 1) || Kcc_compare("$@", s + 1)) { + *inmode = M_KANJI; /* kanji */ + *insi |= bitflag(((u_char *) s)[2]); + i = 3; + } else if (Kcc_compare("&@\033$B", s + 1)) { + *inmode = M_KANJI; /* kanji 1990 */ + *innj |= bitflag('B'); + i = 6; + } else if (Kcc_compare("(B", s + 1) || Kcc_compare("(J", s + 1) || + Kcc_compare("(H", s + 1)) { + *inmode = M_ASCII; /* kanji end */ + *inso |= bitflag(((u_char *) s)[2]); + i = 3; + } else if (Kcc_compare("(I", s + 1)) { + *inmode = M_ESCI; /* "ESC(I" */ + *inso |= bitflag('I'); + i = 3; + } else if (Kcc_compare("$(D", s + 1)) { + *inmode = M_GAIJI; /* gaiji */ + *ingj |= bitflag('D'); + i = 4; + } else + break; + code |= JIS; + continue; + case SO: + if (*inmode == M_ASCII) { + code |= JIS; + *inmode = M_SO; + continue; + } + break; + case SI: + if (*inmode == M_SO) { + *inmode = M_ASCII; + continue; + } + break; + } + if (*inmode != M_ASCII) { + if (0x20 < ((u_char *) s)[0] && ((u_char *) s)[0] < 0x7f) + switch (*inmode) { + case M_KANJI: + (*outkanji)(ddd, ((u_char *) s)[0], ((u_char *) s)[1] & 0x7f); + i = 2; + continue; + case M_GAIJI: + (*outgaiji)(ddd, ((u_char *) s)[0], ((u_char *) s)[1] & 0x7f); + i = 2; + continue; + case M_SO: + case M_ESCI: + (*outkana)(ddd, ((u_char *) s)[0]); + continue; + default: + continue; + } + } else if (((u_char *) s)[0] & 0x80) { + if (code & (EUC | DEC)) { + /* + * EUC or DEC: + */ + if (0xa0 < ((u_char *) s)[0] && + ((u_char *) s)[0] < 0xff) { + if (!(((u_char *) s)[1] & 0x80) && code & DEC) { + /* + * DEC gaiji: + */ + code &= ~EUC; /* definitely DEC */ + (*outgaiji)(ddd, ((u_char *) s)[0] & 0x7f, ((u_char *) s)[1]); + } else + /* + * EUC code set 1 (kanji), DEC kanji: + */ + (*outkanji)(ddd, ((u_char *) s)[0] & 0x7f, ((u_char *) s)[1] & 0x7f); + } else if (((u_char *) s)[0] == SS2 && code & EUC && + 0xa0 < ((u_char *) s)[1] && + ((u_char *) s)[1] < 0xff) { + /* + * EUC code set 2 (hankaku kana): + */ + code &= ~DEC; /* probably EUC */ + (*outkana)(ddd, ((u_char *) s)[1] & 0x7f); + } else if (((u_char *) s)[0] == SS3 && code & EUC && + 0xa0 < ((u_char *) s)[1] && + ((u_char *) s)[1] < 0xff && + 0xa0 < ((u_char *) s)[2] && + ((u_char *) s)[2] < 0xff) { + /* + * EUC code set 3 (gaiji): + */ + code &= ~DEC; /* probably EUC */ + (*outgaiji)(ddd, ((u_char *) s)[1] & 0x7f, ((u_char *) s)[2] & 0x7f); + i = 3; + continue; + } else { + /* + * Control character (C1): + */ + if (outcode != SJIS && (outcode != EUC || + (((u_char *) s)[0] != SS2 && + ((u_char *) s)[0] != SS3))) + **ddd = ((u_char *) s)[0]; (*ddd)++; + continue; + } + i = 2; + continue; + } else if (code & (SJIS | JIS8)) { + /* + * Shift-JIS or JIS8: + */ + if (!(code & SJIS) || (0xa0 < ((u_char *) s)[0] && + ((u_char *) s)[0] < 0xe0)) + /* + * Hankaku kana: + */ + (*outkana)(ddd, ((u_char *) s)[0] & 0x7f); + else { + /* + * Shift-JIS kanji: + */ + code &= ~JIS8; /* definitely shift-JIS */ + Kcc_outsjis(ddd, ((u_char *) s)[0], ((u_char *) s)[1]); + i = 2; + } + continue; + } + } + (*outascii)(ddd, ((u_char *) s)[0]); + } + return (code); +} diff --git a/libkcc/outchar.c b/libkcc/outchar.c new file mode 100644 index 000000000..2d6a9c9b6 --- /dev/null +++ b/libkcc/outchar.c @@ -0,0 +1,10 @@ +/*--------------------------------------------------------------------- + NAME + outchar + ---------------------------------------------------------------------*/ +void Kcc_outchar(ddd, c) + register int c; + char **ddd; +{ + **ddd = c; (*ddd)++; +} diff --git a/libkcc/outsjis.c b/libkcc/outsjis.c new file mode 100644 index 000000000..38b318d9b --- /dev/null +++ b/libkcc/outsjis.c @@ -0,0 +1,19 @@ +void (*outascii)(), (*outkanji)(), (*outgaiji)(), (*outkana)(); +/*--------------------------------------------------------------------- + NAME + outsjis + ---------------------------------------------------------------------*/ +void outsjis(c1, c2) + register int c1, c2; +{ + register int c; + + c = c1 * 2 - (c1 <= 0x9f ? 0x00e1 : (c1 < 0xf0 ? 0x0161 : 0x01bf)); + if (c2 < 0x9f) + c2 = c2 - (c2 > 0x7f ? 0x20 : 0x1f); + else { + c2 = c2 - 0x7e; + c++; + } + (*(c1 <= 0xef ? outkanji : outgaiji))(c, c2); +} diff --git a/libkcc/setfunc.c b/libkcc/setfunc.c new file mode 100644 index 000000000..45b9be51d --- /dev/null +++ b/libkcc/setfunc.c @@ -0,0 +1,63 @@ +#include "kcc.h" + +void (*outascii)(), (*outkanji)(), (*outgaiji)(), (*outkana)(); + +/********************************************************************** + * * + * Conversion Routines * + * * + **********************************************************************/ +void Kcc_outchar(); +void Kcc_jisascii(), Kcc_jiskanji(), Kcc_jisgaiji(); +void Kcc_jiskana(), Kcc_jiskanak(), Kcc_jiskana8(); +void Kcc_euckanji(), Kcc_eucgaiji(), Kcc_euckana(); +void Kcc_sjiskanji(), Kcc_sjisgaiji(), Kcc_sjiskana(); +void Kcc_decascii(), Kcc_deckanji(), Kcc_decgaiji(), Kcc_deckana(); + +/*--------------------------------------------------------------------- + NAME + setfunc + ---------------------------------------------------------------------*/ +void Kcc_setfunc(outcode) + unsigned outcode; +{ + switch (outcode) { + case EUC: + outascii = Kcc_outchar; + outkanji = Kcc_euckanji; + outgaiji = Kcc_eucgaiji; + outkana = Kcc_euckana; + break; + case DEC: + outascii = Kcc_decascii; + outkanji = Kcc_deckanji; + outgaiji = Kcc_decgaiji; + outkana = Kcc_deckana; + break; + case SJIS: + outascii = Kcc_outchar; + outkanji = Kcc_sjiskanji; + outgaiji = Kcc_sjisgaiji; + outkana = Kcc_sjiskana; + break; + default: + outascii = Kcc_jisascii; + outkanji = Kcc_jiskanji; + outgaiji = Kcc_jisgaiji; + switch (outcode) { + case JIS: /* mode: M_ASCII M_KANJI M_GAIJI + * M_SO */ + outkana = Kcc_jiskana; + break; + case JIS | ESCI: /* mode: M_ASCII M_KANJI M_GAIJI + * M_ESCI */ + outkana = Kcc_jiskanak; + break; + case JIS | JIS8: /* mode: M_ASCII M_KANJI M_GAIJI */ + outkana = Kcc_jiskana8; + break; + } + break; + } +} + diff --git a/libkcc/showcode.c b/libkcc/showcode.c new file mode 100644 index 000000000..bb09f9005 --- /dev/null +++ b/libkcc/showcode.c @@ -0,0 +1,71 @@ +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "kcc.h" + +/*--------------------------------------------------------------------- + NAME + showcode + ---------------------------------------------------------------------*/ +int Kcc_showcode(code) + register unsigned code; +{ + /* char *s; */ + /* void showjis();*/ + int k, m; + /* int k, m,n; */ + + if (!(code & NONASCII)) { + /* + * 7-bit JIS / ASCII. + */ + if (code & JIS) { + return JIS; + } else { return ASCII; } + } else if (code & (EUC | DEC)) { + k = code & EUC ? code & DEC ? EUC : EUC : DEC; + if (code & SJIS) { + /* + * Ambiguous. + */ + if (code & JIS8) { + m = code & JIS ? JIS : SJIS; + if (code & ASSUME) { + return code & JIS ? m : k; + } + return k; + } + if (code & ASSUME) { return k; } + return SJIS; + } else { + /* + * EUC/DEC. + */ + return k; + } + } else if (code & JIS8) { + /* + * 8-bit JIS / shift-JIS or 8-bit JIS. + */ + if (!(code & JIS)) + return SJIS; + return JIS8; + } else if (code & SJIS) + /* + * Shift-JIS. + */ + return SJIS; + else { + /* + * Non-ASCII deteced but neither EUC/DEC nor SJIS. + */ + return BINARY; + } + if (code & JIS) { + return JIS; + } + + return BINARY; +} diff --git a/libkcc/sjis.c b/libkcc/sjis.c new file mode 100644 index 000000000..026a3cd92 --- /dev/null +++ b/libkcc/sjis.c @@ -0,0 +1,50 @@ +#include "libkcc.h" + +void Kcc_sjiskanji(char **ddd, register int c1, register int c2); + +extern bool nogaiji; + +/*--------------------------------------------------------------------- + NAME + sjisgaiji + DESCRIPTION + Characters are mapped as follows: + 0x2121 to 0x3a7e --> 0xf040 to 0xfcfc + 0x3b21 to 0x7e7e --> 0xfcfc + ---------------------------------------------------------------------*/ +void Kcc_sjisgaiji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + if (nogaiji) + Kcc_sjiskanji(ddd, ZENPAD >> 8, ZENPAD & 0xff); + else { + **ddd = c1 < 0x3b ? ((c1 - 1) >> 1) + 0xe0 : 0xfc; (*ddd)++; + **ddd = c1 < 0x3b ? c2 + + (c1 & 1 ? (c2 < 0x60 ? 0x1f : 0x20) : 0x7e) : 0xfc; (*ddd)++; + } +} + +/*--------------------------------------------------------------------- + NAME + sjiskana + ---------------------------------------------------------------------*/ +void Kcc_sjiskana(ddd, c) + register int c; + char **ddd; +{ + **ddd = 0x20 < c && c < 0x60 ? c | 0x80 : HANPAD | 0x80; (*ddd)++; +} + +/*--------------------------------------------------------------------- + NAME + sjiskanji + ---------------------------------------------------------------------*/ +void Kcc_sjiskanji(ddd, c1, c2) + register int c1, c2; + char **ddd; +{ + **ddd = ((c1 - 1) >> 1) + (c1 <= 0x5e ? 0x71 : 0xb1); (*ddd)++; + **ddd = c2 + (c1 & 1 ? (c2 < 0x60 ? 0x1f : 0x20) : 0x7e); (*ddd)++; +} + diff --git a/libkcc/test.c b/libkcc/test.c new file mode 100644 index 000000000..4fbb81a98 --- /dev/null +++ b/libkcc/test.c @@ -0,0 +1,44 @@ +#include <stdio.h> +#include "kcc.h" + +main(argc, argv) + register int argc; + register char *argv[]; +{ + FILE *fp; + char s[2048], d[4096]; + int i=0, c; + + fp=fopen("test_file","r"); + if (fp == NULL) {printf("not found\n"); exit;} + + while ((c = fgetc(fp)) != EOF && i<2045) + { + s[i] = c; i++; + } + s[i]='\0'; + + printf ("\n==== Check ===\n"); + printf ("%d bytes ; %x\n",i,KCC_check(s,0)); + + printf ("\n==== filter ===\n"); + + + if (argc>1) { + if (!strcasecmp(argv[1],"euc")) { + i = KCC_filter(d, "EUC", s, "AUTO", 0,0,0); + } + if (!strcasecmp(argv[1],"jis")) { + i = KCC_filter(d, "JIS", s, "AUTO", 0,0,0); + } + if (!strcasecmp(argv[1],"sjis")) { + i = KCC_filter(d, "sjis", s, "AUTO", 0,0,0); + } + } + else { + i = KCC_filter(d, "JIS", s, "AUTO", 0,0,0); + } + + printf("code = %x\n%s\n",i,d); + +} diff --git a/libkcc/test_check.c b/libkcc/test_check.c new file mode 100644 index 000000000..fe7cc1126 --- /dev/null +++ b/libkcc/test_check.c @@ -0,0 +1,18 @@ +#include <stdio.h> +main () +{ + FILE *fp; + char s[500]; + int i=0, c; + + fp=fopen("test_file","r"); + if (fp == NULL) {printf("not found\n"); exit;} + + while ((c = fgetc(fp)) != EOF && i<490) + { + s[i] = c; i++; + } + s[i]='\0'; + + printf ("%d bytes ; %x\n",i,KCC_check(s,0)); +} diff --git a/libkcc/test_file b/libkcc/test_file new file mode 100644 index 000000000..9e27f8ff2 --- /dev/null +++ b/libkcc/test_file @@ -0,0 +1,8 @@ +²ñ¼Ò¾ðÊó +<A HREF="">¤¢</A>¤¢¤¢¤¢¤¢¤¢<BR> + +<?php +$a=0; +while($a<10) { + $a++; +?>¤¤<?php } ?> diff --git a/libkcc/test_file.sjis b/libkcc/test_file.sjis new file mode 100644 index 000000000..e628428cb --- /dev/null +++ b/libkcc/test_file.sjis @@ -0,0 +1,8 @@ +‰ïŽÐî•ñ +<A HREF="">‚ </A>‚ ‚ ‚ ‚ ‚ <BR> + +<?php +$a=0; +while($a<10) { + $a++; +?>‚¢<?php } ?> diff --git a/libkcc/test_filter.c b/libkcc/test_filter.c new file mode 100644 index 000000000..3485ae54c --- /dev/null +++ b/libkcc/test_filter.c @@ -0,0 +1,25 @@ +#include <stdio.h> +#include "kcc.h" + +main () +{ + FILE *fp; + char s[500], d[2000]; + int i=0, c; + + fp=fopen("test_file","r"); + if (fp == NULL) {printf("not found\n"); exit;} + + while ((c = fgetc(fp)) != EOF && i<490) + { + s[i] = c; i++; + } + s[i]='\0'; + + i = KCC_filter(d, "EUC", s, "AUTO", 0,0,0); + printf("code = %x\n%s\n",i,d); + i = KCC_filter(d, "SJIS", s, "AUTO", 0,0,0); + printf("code = %x\n%s\n",i,d); + i = KCC_filter(d, "JIS", s, "AUTO", 0,0,0); + printf("code = %x\n%s\n",i,d); +} diff --git a/libkcc/testfile b/libkcc/testfile new file mode 100644 index 000000000..13e261c2f --- /dev/null +++ b/libkcc/testfile @@ -0,0 +1,2 @@ +$B$"$"$"$"$"$"$"$"$"$"$"$"$"$"$"(B + diff --git a/ltconfig b/ltconfig new file mode 100644 index 000000000..65ec6f65d --- /dev/null +++ b/ltconfig @@ -0,0 +1,3017 @@ +#! /bin/sh + +# ltconfig - Create a system-specific libtool. +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 +# +# 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 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. + +# A lot of this script is taken from autoconf-2.10. + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} +echo=echo +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell. + exec "$SHELL" "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<EOF +$* +EOF + exit 0 +fi + +# Find the correct PATH separator. Usually this is `:', but +# DJGPP uses `;' like DOS. +if test "X${PATH_SEPARATOR+set}" != "Xset"; then + UNAME=${UNAME-`uname 2>/dev/null`} + case X$UNAME in + *-DOS) PATH_SEPARATOR=';' ;; + *) PATH_SEPARATOR=':' ;; + esac +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +if test "X${echo_test_string+set}" != "Xset"; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if (echo_test_string="`eval $cmd`") 2>/dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null; then + break + fi + done +fi + +if test "X`($echo '\t') 2>/dev/null`" != 'X\t' || + test "X`($echo "$echo_test_string") 2>/dev/null`" != X"$echo_test_string"; then + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH /usr/ucb; do + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($dir/echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + test "X`(print -r "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running ltconfig again with it. + ORIGINAL_CONFIG_SHELL="${CONFIG_SHELL-/bin/sh}" + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + echo='printf "%s\n"' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + test "X`($echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + # Cool, printf works + : + elif test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$ORIGINAL_CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + CONFIG_SHELL="$ORIGINAL_CONFIG_SHELL" + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL $0 --fallback-echo" + elif test "X`("$CONFIG_SHELL" "$0" --fallback-echo '\t') 2>/dev/null`" = 'X\t' && + test "X`("$CONFIG_SHELL" "$0" --fallback-echo "$echo_test_string") 2>/dev/null`" = X"$echo_test_string"; then + echo="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null; then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec "${ORIGINAL_CONFIG_SHELL}" "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi +fi + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e s/^X//' +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# The name of this program. +progname=`$echo "X$0" | $Xsed -e 's%^.*/%%'` + +# Constants: +PROGRAM=ltconfig +PACKAGE=libtool +VERSION=1.3.3 +TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)" +ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.c 1>&5' +ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.c $LIBS 1>&5' +rm="rm -f" + +help="Try \`$progname --help' for more information." + +# Global variables: +default_ofile=libtool +can_build_shared=yes +enable_shared=yes +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +enable_static=yes +enable_fast_install=yes +enable_dlopen=unknown +enable_win32_dll=no +ltmain= +silent= +srcdir= +ac_config_guess= +ac_config_sub= +host= +nonopt= +ofile="$default_ofile" +verify_host=yes +with_gcc=no +with_gnu_ld=no +need_locks=yes +ac_ext=c +objext=o +libext=a +exeext= +cache_file= + +old_AR="$AR" +old_CC="$CC" +old_CFLAGS="$CFLAGS" +old_CPPFLAGS="$CPPFLAGS" +old_LDFLAGS="$LDFLAGS" +old_LD="$LD" +old_LN_S="$LN_S" +old_LIBS="$LIBS" +old_NM="$NM" +old_RANLIB="$RANLIB" +old_DLLTOOL="$DLLTOOL" +old_OBJDUMP="$OBJDUMP" +old_AS="$AS" + +# Parse the command line options. +args= +prev= +for option +do + case "$option" in + -*=*) optarg=`echo "$option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + eval "$prev=\$option" + prev= + continue + fi + + case "$option" in + --help) cat <<EOM +Usage: $progname [OPTION]... [HOST [LTMAIN]] + +Generate a system-specific libtool script. + + --debug enable verbose shell tracing + --disable-shared do not build shared libraries + --disable-static do not build static libraries + --disable-fast-install do not optimize for fast installation + --enable-dlopen enable dlopen support + --enable-win32-dll enable building dlls on win32 hosts + --help display this help and exit + --no-verify do not verify that HOST is a valid host type +-o, --output=FILE specify the output file [default=$default_ofile] + --quiet same as \`--silent' + --silent do not print informational messages + --srcdir=DIR find \`config.guess' in DIR + --version output version information and exit + --with-gcc assume that the GNU C compiler will be used + --with-gnu-ld assume that the C compiler uses the GNU linker + --disable-lock disable file locking + --cache-file=FILE configure cache file + +LTMAIN is the \`ltmain.sh' shell script fragment or \`ltmain.c' program +that provides basic libtool functionality. + +HOST is the canonical host system name [default=guessed]. +EOM + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --disable-shared) enable_shared=no ;; + + --disable-static) enable_static=no ;; + + --disable-fast-install) enable_fast_install=no ;; + + --enable-dlopen) enable_dlopen=yes ;; + + --enable-win32-dll) enable_win32_dll=yes ;; + + --quiet | --silent) silent=yes ;; + + --srcdir) prev=srcdir ;; + --srcdir=*) srcdir="$optarg" ;; + + --no-verify) verify_host=no ;; + + --output | -o) prev=ofile ;; + --output=*) ofile="$optarg" ;; + + --version) echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"; exit 0 ;; + + --with-gcc) with_gcc=yes ;; + --with-gnu-ld) with_gnu_ld=yes ;; + + --disable-lock) need_locks=no ;; + + --cache-file=*) cache_file="$optarg" ;; + + -*) + echo "$progname: unrecognized option \`$option'" 1>&2 + echo "$help" 1>&2 + exit 1 + ;; + + *) + if test -z "$ltmain"; then + ltmain="$option" + elif test -z "$host"; then +# This generates an unnecessary warning for sparc-sun-solaris4.1.3_U1 +# if test -n "`echo $option| sed 's/[-a-z0-9.]//g'`"; then +# echo "$progname: warning \`$option' is not a valid host type" 1>&2 +# fi + host="$option" + else + echo "$progname: too many arguments" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac +done + +if test -z "$ltmain"; then + echo "$progname: you must specify a LTMAIN file" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +if test ! -f "$ltmain"; then + echo "$progname: \`$ltmain' does not exist" 1>&2 + echo "$help" 1>&2 + exit 1 +fi + +# Quote any args containing shell metacharacters. +ltconfig_args= +for arg +do + case "$arg" in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) + ltconfig_args="$ltconfig_args '$arg'" ;; + *) ltconfig_args="$ltconfig_args $arg" ;; + esac +done + +# A relevant subset of AC_INIT. + +# File descriptor usage: +# 0 standard input +# 1 file creation +# 2 errors and warnings +# 3 some systems may open it to /dev/tty +# 4 used on the Kubota Titan +# 5 compiler messages saved in config.log +# 6 checking for... messages and results +if test "$silent" = yes; then + exec 6>/dev/null +else + exec 6>&1 +fi +exec 5>>./config.log + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi +if test "${LANG+set}" = set; then LANG=C; export LANG; fi + +if test -n "$cache_file" && test -r "$cache_file"; then + echo "loading cache $cache_file within ltconfig" + . $cache_file +fi + +if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then + # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. + if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then + ac_n= ac_c=' +' ac_t=' ' + else + ac_n=-n ac_c= ac_t= + fi +else + ac_n= ac_c='\c' ac_t= +fi + +if test -z "$srcdir"; then + # Assume the source directory is the same one as the path to LTMAIN. + srcdir=`$echo "X$ltmain" | $Xsed -e 's%/[^/]*$%%'` + test "$srcdir" = "$ltmain" && srcdir=. +fi + +trap "$rm conftest*; exit 1" 1 2 15 +if test "$verify_host" = yes; then + # Check for config.guess and config.sub. + ac_aux_dir= + for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/config.guess; then + ac_aux_dir=$ac_dir + break + fi + done + if test -z "$ac_aux_dir"; then + echo "$progname: cannot find config.guess in $srcdir $srcdir/.. $srcdir/../.." 1>&2 + echo "$help" 1>&2 + exit 1 + fi + ac_config_guess=$ac_aux_dir/config.guess + ac_config_sub=$ac_aux_dir/config.sub + + # Make sure we can run config.sub. + if $SHELL $ac_config_sub sun4 >/dev/null 2>&1; then : + else + echo "$progname: cannot run $ac_config_sub" 1>&2 + echo "$help" 1>&2 + exit 1 + fi + + echo $ac_n "checking host system type""... $ac_c" 1>&6 + + host_alias=$host + case "$host_alias" in + "") + if host_alias=`$SHELL $ac_config_guess`; then : + else + echo "$progname: cannot guess host type; you must specify one" 1>&2 + echo "$help" 1>&2 + exit 1 + fi ;; + esac + host=`$SHELL $ac_config_sub $host_alias` + echo "$ac_t$host" 1>&6 + + # Make sure the host verified. + test -z "$host" && exit 1 + +elif test -z "$host"; then + echo "$progname: you must specify a host type if you use \`--no-verify'" 1>&2 + echo "$help" 1>&2 + exit 1 +else + host_alias=$host +fi + +# Transform linux* to *-*-linux-gnu*, to support old configure scripts. +case "$host_os" in +linux-gnu*) ;; +linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'` +esac + +host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +case "$host_os" in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR cru $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +# Set a sane default for `AR'. +test -z "$AR" && AR=ar + +# Set a sane default for `OBJDUMP'. +test -z "$OBJDUMP" && OBJDUMP=objdump + +# If RANLIB is not set, then run the test. +if test "${RANLIB+set}" != "set"; then + result=no + + echo $ac_n "checking for ranlib... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/ranlib || test -f $dir/ranlib$ac_exeext; then + RANLIB="ranlib" + result="ranlib" + break + fi + done + IFS="$save_ifs" + + echo "$ac_t$result" 1>&6 +fi + +if test -n "$RANLIB"; then + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" +fi + +# Set sane defaults for `DLLTOOL', `OBJDUMP', and `AS', used on cygwin. +test -z "$DLLTOOL" && DLLTOOL=dlltool +test -z "$OBJDUMP" && OBJDUMP=objdump +test -z "$AS" && AS=as + +# Check to see if we are using GCC. +if test "$with_gcc" != yes || test -z "$CC"; then + # If CC is not set, then try to find GCC or a usable CC. + if test -z "$CC"; then + echo $ac_n "checking for gcc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/gcc || test -f $dir/gcc$ac_exeext; then + CC="gcc" + break + fi + done + IFS="$save_ifs" + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + fi + + # Not "gcc", so try "cc", rejecting "/usr/ucb/cc". + if test -z "$CC"; then + echo $ac_n "checking for cc... $ac_c" 1>&6 + IFS="${IFS= }"; save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + cc_rejected=no + for dir in $PATH; do + test -z "$dir" && dir=. + if test -f $dir/cc || test -f $dir/cc$ac_exeext; then + if test "$dir/cc" = "/usr/ucb/cc"; then + cc_rejected=yes + continue + fi + CC="cc" + break + fi + done + IFS="$save_ifs" + if test $cc_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $CC + shift + if test $# -gt 0; then + # We chose a different compiler from the bogus one. + # However, it has the same name, so the bogon will be chosen + # first if we set CC to just the name; use the full file name. + shift + set dummy "$dir/cc" "$@" + shift + CC="$@" + fi + fi + + if test -n "$CC"; then + echo "$ac_t$CC" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$CC"; then + echo "$progname: error: no acceptable cc found in \$PATH" 1>&2 + exit 1 + fi + fi + + # Now see if the compiler is really GCC. + with_gcc=no + echo $ac_n "checking whether we are using GNU C... $ac_c" 1>&6 + echo "$progname:581: checking whether we are using GNU C" >&5 + + $rm conftest.c + cat > conftest.c <<EOF +#ifdef __GNUC__ + yes; +#endif +EOF + if { ac_try='${CC-cc} -E conftest.c'; { (eval echo $progname:589: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then + with_gcc=yes + fi + $rm conftest.c + echo "$ac_t$with_gcc" 1>&6 +fi + +# Allow CC to be a program name with arguments. +set dummy $CC +compiler="$2" + +echo $ac_n "checking for object suffix... $ac_c" 1>&6 +$rm conftest* +echo 'int i = 1;' > conftest.c +echo "$progname:603: checking for object suffix" >& 5 +if { (eval echo $progname:604: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c) ;; + *) objext=`echo $ac_file | sed -e s/conftest.//` ;; + esac + done +else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 +fi +$rm conftest* +echo "$ac_t$objext" 1>&6 + +echo $ac_n "checking for executable suffix... $ac_c" 1>&6 +if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_cv_exeext="no" + $rm conftest* + echo 'main () { return 0; }' > conftest.c + echo "$progname:629: checking for executable suffix" >& 5 + if { (eval echo $progname:630: \"$ac_link\") 1>&5; (eval $ac_link) 2>conftest.err; }; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + for ac_file in conftest.*; do + case $ac_file in + *.c | *.err | *.$objext ) ;; + *) ac_cv_exeext=.`echo $ac_file | sed -e s/conftest.//` ;; + esac + done + else + cat conftest.err 1>&5 + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* +fi +if test "X$ac_cv_exeext" = Xno; then + exeext="" +else + exeext="$ac_cv_exeext" +fi +echo "$ac_t$ac_cv_exeext" 1>&6 + +echo $ac_n "checking for $compiler option to produce PIC... $ac_c" 1>&6 +pic_flag= +special_shlib_compile_flags= +wl= +link_static_flag= +no_builtin_flag= + +if test "$with_gcc" = yes; then + wl='-Wl,' + link_static_flag='-static' + + case "$host_os" in + beos* | irix5* | irix6* | osf3* | osf4*) + # PIC is the default for these OSes. + ;; + aix*) + # Below there is a dirty hack to force normal static linking with -ldl + # The problem is because libdl dynamically linked with both libc and + # libC (AIX C++ library), which obviously doesn't included in libraries + # list by gcc. This cause undefined symbols with -static flags. + # This hack allows C programs to be linked with "-static -ldl", but + # we not sure about C++ programs. + link_static_flag="$link_static_flag ${wl}-lC" + ;; + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + amigaos*) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + pic_flag='-m68020 -resident32 -malways-restore-a4' + ;; + sysv4*MP*) + if test -d /usr/nec; then + pic_flag=-Kconform_pic + fi + ;; + *) + pic_flag='-fPIC' + ;; + esac +else + # PORTME Check for PIC flags for the system compiler. + case "$host_os" in + aix3* | aix4*) + # All AIX code is PIC. + link_static_flag='-bnso -bI:/lib/syscalls.exp' + ;; + + hpux9* | hpux10* | hpux11*) + # Is there a better link_static_flag that works with the bundled CC? + wl='-Wl,' + link_static_flag="${wl}-a ${wl}archive" + pic_flag='+Z' + ;; + + irix5* | irix6*) + wl='-Wl,' + link_static_flag='-non_shared' + # PIC (with -KPIC) is the default. + ;; + + cygwin* | mingw* | os2*) + # We can build DLLs from non-PIC. + ;; + + osf3* | osf4*) + # All OSF/1 code is PIC. + wl='-Wl,' + link_static_flag='-non_shared' + ;; + + sco3.2v5*) + pic_flag='-Kpic' + link_static_flag='-dn' + special_shlib_compile_flags='-belf' + ;; + + solaris*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + sunos4*) + pic_flag='-PIC' + link_static_flag='-Bstatic' + wl='-Qoption ld ' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + pic_flag='-KPIC' + link_static_flag='-Bstatic' + wl='-Wl,' + ;; + + uts4*) + pic_flag='-pic' + link_static_flag='-Bstatic' + ;; + sysv4*MP*) + if test -d /usr/nec ;then + pic_flag='-Kconform_pic' + link_static_flag='-Bstatic' + fi + ;; + *) + can_build_shared=no + ;; + esac +fi + +if test -n "$pic_flag"; then + echo "$ac_t$pic_flag" 1>&6 + + # Check to make sure the pic_flag actually works. + echo $ac_n "checking if $compiler PIC flag $pic_flag works... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS $pic_flag -DPIC" + echo "$progname:776: checking if $compiler PIC flag $pic_flag works" >&5 + if { (eval echo $progname:777: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.$objext; then + # Append any warnings to the config.log. + cat conftest.err 1>&5 + + case "$host_os" in + hpux9* | hpux10* | hpux11*) + # On HP-UX, both CC and GCC only warn that PIC is supported... then they + # create non-PIC objects. So, if there were any warnings, we assume that + # PIC is not supported. + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + can_build_shared=no + pic_flag= + else + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + fi + ;; + *) + echo "$ac_t"yes 1>&6 + pic_flag=" $pic_flag" + ;; + esac + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + can_build_shared=no + pic_flag= + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + echo "$ac_t"none 1>&6 +fi + +# Check to see if options -o and -c are simultaneously supported by compiler +echo $ac_n "checking if $compiler supports -c -o file.o... $ac_c" 1>&6 +$rm -r conftest 2>/dev/null +mkdir conftest +cd conftest +$rm conftest* +echo "int some_variable = 0;" > conftest.c +mkdir out +# According to Tom Tromey, Ian Lance Taylor reported there are C compilers +# that will create temporary files in the current directory regardless of +# the output directory. Thus, making CWD read-only will cause this test +# to fail, enabling locking or at least warning the user not to do parallel +# builds. +chmod -w . +save_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -o out/conftest2.o" +echo "$progname:829: checking if $compiler supports -c -o file.o" >&5 +if { (eval echo $progname:830: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s out/conftest.err; then + echo "$ac_t"no 1>&6 + compiler_c_o=no + else + echo "$ac_t"yes 1>&6 + compiler_c_o=yes + fi +else + # Append any errors to the config.log. + cat out/conftest.err 1>&5 + compiler_c_o=no + echo "$ac_t"no 1>&6 +fi +CFLAGS="$save_CFLAGS" +chmod u+w . +$rm conftest* out/* +rmdir out +cd .. +rmdir conftest +$rm -r conftest 2>/dev/null + +if test x"$compiler_c_o" = x"yes"; then + # Check to see if we can write to a .lo + echo $ac_n "checking if $compiler supports -c -o file.lo... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -c -o conftest.lo" + echo "$progname:862: checking if $compiler supports -c -o file.lo" >&5 +if { (eval echo $progname:863: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.lo; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_o_lo=no + else + echo "$ac_t"yes 1>&6 + compiler_o_lo=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_o_lo=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* +else + compiler_o_lo=no +fi + +# Check to see if we can do hard links to lock some files if needed +hard_links="nottested" +if test "$compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + echo $ac_n "checking if we can lock with hard links... $ac_c" 1>&6 + hard_links=yes + $rm conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + echo "$ac_t$hard_links" 1>&6 + $rm conftest* + if test "$hard_links" = no; then + echo "*** WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2 + need_locks=warn + fi +else + need_locks=no +fi + +if test "$with_gcc" = yes; then + # Check to see if options -fno-rtti -fno-exceptions are supported by compiler + echo $ac_n "checking if $compiler supports -fno-rtti -fno-exceptions ... $ac_c" 1>&6 + $rm conftest* + echo "int some_variable = 0;" > conftest.c + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.c" + echo "$progname:914: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 + if { (eval echo $progname:915: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>conftest.err; } && test -s conftest.o; then + + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + echo "$ac_t"no 1>&6 + compiler_rtti_exceptions=no + else + echo "$ac_t"yes 1>&6 + compiler_rtti_exceptions=yes + fi + else + # Append any errors to the config.log. + cat conftest.err 1>&5 + compiler_rtti_exceptions=no + echo "$ac_t"no 1>&6 + fi + CFLAGS="$save_CFLAGS" + $rm conftest* + + if test "$compiler_rtti_exceptions" = "yes"; then + no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions' + else + no_builtin_flag=' -fno-builtin' + fi + +fi + +# Check for any special shared library compilation flags. +if test -n "$special_shlib_compile_flags"; then + echo "$progname: warning: \`$CC' requires \`$special_shlib_compile_flags' to build shared libraries" 1>&2 + if echo "$old_CC $old_CFLAGS " | egrep -e "[ ]$special_shlib_compile_flags[ ]" >/dev/null; then : + else + echo "$progname: add \`$special_shlib_compile_flags' to the CC or CFLAGS env variable and reconfigure" 1>&2 + can_build_shared=no + fi +fi + +echo $ac_n "checking if $compiler static flag $link_static_flag works... $ac_c" 1>&6 +$rm conftest* +echo 'main(){return(0);}' > conftest.c +save_LDFLAGS="$LDFLAGS" +LDFLAGS="$LDFLAGS $link_static_flag" +echo "$progname:958: checking if $compiler static flag $link_static_flag works" >&5 +if { (eval echo $progname:959: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + echo "$ac_t$link_static_flag" 1>&6 +else + echo "$ac_t"none 1>&6 + link_static_flag= +fi +LDFLAGS="$save_LDFLAGS" +$rm conftest* + +if test -z "$LN_S"; then + # Check to see if we can use ln -s, or we need hard links. + echo $ac_n "checking whether ln -s works... $ac_c" 1>&6 + $rm conftest.dat + if ln -s X conftest.dat 2>/dev/null; then + $rm conftest.dat + LN_S="ln -s" + else + LN_S=ln + fi + if test "$LN_S" = "ln -s"; then + echo "$ac_t"yes 1>&6 + else + echo "$ac_t"no 1>&6 + fi +fi + +# Make sure LD is an absolute path. +if test -z "$LD"; then + ac_prog=ld + if test "$with_gcc" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo $ac_n "checking for ld used by GCC... $ac_c" 1>&6 + echo "$progname:991: checking for ld used by GCC" >&5 + ac_prog=`($CC -print-prog-name=ld) 2>&5` + 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 are not 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 + echo $ac_n "checking for GNU ld... $ac_c" 1>&6 + echo "$progname:1015: checking for GNU ld" >&5 + else + echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 + echo "$progname:1018: checking for non-GNU ld" >&5 + fi + + 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 + 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. + if "$LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" + fi + + if test -n "$LD"; then + echo "$ac_t$LD" 1>&6 + else + echo "$ac_t"no 1>&6 + fi + + if test -z "$LD"; then + echo "$progname: error: no acceptable ld found in \$PATH" 1>&2 + exit 1 + fi +fi + +# Check to see if it really is or is not GNU ld. +echo $ac_n "checking if the linker ($LD) is GNU ld... $ac_c" 1>&6 +# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + with_gnu_ld=yes +else + with_gnu_ld=no +fi +echo "$ac_t$with_gnu_ld" 1>&6 + +# See if the linker supports building shared libraries. +echo $ac_n "checking whether the linker ($LD) supports shared libraries... $ac_c" 1>&6 + +allow_undefined_flag= +no_undefined_flag= +need_lib_prefix=unknown +need_version=unknown +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +archive_cmds= +archive_expsym_cmds= +old_archive_from_new_cmds= +export_dynamic_flag_spec= +whole_archive_flag_spec= +thread_safe_flag_spec= +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no +hardcode_shlibpath_var=unsupported +runpath_var= +always_export_symbols=no +export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols' +# include_expsyms should be a list of space-separated symbols to be *always* +# included in the symbol list +include_expsyms= +# exclude_expsyms can be an egrep regular expression of symbols to exclude +# it will be wrapped by ` (' and `)$', so one must not match beginning or +# end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', +# as well as any symbol that contains `d'. +exclude_expsyms="_GLOBAL_OFFSET_TABLE_" +# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out +# platforms (ab)use it in PIC code, but their linkers get confused if +# the symbol is explicitly referenced. Since portable code cannot +# rely on this symbol name, it's probably fine to never include it in +# preloaded symbol tables. + +case "$host_os" in +cygwin* | mingw*) + # 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 "$with_gcc" != yes; then + with_gnu_ld=no + fi + ;; + +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case "$host_os" in + aix3* | aix4*) + # On AIX, the GNU linker is very broken + ld_shlibs=no + cat <<EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +EOF + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + + # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> 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 | egrep ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach <jrb3@best.com> says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=yes + + # Extract the symbol export list from an `--export-all' def file, + # then regenerate the def file from the symbol export list, so that + # the compiled dll only exports the symbol export list. + export_symbols_cmds='test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ + $DLLTOOL --export-all --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --output-def $objdir/$soname-def $objdir/$soname-ltdll.$objext $libobjs $convenience~ + sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]* ; *//" < $objdir/$soname-def > $export_symbols' + + archive_expsym_cmds='echo EXPORTS > $objdir/$soname-def~ + _lt_hint=1; + for symbol in `cat $export_symbols`; do + echo " \$symbol @ \$_lt_hint ; " >> $objdir/$soname-def; + _lt_hint=`expr 1 + \$_lt_hint`; + done~ + test -f $objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $0 > $objdir/$soname-ltdll.c~ + test -f $objdir/$soname-ltdll.$objext || (cd $objdir && $CC -c $soname-ltdll.c)~ + $CC -Wl,--base-file,$objdir/$soname-base -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC -Wl,--base-file,$objdir/$soname-base $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts~ + $DLLTOOL --as=$AS --dllname $soname --exclude-symbols DllMain@12,_cygwin_dll_entry@12,_cygwin_noncygwin_dll_entry@12 --def $objdir/$soname-def --base-file $objdir/$soname-base --output-exp $objdir/$soname-exp~ + $CC $objdir/$soname-exp -Wl,--dll -nostartfiles -Wl,-e,__cygwin_dll_entry@12 -o $lib $objdir/$soname-ltdll.$objext $libobjs $deplibs $linkopts' + + old_archive_from_new_cmds='$DLLTOOL --as=$AS --dllname $soname --def $objdir/$soname-def --output-lib $objdir/$libname.a' + ;; + + netbsd*) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + archive_cmds='$LD -Bshareable $libobjs $deplibs $linkopts -o $lib' + # can we support soname and/or expsyms with a.out? -oliva + fi + ;; + + solaris*) + if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +EOF + elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linkopts' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = yes; then + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + case $host_os in + cygwin* | mingw*) + # dlltool doesn't understand --whole-archive et. al. + whole_archive_flag_spec= + ;; + *) + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + ;; + esac + fi +else + # PORTME fill in a description of your system's linker (not GNU ld) + case "$host_os" in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $objdir/$soname $libobjs $deplibs $linkopts -bE:$export_symbols -T512 -H512 -bM:SRE~$AR cru $lib $objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$with_gcc" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix4*) + hardcode_libdir_flag_spec='${wl}-b ${wl}nolibpath ${wl}-b ${wl}libpath:$libdir:/usr/lib:/lib' + hardcode_libdir_separator=':' + if test "$with_gcc" = yes; then + 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 + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + shared_flag='-shared' + else + shared_flag='${wl}-bM:SRE' + hardcode_direct=yes + fi + allow_undefined_flag=' ${wl}-berok' + archive_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bexpall ${wl}-bnoentry${allow_undefined_flag}' + archive_expsym_cmds="\$CC $shared_flag"' -o $objdir/$soname $libobjs $deplibs $linkopts ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}' + case "$host_os" in aix4.[01]|aix4.[01].*) + # According to Greg Wooledge, -bexpall is only supported from AIX 4.2 on + always_export_symbols=yes ;; + esac + ;; + + amigaos*) + archive_cmds='$rm $objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $objdir/a2ixlibrary.data~$AR cru $lib $libobjs~$RANLIB $lib~(cd $objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + + cygwin* | mingw*) + # 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=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $linkopts `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib /OUT:$oldlib$oldobjs' + fix_srcfile_path='`cygpath -w $srcfile`' + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9* | hpux10* | hpux11*) + case "$host_os" in + hpux9*) archive_cmds='$rm $objdir/$soname~$LD -b +b $install_libdir -o $objdir/$soname $libobjs $deplibs $linkopts~test $objdir/$soname = $lib || mv $objdir/$soname $lib' ;; + *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linkopts' ;; + esac + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_minus_L=yes # Not in the search PATH, but as the default + # location of the library. + export_dynamic_flag_spec='${wl}-E' + ;; + + irix5* | irix6*) + if test "$with_gcc" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + archive_cmds='$LD -shared $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linkopts' # ELF + fi + hardcode_libdir_flag_spec='${wl}-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + openbsd*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $objdir/$libname.def~$echo DATA >> $objdir/$libname.def~$echo " SINGLE NONSHARED" >> $objdir/$libname.def~$echo EXPORTS >> $objdir/$libname.def~emxexp $libobjs >> $objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $linkopts $objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $objdir/$libname.a $objdir/$libname.def' + ;; + + osf3* | osf4*) + if test "$with_gcc" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $linkopts ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linkopts -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + fi + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + sco3.2v5*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + no_undefined_flag=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linkopts' + archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linkopts~$rm $lib.exp' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case "$host_os" in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linkopts' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + # archive_cmds='$LD -G -z text -h $soname -o $lib$libobjs$deplibs' + archive_cmds='$LD -G -h $soname -o $lib$libobjs$deplibs' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + *) + ld_shlibs=no + ;; + esac +fi +echo "$ac_t$ld_shlibs" 1>&6 +test "$ld_shlibs" = no && can_build_shared=no + +if test -z "$NM"; then + echo $ac_n "checking for BSD-compatible nm... $ac_c" 1>&6 + case "$NM" in + [\\/]* | [A-Za-z]:[\\/]*) ;; # Let the user override the test with a path. + *) + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR}" + for ac_dir in $PATH /usr/ucb /usr/ccs/bin /bin; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/nm || test -f $ac_dir/nm$ac_exeext; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -B" + break + elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then + NM="$ac_dir/nm -p" + break + else + NM=${NM="$ac_dir/nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + fi + fi + done + IFS="$ac_save_ifs" + test -z "$NM" && NM=nm + ;; + esac + echo "$ac_t$NM" 1>&6 +fi + +# Check for command to grab the raw symbol name followed by C symbol from nm. +echo $ac_n "checking command to parse $NM output... $ac_c" 1>&6 + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Transform the above into a raw symbol and a C symbol. +symxfrm='\1 \2\3 \3' + +# Transform an extracted symbol line into a proper C declaration +global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'" + +# Define system-specific variables. +case "$host_os" in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw*) + symcode='[ABCDGISTW]' + ;; +hpux*) # Its linker distinguishes data from code symbols + global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^. .* \(.*\)$/extern char \1;/p'" + ;; +irix*) + symcode='[BCDEGRST]' + ;; +solaris*) + symcode='[BDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then + symcode='[ABCDGISTW]' +fi + +# Try without a prefix undercore, then with it. +for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode\)[ ][ ]*\($ac_symprfx\)$sympat$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + $rm conftest* + cat > conftest.c <<EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(){} +#ifdef __cplusplus +} +#endif +main(){nm_test_var='a';nm_test_func();return(0);} +EOF + + echo "$progname:1592: checking if global_symbol_pipe works" >&5 + if { (eval echo $progname:1593: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } && test -s conftest.$objext; then + # Now try to grab the symbols. + nlist=conftest.nm + if { echo "$progname:1596: eval \"$NM conftest.$objext | $global_symbol_pipe > $nlist\"" >&5; eval "$NM conftest.$objext | $global_symbol_pipe > $nlist 2>&5"; } && test -s "$nlist"; then + + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if egrep ' nm_test_var$' "$nlist" >/dev/null; then + if egrep ' nm_test_func$' "$nlist" >/dev/null; then + cat <<EOF > conftest.c +#ifdef __cplusplus +extern "C" { +#endif + +EOF + # Now generate the symbol file. + eval "$global_symbol_to_cdecl"' < "$nlist" >> conftest.c' + + cat <<EOF >> conftest.c +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{ +EOF + sed 's/^. \(.*\) \(.*\)$/ {"\2", (lt_ptr_t) \&\2},/' < "$nlist" >> conftest.c + cat <<\EOF >> conftest.c + {0, (lt_ptr_t) 0} +}; + +#ifdef __cplusplus +} +#endif +EOF + # Now try linking the two files. + mv conftest.$objext conftstm.$objext + save_LIBS="$LIBS" + save_CFLAGS="$CFLAGS" + LIBS="conftstm.$objext" + CFLAGS="$CFLAGS$no_builtin_flag" + if { (eval echo $progname:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then + pipe_works=yes + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + LIBS="$save_LIBS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.c >&5 + fi + $rm conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + global_symbol_pipe= + fi +done +if test "$pipe_works" = yes; then + echo "${ac_t}ok" 1>&6 +else + echo "${ac_t}failed" 1>&6 +fi + +if test -z "$global_symbol_pipe"; then + global_symbol_to_cdecl= +fi + +# Check hardcoding attributes. +echo $ac_n "checking how to hardcode library paths into programs... $ac_c" 1>&6 +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || \ + test -n "$runpath_var"; then + + # We can hardcode non-existant directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$hardcode_shlibpath_var" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +echo "$ac_t$hardcode_action" 1>&6 + + +reload_flag= +reload_cmds='$LD$reload_flag -o $output$reload_objs' +echo $ac_n "checking for $LD option to reload object files... $ac_c" 1>&6 +# PORTME Some linkers may need a different reload flag. +reload_flag='-r' +echo "$ac_t$reload_flag" 1>&6 +test -n "$reload_flag" && reload_flag=" $reload_flag" + +# PORTME Fill in your ld.so characteristics +library_names_spec= +libname_spec='lib$name' +soname_spec= +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +file_magic_cmd= +file_magic_test_file= +deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [regex]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given egrep regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. +echo $ac_n "checking dynamic linker characteristics... $ac_c" 1>&6 +case "$host_os" in +aix3*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}.so$major' + ;; + +aix4*) + version_type=linux + # AIX has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + # We preserve .a as extension for shared libraries though AIX4.2 + # and later linker supports .so + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.a' + shlibpath_var=LIBPATH + deplibs_check_method=pass_all + ;; + +amigaos*) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done' + ;; + +beos*) + library_names_spec='${libname}.so' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + deplibs_check_method=pass_all + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + +bsdi4*) + version_type=linux + library_names_spec='${libname}.so$major ${libname}.so' + soname_spec='${libname}.so' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw*) + version_type=windows + need_version=no + need_lib_prefix=no + if test "$with_gcc" = yes; then + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.a' + else + library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib' + fi + dynamic_linker='Win32 ld.exe' + deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + file_magic_cmd='${OBJDUMP} -f' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + version_type=freebsd-$objformat + case "$version_type" in + freebsd-elf*) + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + deplibs_check_method=unknown + library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix' + need_version=yes + ;; + esac + finish_cmds='PATH="\$PATH:/sbin" OBJFORMAT="'"$objformat"'" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + case "$host_os" in + freebsd2* | freebsd3.[01]*) + shlibpath_overrides_runpath=yes + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + dynamic_linker="$host_os dld.sl" + version_type=sunos + need_lib_prefix=no + need_version=no + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl' + soname_spec='${libname}${release}.sl$major' + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +irix5* | irix6*) + version_type=irix + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}.so.$major' + library_names_spec='${libname}${release}.so.$versuffix ${libname}${release}.so.$major ${libname}${release}.so $libname.so' + case "$host_os" in + irix5*) + libsuff= shlibsuff= + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case "$LD" in # libtool.m4 will add one of these switches to LD + *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib${libsuff}/libc.so*` + deplibs_check_method='pass_all' + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux-gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + + if test -f /lib/ld.so.1; then + dynamic_linker='GNU ld.so' + else + # Only the GNU ld.so supports shared libraries on MkLinux. + case "$host_cpu" in + powerpc*) dynamic_linker=no ;; + *) dynamic_linker='Linux ld.so' ;; + esac + fi + ;; + +netbsd*) + version_type=sunos + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so' + soname_spec='${libname}${release}.so$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + ;; + +openbsd*) + version_type=sunos + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + need_version=no + fi + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + ;; + +os2*) + libname_spec='$name' + need_lib_prefix=no + library_names_spec='$libname.dll $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4*) + version_type=osf + need_version=no + soname_spec='${libname}${release}.so' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so' + shlibpath_var=LD_LIBRARY_PATH + # this will be overridden with pass_all, but let us keep it just in case + deplibs_check_method='file_magic COFF format alpha shared library' + file_magic_cmd=/usr/bin/file + file_magic_test_file=/shlib/libc.so + deplibs_check_method='pass_all' + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +sco3.2v5*) + version_type=osf + soname_spec='${libname}${release}.so$major' + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + shlibpath_var=LD_LIBRARY_PATH + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + deplibs_check_method="file_magic ELF [0-9][0-9]-bit [LM]SB dynamic lib" + file_magic_cmd=/usr/bin/file + file_magic_test_file=/lib/libc.so + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + case "$host_vendor" in + ncr) + deplibs_check_method='pass_all' + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + file_magic_cmd=/usr/bin/file + file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + esac + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so' + soname_spec='${libname}${release}.so$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so' + soname_spec='$libname.so.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +*) + dynamic_linker=no + ;; +esac +echo "$ac_t$dynamic_linker" 1>&6 +test "$dynamic_linker" = no && can_build_shared=no + +# Report the final consequences. +echo "checking if libtool supports shared libraries... $can_build_shared" 1>&6 + +# Only try to build win32 dlls if AC_LIBTOOL_WIN32_DLL was used in +# configure.in, otherwise build static only libraries. +case "$host_os" in +cygwin* | mingw* | os2*) + if test x$can_build_shared = xyes; then + test x$enable_win32_dll = xno && can_build_shared=no + echo "checking if package supports dlls... $can_build_shared" 1>&6 + fi +;; +esac + +if test -n "$file_magic_test_file" && test -n "$file_magic_cmd"; then + case "$deplibs_check_method" in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <<EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +EOF + fi ;; + esac +fi + +echo $ac_n "checking whether to build shared libraries... $ac_c" 1>&6 +test "$can_build_shared" = "no" && enable_shared=no + +# On AIX, shared libraries and static libraries use the same namespace, and +# are all built from PIC. +case "$host_os" in +aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + +aix4*) + test "$enable_shared" = yes && enable_static=no + ;; +esac + +echo "$ac_t$enable_shared" 1>&6 + +# Make sure either enable_shared or enable_static is yes. +test "$enable_shared" = yes || enable_static=yes + +echo "checking whether to build static libraries... $enable_static" 1>&6 + +if test "$hardcode_action" = relink; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + +echo $ac_n "checking for objdir... $ac_c" 1>&6 +rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + objdir=_libs +fi +rmdir .libs 2>/dev/null +echo "$ac_t$objdir" 1>&6 + +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else +if eval "test \"`echo '$''{'lt_cv_dlopen'+set}'`\" != set"; then + lt_cv_dlopen=no lt_cv_dlopen_libs= +echo $ac_n "checking for dlopen in -ldl""... $ac_c" 1>&6 +echo "$progname:2170: checking for dlopen in -ldl" >&5 +ac_lib_var=`echo dl'_'dlopen | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldl $LIBS" +cat > conftest.$ac_ext <<EOF +#line 2178 "ltconfig" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen(); + +int main() { +dlopen() +; return 0; } +EOF +if { (eval echo $progname:2188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dlopen""... $ac_c" 1>&6 +echo "$progname:2207: checking for dlopen" >&5 +if eval "test \"`echo '$''{'ac_cv_func_dlopen'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2212 "ltconfig" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char dlopen(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dlopen(); + +int main() { + +/* 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_dlopen) || defined (__stub___dlopen) +choke me +#else +dlopen(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_dlopen=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_dlopen=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_func_'dlopen`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dlopen" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for dld_link in -ldld""... $ac_c" 1>&6 +echo "$progname:2251: checking for dld_link in -ldld" >&5 +ac_lib_var=`echo dld'_'dld_link | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 2259 "ltconfig" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char dld_link(); + +int main() { +dld_link() +; return 0; } +EOF +if { (eval echo $progname:2269: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load""... $ac_c" 1>&6 +echo "$progname:2288: checking for shl_load" >&5 +if eval "test \"`echo '$''{'ac_cv_func_shl_load'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2293 "ltconfig" +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char shl_load(); below. */ +#include <assert.h> +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load(); + +int main() { + +/* 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_shl_load) || defined (__stub___shl_load) +choke me +#else +shl_load(); +#endif + +; return 0; } +EOF +if { (eval echo $progname:2315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_shl_load=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_shl_load=no" +fi +rm -f conftest* +fi + +if eval "test \"`echo '$ac_cv_func_'shl_load`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" +else + echo "$ac_t""no" 1>&6 +echo $ac_n "checking for shl_load in -ldld""... $ac_c" 1>&6 +echo "$progname:2333: checking for shl_load in -ldld" >&5 +ac_lib_var=`echo dld'_'shl_load | sed 'y%./+-%__p_%'` +if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + ac_save_LIBS="$LIBS" +LIBS="-ldld $LIBS" +cat > conftest.$ac_ext <<EOF +#line 2341 "ltconfig" +#include "confdefs.h" +/* Override any gcc2 internal prototype to avoid an error. */ +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char shl_load(); + +int main() { +shl_load() +; return 0; } +EOF +if { (eval echo $progname:2352: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=yes" +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_lib_$ac_lib_var=no" +fi +rm -f conftest* +LIBS="$ac_save_LIBS" + +fi +if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then + echo "$ac_t""yes" 1>&6 + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + echo "$ac_t""no" 1>&6 +fi + + +fi + + +fi + + +fi + + +fi + +fi + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + fi + + case "$lt_cv_dlopen" in + dlopen) +for ac_hdr in dlfcn.h; do +ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` +echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 +echo "$progname:2395: checking for $ac_hdr" >&5 +if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + cat > conftest.$ac_ext <<EOF +#line 2400 "ltconfig" +#include <$ac_hdr> +int fnord = 0; +EOF +ac_try="$ac_compile conftest.$ac_ext >/dev/null 2>conftest.out" +{ (eval echo $progname:2405: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` +if test -z "$ac_err"; then + rm -rf conftest* + eval "ac_cv_header_$ac_safe=yes" +else + echo "$ac_err" >&5 + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_header_$ac_safe=no" +fi +rm -f conftest* +fi +if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then + echo "$ac_t""yes" 1>&6 +else + echo "$ac_t""no" 1>&6 +fi +done + + if test "x$ac_cv_header_dlfcn_h" = xyes; then + CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + fi + eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + LIBS="$lt_cv_dlopen_libs $LIBS" + + echo $ac_n "checking whether a program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2433: checking whether a program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self=cross + else + cat > conftest.c <<EOF +#line 2441 "ltconfig" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } + +EOF +if { (eval echo $progname:2487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self" 1>&6 + + if test "$lt_cv_dlopen_self" = yes; then + LDFLAGS="$LDFLAGS $link_static_flag" + echo $ac_n "checking whether a statically linked program can dlopen itself""... $ac_c" 1>&6 +echo "$progname:2506: checking whether a statically linked program can dlopen itself" >&5 +if test "${lt_cv_dlopen_self_static+set}" = set; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + if test "$cross_compiling" = yes; then + lt_cv_dlopen_self_static=cross + else + cat > conftest.c <<EOF +#line 2514 "ltconfig" + +#if HAVE_DLFCN_H +#include <dlfcn.h> +#endif + +#include <stdio.h> + +#ifdef RTLD_GLOBAL +# define LTDL_GLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LTDL_GLOBAL DL_GLOBAL +# else +# define LTDL_GLOBAL 0 +# endif +#endif + +/* We may have to define LTDL_LAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LTDL_LAZY_OR_NOW +# ifdef RTLD_LAZY +# define LTDL_LAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LTDL_LAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LTDL_LAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LTDL_LAZY_OR_NOW DL_NOW +# else +# define LTDL_LAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +fnord() { int i=42;} +main() { void *self, *ptr1, *ptr2; self=dlopen(0,LTDL_GLOBAL|LTDL_LAZY_OR_NOW); + if(self) { ptr1=dlsym(self,"fnord"); ptr2=dlsym(self,"_fnord"); + if(ptr1 || ptr2) { dlclose(self); exit(0); } } exit(1); } + +EOF +if { (eval echo $progname:2560: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null +then + lt_cv_dlopen_self_static=yes +else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -fr conftest* + lt_cv_dlopen_self_static=no +fi +rm -fr conftest* +fi + +fi + +echo "$ac_t""$lt_cv_dlopen_self_static" 1>&6 +fi + ;; + esac + + case "$lt_cv_dlopen_self" in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case "$lt_cv_dlopen_self_static" in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + +# Copy echo and quote the copy, instead of the original, because it is +# used later. +ltecho="$echo" +if test "X$ltecho" = "X$CONFIG_SHELL $0 --fallback-echo"; then + ltecho="$CONFIG_SHELL \$0 --fallback-echo" +fi +LTSHELL="$SHELL" + +LTCONFIG_VERSION="$VERSION" + +# Only quote variables if we're using ltmain.sh. +case "$ltmain" in +*.sh) + # Now quote all the things that may contain metacharacters. + for var in ltecho old_CC old_CFLAGS old_CPPFLAGS \ + old_LD old_LDFLAGS old_LIBS \ + old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS \ + AR CC LD LN_S NM LTSHELL LTCONFIG_VERSION \ + reload_flag reload_cmds wl \ + pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \ + thread_safe_flag_spec whole_archive_flag_spec libname_spec \ + library_names_spec soname_spec \ + RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \ + old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds postuninstall_cmds \ + file_magic_cmd export_symbols_cmds deplibs_check_method allow_undefined_flag no_undefined_flag \ + finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \ + hardcode_libdir_flag_spec hardcode_libdir_separator \ + sys_lib_search_path_spec sys_lib_dlsearch_path_spec \ + compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do + + case "$var" in + reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \ + old_postinstall_cmds | old_postuninstall_cmds | \ + export_symbols_cmds | archive_cmds | archive_expsym_cmds | \ + postinstall_cmds | postuninstall_cmds | \ + finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec) + # Double-quote double-evaled strings. + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\"" + ;; + *) + eval "$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\"" + ;; + esac + done + + case "$ltecho" in + *'\$0 --fallback-echo"') + ltecho=`$echo "X$ltecho" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'` + ;; + esac + + trap "$rm \"$ofile\"; exit 1" 1 2 15 + echo "creating $ofile" + $rm "$ofile" + cat <<EOF > "$ofile" +#! $SHELL + +# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +# NOTE: Changes made to this file will be lost: look at ltconfig or ltmain.sh. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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. + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="sed -e s/^X//" + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test "\${CDPATH+set}" = set; then CDPATH=; export CDPATH; fi + +### BEGIN LIBTOOL CONFIG +EOF + cfgfile="$ofile" + ;; + +*) + # Double-quote the variables that need it (for aesthetics). + for var in old_CC old_CFLAGS old_CPPFLAGS \ + old_LD old_LDFLAGS old_LIBS \ + old_NM old_RANLIB old_LN_S old_DLLTOOL old_OBJDUMP old_AS; do + eval "$var=\\\"\$var\\\"" + done + + # Just create a config file. + cfgfile="$ofile.cfg" + trap "$rm \"$cfgfile\"; exit 1" 1 2 15 + echo "creating $cfgfile" + $rm "$cfgfile" + cat <<EOF > "$cfgfile" +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Libtool configuration file. +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) +EOF + ;; +esac + +cat <<EOF >> "$cfgfile" +# Libtool was configured as follows, on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# +# CC=$old_CC CFLAGS=$old_CFLAGS CPPFLAGS=$old_CPPFLAGS \\ +# LD=$old_LD LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS \\ +# NM=$old_NM RANLIB=$old_RANLIB LN_S=$old_LN_S \\ +# DLLTOOL=$old_DLLTOOL OBJDUMP=$old_OBJDUMP AS=$old_AS \\ +# $0$ltconfig_args +# +# Compiler and other test output produced by $progname, useful for +# debugging $progname, is in ./config.log if it exists. + +# The version of $progname that generated this script. +LTCONFIG_VERSION=$LTCONFIG_VERSION + +# Shell to use when invoking shell scripts. +SHELL=$LTSHELL + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host + +# An echo program that does not interpret backslashes. +echo=$ltecho + +# The archiver. +AR=$AR + +# The default C compiler. +CC=$CC + +# The linker used to build libraries. +LD=$LD + +# Whether we need hard or soft links. +LN_S=$LN_S + +# A BSD-compatible nm program. +NM=$NM + +# Used on cygwin: DLL creation program. +DLLTOOL="$DLLTOOL" + +# Used on cygwin: object dumper. +OBJDUMP="$OBJDUMP" + +# Used on cygwin: assembler. +AS="$AS" + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# How to create reloadable object files. +reload_flag=$reload_flag +reload_cmds=$reload_cmds + +# How to pass a linker flag through the compiler. +wl=$wl + +# Object file suffix (normally "o"). +objext="$objext" + +# Old archive suffix (normally "a"). +libext="$libext" + +# Executable file suffix (normally ""). +exeext="$exeext" + +# Additional compiler flags for building library objects. +pic_flag=$pic_flag + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$compiler_c_o + +# Can we write directly to a .lo ? +compiler_o_lo=$compiler_o_lo + +# Must we lock files when doing compilation ? +need_locks=$need_locks + +# Do we need the lib prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Whether dlopen is supported. +dlopen=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Compiler flag to prevent dynamic linking. +link_static_flag=$link_static_flag + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$no_builtin_flag + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$whole_archive_flag_spec + +# Compiler flag to generate thread-safe objects. +thread_safe_flag_spec=$thread_safe_flag_spec + +# Library versioning type. +version_type=$version_type + +# Format of library name prefix. +libname_spec=$libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME. +library_names_spec=$library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$soname_spec + +# Commands used to build and install an old-style archive. +RANLIB=$RANLIB +old_archive_cmds=$old_archive_cmds +old_postinstall_cmds=$old_postinstall_cmds +old_postuninstall_cmds=$old_postuninstall_cmds + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$old_archive_from_new_cmds + +# Commands used to build and install a shared archive. +archive_cmds=$archive_cmds +archive_expsym_cmds=$archive_expsym_cmds +postinstall_cmds=$postinstall_cmds +postuninstall_cmds=$postuninstall_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$deplibs_check_method + +# Command to use when deplibs_check_method == file_magic. +file_magic_cmd=$file_magic_cmd + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$allow_undefined_flag + +# Flag that forces no undefined symbols. +no_undefined_flag=$no_undefined_flag + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$finish_cmds + +# Same as above, but a single script fragment to be evaled but not shown. +finish_eval=$finish_eval + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$global_symbol_pipe + +# Transform the output of nm in a proper C declaration +global_symbol_to_cdecl=$global_symbol_to_cdecl + +# This is the shared library runtime path variable. +runpath_var=$runpath_var + +# This is the shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec=$hardcode_libdir_flag_spec + +# Whether we need a single -rpath flag with a separated argument. +hardcode_libdir_separator=$hardcode_libdir_separator + +# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the +# resulting binary. +hardcode_direct=$hardcode_direct + +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the +# resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into +# the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Compile-time system search path for libraries +sys_lib_search_path_spec=$sys_lib_search_path_spec + +# Run-time system search path for libraries +sys_lib_dlsearch_path_spec=$sys_lib_dlsearch_path_spec + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path="$fix_srcfile_path" + +# Set to yes if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$include_expsyms + +EOF + +case "$ltmain" in +*.sh) + echo '### END LIBTOOL CONFIG' >> "$ofile" + echo >> "$ofile" + case "$host_os" in + aix3*) + cat <<\EOF >> "$ofile" + +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "${COLLECT_NAMES+set}" != set; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +EOF + ;; + esac + + # Append the ltmain.sh script. + sed '$q' "$ltmain" >> "$ofile" || (rm -f "$ofile"; exit 1) + + chmod +x "$ofile" + ;; + +*) + # Compile the libtool program. + echo "FIXME: would compile $ltmain" + ;; +esac + +test -n "$cache_file" || exit 0 + +# AC_CACHE_SAVE +trap '' 1 2 15 +cat > confcache <<\EOF +# 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. It is not useful on other systems. +# If it contains results you don't want to keep, you may remove or edit it. +# +# By default, configure uses ./config.cache as the cache file, +# creating it if it does not exist already. You can give configure +# the --cache-file=FILE option to use a different cache file; that is +# what configure does when it calls configure scripts in +# subdirectories, so they share the cache. +# Giving --cache-file=/dev/null disables caching, for debugging configure. +# config.status only pays attention to the cache file if you give it the +# --recheck option to rerun configure. +# +EOF +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# 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. +(set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote substitution + # turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + -e "s/'/'\\\\''/g" \ + -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' + ;; + esac >> confcache +if cmp -s $cache_file confcache; then + : +else + if test -w $cache_file; then + echo "updating cache $cache_file" + cat confcache > $cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/ltmain.sh b/ltmain.sh new file mode 100644 index 000000000..ae10cad02 --- /dev/null +++ b/ltmain.sh @@ -0,0 +1,3975 @@ +# ltmain.sh - Provide generalized library-building support services. +# NOTE: Changing this file will not affect anything until you rerun ltconfig. +# +# Copyright (C) 1996-1999 Free Software Foundation, Inc. +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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. + +# Check that we have a working $echo. +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : +else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<EOF +$* +EOF + exit 0 +fi + +# The name of this program. +progname=`$echo "$0" | sed 's%^.*/%%'` +modename="$progname" + +# Constants. +PROGRAM=ltmain.sh +PACKAGE=libtool +VERSION=1.3.3 +TIMESTAMP=" (1.385.2.181 1999/07/02 15:49:11)" + +default_mode= +help="Try \`$progname --help' for more information." +magic="%%%MAGIC variable%%%" +mkdir="mkdir" +mv="mv -f" +rm="rm -f" + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g' +SP2NL='tr \040 \012' +NL2SP='tr \015\012 \040\040' + +# NLS nuisances. +# Only set LANG and LC_ALL to C if already set. +# These must not be set unconditionally because not all systems understand +# e.g. LANG=C (notably SCO). +# We save the old values to restore during execute mode. +if test "${LC_ALL+set}" = set; then + save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL +fi +if test "${LANG+set}" = set; then + save_LANG="$LANG"; LANG=C; export LANG +fi + +if test "$LTCONFIG_VERSION" != "$VERSION"; then + echo "$modename: ltconfig version \`$LTCONFIG_VERSION' does not match $PROGRAM version \`$VERSION'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then + echo "$modename: not configured to build any kind of library" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 +fi + +# Global variables. +mode=$default_mode +nonopt= +prev= +prevopt= +run= +show="$echo" +show_help= +execute_dlfiles= +lo2o="s/\\.lo\$/.${objext}/" +o2lo="s/\\.${objext}\$/.lo/" + +# Parse our command line options once, thoroughly. +while test $# -gt 0 +do + arg="$1" + shift + + case "$arg" in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + execute_dlfiles) + eval "$prev=\"\$$prev \$arg\"" + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case "$arg" in + --help) + show_help=yes + ;; + + --version) + echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + exit 0 + ;; + + --config) + sed -e '1,/^### BEGIN LIBTOOL CONFIG/d' -e '/^### END LIBTOOL CONFIG/,$d' $0 + exit 0 + ;; + + --debug) + echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --features) + echo "host: $host" + if test "$build_libtool_libs" = yes; then + echo "enable shared libraries" + else + echo "disable shared libraries" + fi + if test "$build_old_libs" = yes; then + echo "enable static libraries" + else + echo "disable static libraries" + fi + exit 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --quiet | --silent) + show=: + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac +done + +if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 +fi + +if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + case "$nonopt" in + *cc | *++ | gcc* | *-gcc*) + mode=link + for arg + do + case "$arg" in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case "$mode" in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + lastarg= + srcfile="$nonopt" + suppress_output= + + user_target=no + for arg + do + # Accept any command-line options. + case "$arg" in + -o) + if test "$user_target" != "no"; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + user_target=next + ;; + + -static) + build_old_libs=yes + continue + ;; + esac + + case "$user_target" in + next) + # The next one is the -o target name + user_target=yes + continue + ;; + yes) + # We got the output file + user_target=set + libobj="$arg" + continue + ;; + esac + + # Accept the current argument as the source file. + lastarg="$srcfile" + srcfile="$arg" + + # Aesthetically quote the previous argument. + + # Backslashify any backslashes, double quotes, and dollar signs. + # These are the only characters that are still specially + # interpreted inside of double-quoted scrings. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly in scan + # sets, so we specify it separately. + case "$lastarg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + lastarg="\"$lastarg\"" + ;; + esac + + # Add the previous argument to base_compile. + if test -z "$base_compile"; then + base_compile="$lastarg" + else + base_compile="$base_compile $lastarg" + fi + done + + case "$user_target" in + set) + ;; + no) + # Get the name of the library object. + libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + *) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSfmso]' + case "$libobj" in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case "$libobj" in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Delete any leftover library objects. + if test "$build_old_libs" = yes; then + removelist="$obj $libobj" + else + removelist="$libobj" + fi + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # Calculate the filename of the output object if compiler does + # not support -o with -c + if test "$compiler_c_o" = no; then + output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\..*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + else + need_locks=no + lockfile= + fi + + # Lock this critical section if it is needed + # We use this script file to make the link, it avoids creating a new file + if test "$need_locks" = yes; then + until ln "$0" "$lockfile" 2>/dev/null; do + $show "Waiting for $lockfile to be removed" + sleep 2 + done + elif test "$need_locks" = warn; then + if test -f "$lockfile"; then + echo "\ +*** ERROR, $lockfile exists and contains: +`cat $lockfile 2>/dev/null` + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + # Only build a PIC object if we are building libtool libraries. + if test "$build_libtool_libs" = yes; then + # Without this assignment, base_compile gets emptied. + fbsd_hideous_sh_bug=$base_compile + + # All platforms use -DPIC, to notify preprocessed assembler code. + command="$base_compile $pic_flag -DPIC $srcfile" + if test "$build_old_libs" = yes; then + lo_libobj="$libobj" + dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$libobj"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'` + + if test -d "$dir"; then + $show "$rm $libobj" + $run $rm $libobj + else + $show "$mkdir $dir" + $run $mkdir $dir + status=$? + if test $status -ne 0 && test ! -d $dir; then + exit $status + fi + fi + fi + if test "$compiler_o_lo" = yes; then + output_obj="$libobj" + command="$command -o $output_obj" + elif test "$compiler_c_o" = yes; then + output_obj="$obj" + command="$command -o $output_obj" + fi + + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + test -n "$output_obj" && $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed, then go on to compile the next one + if test x"$output_obj" != x"$libobj"; then + $show "$mv $output_obj $libobj" + if $run $mv $output_obj $libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # If we have no pic_flag, then copy the object into place and finish. + if test -z "$pic_flag" && test "$build_old_libs" = yes; then + # Rename the .lo from within objdir to obj + if test -f $obj; then + $show $rm $obj + $run $rm $obj + fi + + $show "$mv $libobj $obj" + if $run $mv $libobj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + + # Now arrange that obj and lo_libobj become the same file + $show "$LN_S $obj $lo_libobj" + if $run $LN_S $obj $lo_libobj; then + exit 0 + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Allow error messages only from the first compilation. + suppress_output=' >/dev/null 2>&1' + fi + + # Only build a position-dependent object if we build old libraries. + if test "$build_old_libs" = yes; then + command="$base_compile $srcfile" + if test "$compiler_c_o" = yes; then + command="$command -o $obj" + output_obj="$obj" + fi + + # Suppress compiler output if we already did a PIC compilation. + command="$command$suppress_output" + $run $rm "$output_obj" + $show "$command" + if $run eval "$command"; then : + else + $run $rm $removelist + exit 1 + fi + + if test "$need_locks" = warn && + test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then + echo "\ +*** ERROR, $lockfile contains: +`cat $lockfile 2>/dev/null` + +but it should contain: +$srcfile + +This indicates that another process is trying to use the same +temporary object file, and libtool could not work around it because +your compiler does not support \`-c' and \`-o' together. If you +repeat this compilation, it may succeed, by chance, but you had better +avoid parallel builds (make -j) in this platform, or get a better +compiler." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test x"$output_obj" != x"$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Create an invalid libtool object if no PIC, so that we do not + # accidentally link it into a program. + if test "$build_libtool_libs" != yes; then + $show "echo timestamp > $libobj" + $run eval "echo timestamp > \$libobj" || exit $? + else + # Move the .lo from within objdir + $show "$mv $libobj $lo_libobj" + if $run $mv $libobj $lo_libobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + fi + + # Unlock the critical section if it was locked + if test "$need_locks" != no; then + $rm "$lockfile" + fi + + exit 0 + ;; + + # libtool link mode + link) + modename="$modename: link" + C_compiler="$CC" # save it, to compile generated C sources + CC="$nonopt" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + # It is impossible to link a dll without this setting, and + # we shouldn't force the makefile maintainer to figure out + # which system we are compiling for in order to pass an extra + # flag for every libtool invokation. + # allow_undefined=no + + # FIXME: Unfortunately, there are problems with the above when trying + # to make a dll which has undefined symbols, in which case not + # even a static library is built. For now, we need to specify + # -no-undefined on the libtool link line when we can be certain + # that all symbols are satisfied, otherwise we get a static library. + allow_undefined=yes + + # This is a source program that is used to create dlls on Windows + # Don't remove nor modify the starting and closing comments +# /* ltdll.c starts here */ +# #define WIN32_LEAN_AND_MEAN +# #include <windows.h> +# #undef WIN32_LEAN_AND_MEAN +# #include <stdio.h> +# +# #ifndef __CYGWIN__ +# # ifdef __CYGWIN32__ +# # define __CYGWIN__ __CYGWIN32__ +# # endif +# #endif +# +# #ifdef __cplusplus +# extern "C" { +# #endif +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); +# #ifdef __cplusplus +# } +# #endif +# +# #ifdef __CYGWIN__ +# #include <cygwin/cygwin_dll.h> +# DECLARE_CYGWIN_DLL( DllMain ); +# #endif +# HINSTANCE __hDllInstance_base; +# +# BOOL APIENTRY +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) +# { +# __hDllInstance_base = hInst; +# return TRUE; +# } +# /* ltdll.c ends here */ + # This is a source program that is used to create import libraries + # on Windows for dlls which lack them. Don't remove nor modify the + # starting and closing comments +# /* impgen.c starts here */ +# /* Copyright (C) 1999 Free Software Foundation, Inc. +# +# This file is part of GNU libtool. +# +# 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. +# */ +# +# #include <stdio.h> /* for printf() */ +# #include <unistd.h> /* for open(), lseek(), read() */ +# #include <fcntl.h> /* for O_RDONLY, O_BINARY */ +# #include <string.h> /* for strdup() */ +# +# static unsigned int +# pe_get16 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[2]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 2); +# return b[0] + (b[1]<<8); +# } +# +# static unsigned int +# pe_get32 (fd, offset) +# int fd; +# int offset; +# { +# unsigned char b[4]; +# lseek (fd, offset, SEEK_SET); +# read (fd, b, 4); +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# static unsigned int +# pe_as32 (ptr) +# void *ptr; +# { +# unsigned char *b = ptr; +# return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24); +# } +# +# int +# main (argc, argv) +# int argc; +# char *argv[]; +# { +# int dll; +# unsigned long pe_header_offset, opthdr_ofs, num_entries, i; +# unsigned long export_rva, export_size, nsections, secptr, expptr; +# unsigned long name_rvas, nexp; +# unsigned char *expdata, *erva; +# char *filename, *dll_name; +# +# filename = argv[1]; +# +# dll = open(filename, O_RDONLY|O_BINARY); +# if (!dll) +# return 1; +# +# dll_name = filename; +# +# for (i=0; filename[i]; i++) +# if (filename[i] == '/' || filename[i] == '\\' || filename[i] == ':') +# dll_name = filename + i +1; +# +# pe_header_offset = pe_get32 (dll, 0x3c); +# opthdr_ofs = pe_header_offset + 4 + 20; +# num_entries = pe_get32 (dll, opthdr_ofs + 92); +# +# if (num_entries < 1) /* no exports */ +# return 1; +# +# export_rva = pe_get32 (dll, opthdr_ofs + 96); +# export_size = pe_get32 (dll, opthdr_ofs + 100); +# nsections = pe_get16 (dll, pe_header_offset + 4 +2); +# secptr = (pe_header_offset + 4 + 20 + +# pe_get16 (dll, pe_header_offset + 4 + 16)); +# +# expptr = 0; +# for (i = 0; i < nsections; i++) +# { +# char sname[8]; +# unsigned long secptr1 = secptr + 40 * i; +# unsigned long vaddr = pe_get32 (dll, secptr1 + 12); +# unsigned long vsize = pe_get32 (dll, secptr1 + 16); +# unsigned long fptr = pe_get32 (dll, secptr1 + 20); +# lseek(dll, secptr1, SEEK_SET); +# read(dll, sname, 8); +# if (vaddr <= export_rva && vaddr+vsize > export_rva) +# { +# expptr = fptr + (export_rva - vaddr); +# if (export_rva + export_size > vaddr + vsize) +# export_size = vsize - (export_rva - vaddr); +# break; +# } +# } +# +# expdata = (unsigned char*)malloc(export_size); +# lseek (dll, expptr, SEEK_SET); +# read (dll, expdata, export_size); +# erva = expdata - export_rva; +# +# nexp = pe_as32 (expdata+24); +# name_rvas = pe_as32 (expdata+32); +# +# printf ("EXPORTS\n"); +# for (i = 0; i<nexp; i++) +# { +# unsigned long name_rva = pe_as32 (erva+name_rvas+i*4); +# printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i); +# } +# +# return 0; +# } +# /* impgen.c ends here */ + ;; + *) + allow_undefined=yes + ;; + esac + compile_command="$CC" + finalize_command="$CC" + + compile_rpath= + finalize_rpath= + compile_shlibpath= + finalize_shlibpath= + convenience= + old_convenience= + deplibs= + linkopts= + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval lib_search_path=\`\$echo \"X \${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\` + else + lib_search_path= + fi + # now prepend the system-specific ones + eval lib_search_path=\"$sys_lib_search_path_spec\$lib_search_path\" + eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" + + avoid_version=no + dlfiles= + dlprefiles= + dlself=no + export_dynamic=no + export_symbols= + export_symbols_regex= + generated= + libobjs= + link_against_libtool_libs= + ltlibs= + module=no + objs= + prefer_static_libs=no + preload=no + prev= + prevarg= + release= + rpath= + xrpath= + perm_rpath= + temp_rpath= + thread_safe=no + vinfo= + + # We need to know -static, to get the right output filenames. + for arg + do + case "$arg" in + -all-static | -static) + if test "X$arg" = "X-all-static"; then + if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then + $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_libs=yes + break + ;; + esac + done + + # See if our shared archives depend on static archives. + test -n "$old_archive_from_new_cmds" && build_old_libs=yes + + # Go through the arguments, transforming them on the way. + while test $# -gt 0; do + arg="$1" + shift + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case "$prev" in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case "$prev" in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$finalize_command @SYMFILE@" + preload=yes + fi + case "$arg" in + *.la | *.lo) ;; # We handle these cases below. + force) + if test "$dlself" = no; then + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + self) + if test "$prev" = dlprefiles; then + dlself=yes + elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then + dlself=yes + else + dlself=needless + export_dynamic=yes + fi + prev= + continue + ;; + *) + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case "$arg" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + *) + eval "$prev=\"\$arg\"" + prev= + continue + ;; + esac + fi + + prevarg="$arg" + + case "$arg" in + -all-static) + if test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + continue + ;; + + -dlopen) + prev=dlfiles + continue + ;; + + -dlpreopen) + prev=dlprefiles + continue + ;; + + -export-dynamic) + export_dynamic=yes + continue + ;; + + -export-symbols | -export-symbols-regex) + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: not more than one -exported-symbols argument allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + absdir="$dir" + fi + dir="$absdir" + ;; + esac + case " $deplibs " in + *" $arg "*) ;; + *) deplibs="$deplibs $arg";; + esac + case " $lib_search_path " in + *" $dir "*) ;; + *) lib_search_path="$lib_search_path $dir";; + esac + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + case ":$dllsearchpath:" in + ::) dllsearchpath="$dllsearchdir";; + *":$dllsearchdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dllsearchdir";; + esac + ;; + esac + ;; + + -l*) + if test "$arg" = "-lc"; then + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) + # These systems don't actually have c library (as such) + continue + ;; + esac + elif test "$arg" = "-lm"; then + case "$host" in + *-*-cygwin* | *-*-beos*) + # These systems don't actually have math library (as such) + continue + ;; + esac + fi + deplibs="$deplibs $arg" + ;; + + -module) + module=yes + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # If we have no pic_flag, then this is the same as -all-static. + if test -z "$pic_flag" && test -n "$link_static_flag"; then + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -thread-safe) + thread_safe=yes + continue + ;; + + -version-info) + prev=vinfo + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + + *.o | *.obj | *.a | *.lib) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A library object. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test "$build_libtool_libs" = yes && test "$dlopen" = yes; then + prev= + continue + else + # If libtool objects are unsupported, then we need to preload. + prev=dlprefiles + fi + fi + + if test "$prev" = dlprefiles; then + # Preload the old-style object. + dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"` + prev= + fi + libobjs="$libobjs $arg" + ;; + + *.la) + # A libtool-controlled library. + + dlname= + libdir= + library_names= + old_library= + + # Check to see that this really is a libtool archive. + if (sed -e '2q' $arg | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$arg' is not a valid libtool archive" 1>&2 + exit 1 + fi + + # If the library was installed with an old release of libtool, + # it will not redefine variable installed. + installed=yes + + # Read the .la file + # If there is no directory component, then add one. + case "$arg" in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$arg'" 1>&2 + exit 1 + fi + + # Find the relevant object directory and library name. + name=`$echo "X$arg" | $Xsed -e 's%^.*/%%' -e 's/\.la$//' -e 's/^lib//'` + + if test "X$installed" = Xyes; then + dir="$libdir" + else + dir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$arg"; then + dir="$objdir" + else + dir="$dir/$objdir" + fi + fi + + if test -n "$dependency_libs"; then + # Extract -R and -L from dependency_libs + temp_deplibs= + for deplib in $dependency_libs; do + case "$deplib" in + -R*) temp_xrpath=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + case " $rpath $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + -L*) case "$compile_command $temp_deplibs " in + *" $deplib "*) ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + temp_dir=`$echo "X$deplib" | $Xsed -e 's/^-L//'` + case " $lib_search_path " in + *" $temp_dir "*) ;; + *) lib_search_path="$lib_search_path $temp_dir";; + esac + ;; + *) temp_deplibs="$temp_deplibs $deplib";; + esac + done + dependency_libs="$temp_deplibs" + fi + + if test -z "$libdir"; then + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + deplibs="$deplibs$dependency_libs" + compile_command="$compile_command $dir/$old_library$dependency_libs" + finalize_command="$finalize_command $dir/$old_library$dependency_libs" + continue + fi + + # This library was specified with -dlopen. + if test "$prev" = dlfiles; then + dlfiles="$dlfiles $arg" + if test -z "$dlname" || test "$dlopen" != yes || test "$build_libtool_libs" = no; then + # If there is no dlname, no dlopen support or we're linking statically, + # we need to preload. + prev=dlprefiles + else + # We should not create a dependency on this library, but we + # may need any libraries it requires. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + prev= + continue + fi + fi + + # The library was specified with -dlpreopen. + if test "$prev" = dlprefiles; then + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + dlprefiles="$dlprefiles $dir/$old_library" + else + dlprefiles="$dlprefiles $dir/$linklib" + fi + prev= + fi + + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + link_against_libtool_libs="$link_against_libtool_libs $arg" + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + esac + fi + + # We need an absolute path. + case "$dir" in + [\\/] | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + absdir="$dir" + fi + ;; + esac + + # This is the magic to use -rpath. + # Skip directories that are in the system default run-time + # search path, unless they have been requested with -R. + case " $sys_lib_dlsearch_path " in + *" $absdir "*) ;; + *) + case "$compile_rpath " in + *" $absdir "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + + lib_linked=yes + case "$hardcode_action" in + immediate | unsupported) + if test "$hardcode_direct" = no; then + compile_command="$compile_command $dir/$linklib" + deplibs="$deplibs $dir/$linklib" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2*) + dllsearchdir=`cd "$dir" && pwd || echo "$dir"` + if test -n "$dllsearchpath"; then + dllsearchpath="$dllsearchpath:$dllsearchdir" + else + dllsearchpath="$dllsearchdir" + fi + ;; + esac + elif test "$hardcode_minus_L" = no; then + case "$host" in + *-*-sunos*) + compile_shlibpath="$compile_shlibpath$dir:" + ;; + esac + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$dir -l$name" + elif test "$hardcode_shlibpath_var" = no; then + case ":$compile_shlibpath:" in + *":$dir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$dir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + relink) + if test "$hardcode_direct" = yes; then + compile_command="$compile_command $absdir/$linklib" + deplibs="$deplibs $absdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$compile_command " in + *" -L$absdir "*) ;; + *) compile_command="$compile_command -L$absdir";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -L$absdir -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$compile_shlibpath:" in + *":$absdir:"*) ;; + *) compile_shlibpath="$compile_shlibpath$absdir:";; + esac + compile_command="$compile_command -l$name" + deplibs="$deplibs -l$name" + else + lib_linked=no + fi + ;; + + *) + lib_linked=no + ;; + esac + + if test "$lib_linked" != yes; then + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; then + finalize_command="$finalize_command $libdir/$linklib" + elif test "$hardcode_minus_L" = yes; then + case "$finalize_command " in + *" -L$libdir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + elif test "$hardcode_shlibpath_var" = yes; then + case ":$finalize_shlibpath:" in + *":$libdir:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:";; + esac + finalize_command="$finalize_command -l$name" + else + # We cannot seem to hardcode it, guess we'll fake it. + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$libdir";; + esac + finalize_command="$finalize_command -l$name" + fi + else + # Transform directly to old archives if we don't build new libraries. + if test -n "$pic_flag" && test -z "$old_library"; then + $echo "$modename: cannot find static library for \`$arg'" 1>&2 + exit 1 + fi + + # Here we assume that one of hardcode_direct or hardcode_minus_L + # is not unsupported. This is valid on all known static and + # shared platforms. + if test "$hardcode_direct" != unsupported; then + test -n "$old_library" && linklib="$old_library" + compile_command="$compile_command $dir/$linklib" + finalize_command="$finalize_command $dir/$linklib" + else + case "$compile_command " in + *" -L$dir "*) ;; + *) compile_command="$compile_command -L$dir";; + esac + compile_command="$compile_command -l$name" + case "$finalize_command " in + *" -L$dir "*) ;; + *) finalize_command="$finalize_command -L$dir";; + esac + finalize_command="$finalize_command -l$name" + fi + fi + + # Add in any libraries that this one depends upon. + compile_command="$compile_command$dependency_libs" + finalize_command="$finalize_command$dependency_libs" + continue + ;; + + # Some other compiler argument. + *) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + ;; + esac + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + case "$output" in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *.a | *.lib) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into archives" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + ;; + + *.la) + # Make sure we only generate libraries of the form `libNAME.la'. + case "$outputname" in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + if test -n "$objs"; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects:$objs" 2>&1 + exit 1 + fi + + # How the heck are we supposed to write a wrapper for a shared library? + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link shared libraries into libtool libraries" 1>&2 + exit 1 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test $# -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + oldlibs= + if test -z "$rpath"; then + if test "$build_libtool_libs" = yes; then + # Building a libtool convenience library. + libext=al + oldlibs="$output_objdir/$libname.$libext $oldlibs" + build_libtool_libs=convenience + build_old_libs=yes + fi + dependency_libs="$deplibs" + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + IFS="${IFS= }"; save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + current="$2" + revision="$3" + age="$4" + + # Check that each of the things are valid numbers. + case "$current" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$revision" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case "$age" in + 0 | [1-9] | [1-9][0-9]*) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test $age -gt $current; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + fi + + # Calculate the version variables. + major= + versuffix= + verstring= + case "$version_type" in + none) ;; + + irix) + major=`expr $current - $age + 1` + versuffix="$major.$revision" + verstring="sgi$major.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$revision + while test $loop != 0; do + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="sgi$major.$iface:$verstring" + done + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=`expr $current - $age` + versuffix=".$current.$age.$revision" + verstring="$current.$age.$revision" + + # Add in all the interfaces that we are compatible with. + loop=$age + while test $loop != 0; do + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + freebsd-aout) + major=".$current" + versuffix=".$current.$revision"; + ;; + + freebsd-elf) + major=".$current" + versuffix=".$current"; + ;; + + windows) + # Like Linux, but with '-' rather than '.', since we only + # want one extension on Windows 95. + major=`expr $current - $age` + versuffix="-$major-$age-$revision" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + esac + + # Clear the version info if we defaulted, and they specified a release. + if test -z "$vinfo" && test -n "$release"; then + major= + verstring="0.0" + if test "$need_version" = no; then + versuffix= + else + versuffix=".0.0" + fi + fi + + # Remove version info from name if versioning should be avoided + if test "$avoid_version" = yes && test "$need_version" = no; then + major= + versuffix= + verstring="" + fi + + # Check to see if the archive will have undefined symbols. + if test "$allow_undefined" = yes; then + if test "$allow_undefined_flag" = unsupported; then + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + + dependency_libs="$deplibs" + case "$host" in + *-*-cygwin* | *-*-mingw* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *) + # Add libc to deplibs on all other systems. + deplibs="$deplibs -lc" + ;; + esac + fi + + # Create the output directory, or remove our outputs if we need to. + if test -d $output_objdir; then + $show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*" + $run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.* + else + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + if test "$build_libtool_libs" = yes; then + # Transform deplibs into only deplibs that can be linked in shared. + name_save=$name + libname_save=$libname + release_save=$release + versuffix_save=$versuffix + major_save=$major + # I'm not sure if I'm treating the release correctly. I think + # release should show up in the -l (ie -lgmp5) so we don't want to + # add it in twice. Is that correct? + release="" + versuffix="" + major="" + newdeplibs= + droppeddeps=no + case "$deplibs_check_method" in + pass_all) + # Don't check for shared/static. Everything works. + # This might be a little naive. We might want to check + # whether the library exists or not. But this is on + # osf3 & osf4 and I'm not really sure... Just + # implementing what was already the behaviour. + newdeplibs=$deplibs + ;; + test_compile) + # This code stresses the "libraries are programs" paradigm to its + # limits. Maybe even breaks it. We compile a program, linking it + # against the deplibs as a proxy for the library. Then we can check + # whether they linked in statically or dynamically with ldd. + $rm conftest.c + cat > conftest.c <<EOF + int main() { return 0; } +EOF + $rm conftest + $C_compiler -o conftest conftest.c $deplibs + if test $? -eq 0 ; then + ldd_output=`ldd conftest` + for i in $deplibs; do + name="`expr $i : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test "$name" != "" ; then + libname=`eval \\$echo \"$libname_spec\"` + deplib_matches=`eval \\$echo \"$library_names_spec\"` + set dummy $deplib_matches + deplib_match=$2 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + newdeplibs="$newdeplibs $i" + else + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + newdeplibs="$newdeplibs $i" + fi + done + else + # Error occured in the first compile. Let's try to salvage the situation: + # Compile a seperate program for each library. + for i in $deplibs; do + name="`expr $i : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test "$name" != "" ; then + $rm conftest + $C_compiler -o conftest conftest.c $i + # Did it work? + if test $? -eq 0 ; then + ldd_output=`ldd conftest` + libname=`eval \\$echo \"$libname_spec\"` + deplib_matches=`eval \\$echo \"$library_names_spec\"` + set dummy $deplib_matches + deplib_match=$2 + if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then + newdeplibs="$newdeplibs $i" + else + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $i." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + droppeddeps=yes + echo + echo "*** Warning! Library $i is needed by this library but I was not able to" + echo "*** make it link in! You will probably need to install it or some" + echo "*** library that it depends on before this library will be fully" + echo "*** functional. Installing it before continuing would be even better." + fi + else + newdeplibs="$newdeplibs $i" + fi + done + fi + ;; + file_magic*) + set dummy $deplibs_check_method + file_magic_regex="`expr \"$deplibs_check_method\" : \"$2 \(.*\)\"`" + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test "$name" != "" ; then + libname=`eval \\$echo \"$libname_spec\"` + for i in $lib_search_path; do + potential_libs=`ls $i/$libname[.-]* 2>/dev/null` + for potent_lib in $potential_libs; do + # Follow soft links. + if ls -lLd "$potent_lib" 2>/dev/null \ + | grep " -> " >/dev/null; then + continue + fi + # The statement above tries to avoid entering an + # endless loop below, in case of cyclic links. + # We might still enter an endless loop, since a link + # loop can be closed while we follow links, + # but so what? + potlib="$potent_lib" + while test -h "$potlib" 2>/dev/null; do + potliblink=`ls -ld $potlib | sed 's/.* -> //'` + case "$potliblink" in + [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; + *) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | sed 10q \ + | egrep "$file_magic_regex" > /dev/null; then + newdeplibs="$newdeplibs $a_deplib" + a_deplib="" + break 2 + fi + done + done + if test -n "$a_deplib" ; then + droppeddeps=yes + echo + echo "*** Warning: This library needs some functionality provided by $a_deplib." + echo "*** I have the capability to make that library automatically link in when" + echo "*** you link to this library. But I can only do this if you have a" + echo "*** shared version of the library, which you do not appear to have." + fi + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e 's/ -[LR][^ ]*//g' -e 's/[ ]//g' | + grep . >/dev/null; then + echo + if test "X$deplibs_check_method" = "Xnone"; then + echo "*** Warning: inter-library dependencies are not supported in this platform." + else + echo "*** Warning: inter-library dependencies are not known to be supported." + fi + echo "*** All declared inter-library dependencies are being dropped." + droppeddeps=yes + fi + ;; + esac + versuffix=$versuffix_save + major=$major_save + release=$release_save + libname=$libname_save + name=$name_save + + if test "$droppeddeps" = yes; then + if test "$module" = yes; then + echo + echo "*** Warning: libtool could not satisfy all declared inter-library" + echo "*** dependencies of module $libname. Therefore, libtool will create" + echo "*** a static module, that should work as long as the dlopening" + echo "*** application is linked with the -dlopen flag." + if test -z "$global_symbol_pipe"; then + echo + echo "*** However, this would only work if libtool was able to extract symbol" + echo "*** lists from a program, using \`nm' or equivalent, but libtool could" + echo "*** not find such a program. So, this module is probably useless." + echo "*** \`nm' from GNU binutils and a full rebuild may help." + fi + if test "$build_old_libs" = no; then + oldlibs="$output_objdir/$libname.$libext" + build_libtool_libs=module + build_old_libs=yes + else + build_libtool_libs=no + fi + else + echo "*** The inter-library dependencies that have been dropped here will be" + echo "*** automatically added whenever a program is linked with this library" + echo "*** or is declared to -dlopen it." + fi + fi + # Done checking deplibs! + deplibs=$newdeplibs + fi + + # All the library-specific variables (install_libdir is set above). + library_names= + old_library= + dlname= + + # Test again, we may have decided not to build it any more + if test "$build_libtool_libs" = yes; then + # Get the real and link names of the library. + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; shift + + if test -n "$soname_spec"; then + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + lib="$output_objdir/$realname" + for link + do + linknames="$linknames $link" + done + + # Ensure that we have .o objects for linkers which dislike .lo + # (e.g. aix) incase we are running --disable-static + for obj in $libobjs; do + oldobj=`$echo "X$obj" | $Xsed -e "$lo2o"` + if test ! -f $oldobj; then + $show "${LN_S} $obj $oldobj" + $run ${LN_S} $obj $oldobj || exit $? + fi + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linkopts="$linkopts $flag" + fi + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $? + fi + done + + # If -module or -export-dynamic was specified, set the dlname. + if test "$module" = yes || test "$export_dynamic" = yes; then + # On all known operating systems, these are identical. + dlname="$soname" + fi + fi + ;; + + *.lo | *.o | *.obj) + if test -n "$link_against_libtool_libs"; then + $echo "$modename: error: cannot link libtool libraries into objects" 1>&2 + exit 1 + fi + + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case "$output" in + *.lo) + if test -n "$objs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $run $rm $obj $libobj + + # Objects from convenience libraries. This assumes + # single-version convenience libraries. Whenever we create + # different ones for PIC/non-PIC, this we'll have to duplicate + # the extraction. + reload_conv_objs= + gentop= + # reload_cmds runs $LD directly, so let us get rid of + # -Wl from whole_archive_flag_spec + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" + + output="$obj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + # Create an invalid libtool object if no PIC, so that we don't + # accidentally link it into a program. + $show "echo timestamp > $libobj" + $run eval "echo timestamp > $libobj" || exit $? + exit 0 + fi + + if test -n "$pic_flag"; then + # Only do commands if we really have different PIC objects. + reload_objs="$libobjs $reload_conv_objs" + output="$libobj" + eval cmds=\"$reload_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + else + # Just create a symlink. + $show $rm $libobj + $run $rm $libobj + $show "$LN_S $obj $libobj" + $run $LN_S $obj $libobj || exit $? + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + # Anything else should be a program. + *) + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + if test -n "$rpath$xrpath"; then + # If the user specified any rpath flags, then add them. + for libdir in $rpath $xrpath; do + # This is the magic to use -rpath. + case "$compile_rpath " in + *" $libdir "*) ;; + *) compile_rpath="$compile_rpath $libdir" ;; + esac + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" ;; + esac + done + fi + + # Now hardcode the library paths + rpath= + hardcode_libdirs= + for libdir in $compile_rpath $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + compile_rpath="$rpath" + + rpath= + hardcode_libdirs= + for libdir in $finalize_rpath; do + if test -n "$hardcode_libdir_flag_spec"; then + if test -n "$hardcode_libdir_separator"; then + if test -z "$hardcode_libdirs"; then + hardcode_libdirs="$libdir" + else + # Just accumulate the unique libdirs. + case "$hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator" in + *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;; + esac + fi + done + # Substitute the hardcoded libdirs into the rpath. + if test -n "$hardcode_libdir_separator" && + test -n "$hardcode_libdirs"; then + libdir="$hardcode_libdirs" + eval rpath=\" $hardcode_libdir_flag_spec\" + fi + finalize_rpath="$rpath" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + + # Create the binary in the object directory, then wrap it. + if test ! -d $output_objdir; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test $status -ne 0 && test ! -d $output_objdir; then + exit $status + fi + fi + + if test -n "$libobjs" && test "$build_old_libs" = yes; then + # Transform all the library objects into standard objects. + compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case "$dlsyms" in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + +#ifdef __cplusplus +extern \"C\" { +#endif + +/* Prevent the only kind of declaration conflicts we can make. */ +#define lt_preloaded_symbols some_other_symbol + +/* External symbol declarations for the compiler. */\ +" + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`echo "$arg" | sed -e 's%^.*/%%'` + $run eval 'echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # Make sure we have at least an empty file. + test -f "$nlist" || : > "$nlist" + + if test -n "$exclude_expsyms"; then + egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T + $mv "$nlist"T "$nlist" + fi + + # Try sorting and uniquifying the output. + if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then + : + else + grep -v "^: " < "$nlist" > "$nlist"S + fi + + if test -f "$nlist"S; then + eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"' + else + echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + +#undef lt_preloaded_symbols + +#if defined (__STDC__) && __STDC__ +# define lt_ptr_t void * +#else +# define lt_ptr_t char * +# define const +#endif + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + lt_ptr_t address; +} +lt_preloaded_symbols[] = +{\ +" + + sed -n -e 's/^: \([^ ]*\) $/ {\"\1\", (lt_ptr_t) 0},/p' \ + -e 's/^. \([^ ]*\) \([^ ]*\)$/ {"\2", (lt_ptr_t) \&\2},/p' \ + < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr_t) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif\ +" + fi + + pic_flag_for_symtable= + case "$host" in + # compiling the symbol table file with pic_flag works around + # a FreeBSD bug that causes programs to crash when -lm is + # linked before any other PIC object. But we must not use + # pic_flag when linking with -static. The problem exists in + # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. + *-*-freebsd2*|*-*-freebsd3.0*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $C_compiler -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + esac + else + # We keep going just in case the user didn't refer to + # lt_preloaded_symbols. The linker will fail if global_symbol_pipe + # really was required. + + # Nullify the symbol file. + compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test -z "$link_against_libtool_libs" || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case "$dir" in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + fi + + if test -n "$compile_shlibpath$finalize_shlibpath"; then + compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" + fi + if test -n "$finalize_shlibpath"; then + finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" + fi + + compile_var= + finalize_var= + if test -n "$runpath_var"; then + if test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$rpath$dir:" + done + compile_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + if test -n "$finalize_perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $finalize_perm_rpath; do + rpath="$rpath$dir:" + done + finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " + fi + fi + + if test "$hardcode_action" = relink; then + # Fast installation is not supported + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'` + else + # fast_install is set to needless + relink_command= + fi + else + link_command="$compile_var$compile_command$compile_rpath" + relink_command="$finalize_var$finalize_command$finalize_rpath" + fi + fi + + # Replace the output file specification. + link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "creating $output" + + # Quote the relink command for shipping. + if test -n "$relink_command"; then + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case "$0" in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`echo $output|sed 's,.exe$,,'` ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ +#! $SHELL + +# $output - temporary wrapper script for $objdir/$outputname +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# The $output program cannot be directly executed until all the libtool +# libraries that it depends on are installed. +# +# This wrapper script should never be moved out of the build directory. +# If it is, it will not operate correctly. + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +Xsed='sed -e 1s/^X//' +sed_quote_subst='$sed_quote_subst' + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +if test \"\${CDPATH+set}\" = set; then CDPATH=; export CDPATH; fi + +relink_command=\"$relink_command\" + +# This environment variable determines our operation mode. +if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + link_against_libtool_libs='$link_against_libtool_libs' +else + # When we are sourced in execute mode, \$file and \$echo are already set. + if test \"\$libtool_execute_magic\" != \"$magic\"; then + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ +" + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\` + test \"x\$thisdir\" = \"x\$file\" && thisdir=. + + # Follow symbolic links until we get to the real thisdir. + file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\` + while test -n \"\$file\"; do + destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\` + + # If there was a directory component, then change thisdir. + if test \"x\$destdir\" != \"x\$file\"; then + case \"\$destdir\" in + [\\/]* | [A-Za-z]:[\\/]*) thisdir=\"\$destdir\" ;; + *) thisdir=\"\$thisdir/\$destdir\" ;; + esac + fi + + file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" +" + + if test "$fast_install" = yes; then + echo >> $output "\ + program=lt-'$outputname' + progdir=\"\$thisdir/$objdir\" + + if test ! -f \"\$progdir/\$program\" || \\ + { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\ + test \"X\$file\" != \"X\$progdir/\$program\"; }; then + + file=\"\$\$-\$program\" + + if test ! -d \"\$progdir\"; then + $mkdir \"\$progdir\" + else + $rm \"\$progdir/\$file\" + fi" + + echo >> $output "\ + + # relink executable if necessary + if test -n \"\$relink_command\"; then + if (cd \"\$thisdir\" && eval \$relink_command); then : + else + $rm \"\$progdir/\$file\" + exit 1 + fi + fi + + $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || + { $rm \"\$progdir/\$program\"; + $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; } + $rm \"\$progdir/\$file\" + fi" + else + echo >> $output "\ + program='$outputname$exeext' + progdir=\"\$thisdir/$objdir\" +" + fi + + echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # Add our own library path to $shlibpath_var + $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" + + # Some systems cannot cope with colon-terminated $shlibpath_var + # The second colon is a workaround for a bug in BeOS R4 sed + $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var +" + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH +" + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. +" + case $host in + *-*-cygwin* | *-*-mingw | *-*-os2*) + # win32 systems need to use the prog path for dll + # lookup to work + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} +" + ;; + *) + $echo >> $output "\ + # Export the path to the program. + PATH=\"\$progdir:\$PATH\" + export PATH + + exec \$program \${1+\"\$@\"} +" + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 1 + fi + else + # The program doesn't exist. + \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2 + \$echo \"This script is just a wrapper for \$program.\" 1>&2 + echo \"See the $PACKAGE documentation for more information.\" 1>&2 + exit 1 + fi +fi\ +" + chmod +x $output + fi + exit 0 + ;; + esac + + # See if we need to build an old-fashioned archive. + for oldlib in $oldlibs; do + + if test "$build_libtool_libs" = convenience; then + oldobjs="$libobjs_save" + addlibs="$convenience" + build_libtool_libs=no + else + if test "$build_libtool_libs" = module; then + oldobjs="$libobjs_save" + build_libtool_libs=no + else + oldobjs="$objs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP` + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "mkdir $gentop" + $run mkdir "$gentop" + status=$? + if test $status -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case "$xlib" in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "mkdir $xdir" + $run mkdir "$xdir" + status=$? + if test $status -ne 0 && test ! -d "$xdir"; then + exit $status + fi + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + # Ensure that we have .o objects in place incase we decided + # not to build a shared library, and have fallen back to building + # static libs even though --disable-static was passed! + for oldobj in $oldobjs; do + if test ! -f $oldobj; then + obj=`$echo "X$oldobj" | $Xsed -e "$o2lo"` + $show "${LN_S} $obj $oldobj" + $run ${LN_S} $obj $oldobj || exit $? + fi + done + + eval cmds=\"$old_archive_cmds\" + fi + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case "$output" in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "creating $output" + + if test -n "$xrpath"; then + temp_xrpath= + for libdir in $xrpath; do + temp_xrpath="$temp_xrpath -R$libdir" + done + dependency_libs="$temp_xrpath $dependency_libs" + fi + + # Only create the output if not a dry run. + if test -z "$run"; then + for installed in no yes; do + if test "$installed" = yes; then + if test -z "$install_libdir"; then + break + fi + output="$output_objdir/$outputname"i + fi + $rm $output + $echo > $output "\ +# $outputname - a libtool library file +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP +# +# Please DO NOT delete this file! +# It is necessary for linking the library. + +# The name that we can dlopen(3). +dlname='$dlname' + +# Names of this library. +library_names='$library_names' + +# The name of the static archive. +old_library='$old_library' + +# Libraries that this one depends upon. +dependency_libs='$dependency_libs' + +# Version information for $libname. +current=$current +age=$age +revision=$revision + +# Is this an already installed library? +installed=$installed + +# Directory that this library needs to be installed in: +libdir='$install_libdir'\ +" + done + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # There may be an optional sh(1) argument at the beginning of + # install_prog (especially on Windows NT). + if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case "$arg" in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case "$arg" in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test $# -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case "$destdir" in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case "$file" in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + done + ;; + esac + + # This variable tells wrapper scripts just to set variables rather + # than running their programs. + libtool_install_magic="$magic" + + staticlibs= + future_libdirs= + current_libdirs= + for file in $files; do + + # Do each installation. + case "$file" in + *.a | *.lib) + # Do the static libraries later. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir="`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/" + test "X$dir" = "X$file/" && dir= + dir="$dir$objdir" + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$realname $destdir/$realname" + $run eval "$install_prog $dir/$realname $destdir/$realname" || exit $? + + if test $# -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library" + ;; + + *.lo) + # Install (i.e. copy) a libtool object. + + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case "$destfile" in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.o | *.obj) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + link_against_libtool_libs= + relink_command= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Check the variables that should have been set. + if test -z "$link_against_libtool_libs"; then + $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $link_against_libtool_libs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case "$lib" in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/`$echo "X$lib" | $Xsed -e 's%^.*/%%g'`" + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec $SHELL $0 --finish$current_libdirs + exit 1 + fi + + exit 0 + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + echo "----------------------------------------------------------------------" + echo "Libraries have been installed in:" + for libdir in $libdirs; do + echo " $libdir" + done + echo + echo "If you ever happen to want to link against installed libraries" + echo "in a given directory, LIBDIR, you must either use libtool, and" + echo "specify the full pathname of the library, or use \`-LLIBDIR'" + echo "flag during linking and do at least one of the following:" + if test -n "$shlibpath_var"; then + echo " - add LIBDIR to the \`$shlibpath_var' environment variable" + echo " during execution" + fi + if test -n "$runpath_var"; then + echo " - add LIBDIR to the \`$runpath_var' environment variable" + echo " during linking" + fi + if test -n "$hardcode_libdir_flag_spec"; then + libdir=LIBDIR + eval flag=\"$hardcode_libdir_flag_spec\" + + echo " - use the \`$flag' linker flag" + fi + if test -n "$admincmds"; then + echo " - have your system administrator run these commands:$admincmds" + fi + if test -f /etc/ld.so.conf; then + echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" + fi + echo + echo "See any operating system documentation about shared libraries for" + echo "more information, such as the ld(1) and ld.so(8) manual pages." + echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case "$file" in + *.la) + # Check to see that this really is a libtool archive. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + continue + ;; + esac + + # Get the absolute pathname. + absdir=`cd "$dir" && pwd` + test -n "$absdir" && dir="$absdir" + + # Now add the directory to shlibpath_var. + if eval "test -z \"\$$shlibpath_var\""; then + eval "$shlibpath_var=\"\$dir\"" + else + eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" + fi + done + + # This variable tells wrapper scripts just to set shlibpath_var + # rather than running their programs. + libtool_execute_magic="$magic" + + # Check if any of the arguments is a wrapper script. + args= + for file + do + case "$file" in + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case "$file" in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + + # Restore saved enviroment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # Now actually exec the command. + eval "exec \$cmd$args" + + $echo "$modename: cannot exec \$cmd$args" + exit 1 + else + # Display what would be done. + eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\"" + $echo "export $shlibpath_var" + $echo "$cmd$args" + exit 0 + fi + ;; + + # libtool uninstall mode + uninstall) + modename="$modename: uninstall" + rm="$nonopt" + files= + + for arg + do + case "$arg" in + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + rmfiles="$file" + + case "$name" in + *.la) + # Possibly a libtool archive, so verify it. + if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $dir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $dir/$old_library" + + $show "$rm $rmfiles" + $run $rm $rmfiles + + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + IFS="${IFS= }"; save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + done + IFS="$save_ifs" + fi + + # FIXME: should reinstall the best remaining shared library. + fi + ;; + + *.lo) + if test "$build_old_libs" = yes; then + oldobj=`$echo "X$name" | $Xsed -e "$lo2o"` + rmfiles="$rmfiles $dir/$oldobj" + fi + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + + *) + $show "$rm $rmfiles" + $run $rm $rmfiles + ;; + esac + done + exit 0 + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 +fi # test -z "$show_help" + +# We need to display help for each of the modes. +case "$mode" in +"") $echo \ +"Usage: $modename [OPTION]... [MODE-ARG]... + +Provide generalized library-building support services. + + --config show all configuration variables + --debug enable verbose shell tracing +-n, --dry-run display commands without modifying any files + --features display basic configuration information and exit + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --version print version information + +MODE must be one of the following: + + compile compile a source file into a libtool object + execute automatically set library path, then run a program + finish complete the installation of libtool libraries + install install libraries or executables + link create a library or an executable + uninstall remove libraries from an installed directory + +MODE-ARGS vary depending on the MODE. Try \`$modename --help --mode=MODE' for +a more detailed description of MODE." + exit 0 + ;; + +compile) + $echo \ +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE + +Compile a source file into a libtool library object. + +This mode accepts the following additional options: + + -o OUTPUT-FILE set the output file name to OUTPUT-FILE + -static always build a \`.o' file suitable for static linking + +COMPILE-COMMAND is a command to be used in creating a \`standard' object file +from the given SOURCEFILE. + +The output file name is determined by removing the directory component from +SOURCEFILE, then substituting the C source code suffix \`.c' with the +library object suffix, \`.lo'." + ;; + +execute) + $echo \ +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]... + +Automatically set library path, then run a program. + +This mode accepts the following additional options: + + -dlopen FILE add the directory containing FILE to the library path + +This mode sets the library path environment variable according to \`-dlopen' +flags. + +If any of the ARGS are libtool executable wrappers, then they are translated +into their corresponding uninstalled binary, and any of their required library +directories are added to the library path. + +Then, COMMAND is executed, with ARGS as arguments." + ;; + +finish) + $echo \ +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]... + +Complete the installation of libtool libraries. + +Each LIBDIR is a directory that contains libtool libraries. + +The commands that this mode executes may require superuser privileges. Use +the \`--dry-run' option if you just want to see what would be executed." + ;; + +install) + $echo \ +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND... + +Install executables or libraries. + +INSTALL-COMMAND is the installation command. The first component should be +either the \`install' or \`cp' program. + +The rest of the components are interpreted as arguments to that command (only +BSD-compatible install options are recognized)." + ;; + +link) + $echo \ +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND... + +Link object files or libraries together to form another library, or to +create an executable program. + +LINK-COMMAND is a command using the C compiler that you would use to create +a program from several object files. + +The following components of LINK-COMMAND are treated specially: + + -all-static do not do any dynamic linking at all + -avoid-version do not add a version suffix if possible + -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime + -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols + -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) + -export-symbols SYMFILE + try to export only the symbols listed in SYMFILE + -export-symbols-regex REGEX + try to export only the symbols matching REGEX + -LLIBDIR search LIBDIR for required installed libraries + -lNAME OUTPUT-FILE requires the installed library libNAME + -module build a library that can dlopened + -no-undefined declare that a library does not refer to external symbols + -o OUTPUT-FILE create OUTPUT-FILE from the specified objects + -release RELEASE specify package release information + -rpath LIBDIR the created library will eventually be installed in LIBDIR + -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + +All other options (arguments beginning with \`-') are ignored. + +Every other argument is treated as a filename. Files ending in \`.la' are +treated as uninstalled libtool libraries, other files are standard or library +object files. + +If the OUTPUT-FILE ends in \`.la', then a libtool library is created, +only library objects (\`.lo' files) may be specified, and \`-rpath' is +required, except when creating a convenience library. + +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created +using \`ar' and \`ranlib', or on Windows using \`lib'. + +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file +is created, otherwise an executable program is created." + ;; + +uninstall) + $echo \ +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... + +Remove libraries from an installation directory. + +RM is the name of the program to use to delete files associated with each FILE +(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed +to RM. + +If FILE is a libtool library, all the files associated with it are deleted. +Otherwise, only FILE itself is deleted using RM." + ;; + +*) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; +esac + +echo +$echo "Try \`$modename --help' for more information about other modes." + +exit 0 + +# Local Variables: +# mode:shell-script +# sh-indentation:2 +# End: diff --git a/missing b/missing new file mode 100644 index 000000000..7789652e8 --- /dev/null +++ b/missing @@ -0,0 +1,190 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. +# Copyright (C) 1996, 1997 Free Software Foundation, Inc. +# Franc,ois Pinard <pinard@iro.umontreal.ca>, 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, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +case "$1" in + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + yacc create \`y.tab.[ch]', if possible, from existing .[ch]" + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing - GNU libit 0.0" + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + + aclocal) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acinclude.m4' or \`configure.in'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`configure.in'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`acconfig.h' or \`configure.in'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is missing on your system. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file` + fi + touch $file + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and you do not seem to have it handy on your + system. You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequirements for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100644 index 000000000..6b3b5fc5d --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman <friedman@prep.ai.mit.edu> +# Created: 1993-05-16 +# Public domain + +# $Id$ + +errstatus=0 + +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 + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/po/ChangeLog b/po/ChangeLog new file mode 100644 index 000000000..85d5ea497 --- /dev/null +++ b/po/ChangeLog @@ -0,0 +1,80 @@ +2001-04-19 + + * updated es.po (thanks to Ricardo Mones Lastra). + +2001-04-17 + + * updated de.po and zh_TW.Big5.po (thanks to Martin Schaaf and + Xiangxin Luo). + +2001-04-01 + + * added nl.po (thanks to Vincent van Adrighem). + +2001-03-29 + + * added ru.po (thanks to Sergey Vlasov and Aleksey Novodvorsky). + +2001-03-25 + + * added ko.po (thanks to ChiDeok Hwang). + +2001-03-20 + + * added it.po (thanks to Danilo Bodei). + +2001-03-12 + + * updated de.po and zh_TW.Big5.po. + +2001-02-03 + + * updated fr.po (thanks to Sébastien Rodriguez). + +2001-01-30 + + * added el.po (thanks to Michalis Kabrianis). + +2001-01-13 + + * added zh_TW.Big5.po (thanks to Franklin). + +2000-12-23 + + * updated zh_CN.GB2312.po. + +2000-12-17 + + * updated de.po, es.po, and pt_BR.po. + +2000-12-07 + + * added pt_BR.po (thanks to André Casteliano). + +2000-11-29 + + * added cs.po (thanks to Jan Mura). + +2000-11-18 + + * added zh_CN.GB2312.po (thanks to Xiangxin Luo). + +2000-10-21 + + * added de.po (thanks to Martin Schaaf). + +2000-10-11 + + * added es.po (thanks to Ricardo Mones Lastra). + +2000-08-28 + + * fr.po: added appropriate copyright notice. + +2000-08-27 + + * added fr.po (thanks to Paul Rolland for translation). + +2000-07-30 + + * added this file for `make dist'. diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 000000000..111b40fcb --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,248 @@ +# Makefile for program source directory in GNU NLS utilities package. +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu> +# +# This file file be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU Public License +# but which still want to provide support for the GNU gettext functionality. +# Please note that the actual code is *not* freely available. + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = $(prefix)/@DATADIRNAME@ +localedir = $(datadir)/locale +gnulocaledir = $(prefix)/share/locale +gettextsrcdir = $(prefix)/share/gettext/po +subdir = po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@ + +CC = @CC@ +GENCAT = @GENCAT@ +GMSGFMT = PATH=../src:$$PATH @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = PATH=../src:$$PATH @XGETTEXT@ +MSGMERGE = PATH=../src:$$PATH msgmerge + +DEFS = @DEFS@ +CFLAGS = @CFLAGS@ +CPPFLAGS = @CPPFLAGS@ + +INCLUDES = -I.. -I$(top_srcdir)/intl + +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) + +SOURCES = cat-id-tbl.c +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \ +stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES) + +POTFILES = \ + +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +INSTOBJEXT = @INSTOBJEXT@ + +.SUFFIXES: +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat + +.c.o: + $(COMPILE) $< + +.po.pox: + $(MAKE) $(PACKAGE).pot + $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox + +.po.mo: + $(MSGFMT) -o $@ $< + +.po.gmo: + file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \ + && rm -f $$file && $(GMSGFMT) -o $$file $< + +.po.cat: + sed -f ../intl/po2msg.sed < $< > $*.msg \ + && rm -f $@ && $(GENCAT) $@ $*.msg + + +all: all-@USE_NLS@ + +all-yes: cat-id-tbl.c $(CATALOGS) +all-no: + +$(srcdir)/$(PACKAGE).pot: $(POTFILES) + $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \ + --add-comments --keyword=_ --keyword=N_ \ + --files-from=$(srcdir)/POTFILES.in \ + && test ! -f $(PACKAGE).po \ + || ( rm -f $(srcdir)/$(PACKAGE).pot \ + && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot ) + +$(srcdir)/cat-id-tbl.c: stamp-cat-id; @: +$(srcdir)/stamp-cat-id: $(PACKAGE).pot + rm -f cat-id-tbl.tmp + sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \ + | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp + if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \ + rm cat-id-tbl.tmp; \ + else \ + echo cat-id-tbl.c changed; \ + rm -f $(srcdir)/cat-id-tbl.c; \ + mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \ + fi + cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ +install-data-no: all +install-data-yes: all + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(datadir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \ + fi + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + case "$$cat" in \ + *.gmo) destdir=$(gnulocaledir);; \ + *) destdir=$(localedir);; \ + esac; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + dir=$$destdir/$$lang/LC_MESSAGES; \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $$dir; \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \ + fi; \ + if test -r $$cat; then \ + $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + else \ + $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \ + fi; \ + if test -r $$cat.m; then \ + $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + if test -r $(srcdir)/$$cat.m ; then \ + $(INSTALL_DATA) $(srcdir)/$$cat.m \ + $$dir/$(PACKAGE)$(INSTOBJEXT).m; \ + echo "installing $(srcdir)/$$cat as" \ + "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \ + else \ + true; \ + fi; \ + fi; \ + done + if test "$(PACKAGE)" = "gettext"; then \ + if test -r "$(MKINSTALLDIRS)"; then \ + $(MKINSTALLDIRS) $(gettextsrcdir); \ + else \ + $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \ + fi; \ + $(INSTALL_DATA) $(srcdir)/Makefile.in.in \ + $(gettextsrcdir)/Makefile.in.in; \ + else \ + : ; \ + fi + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \ + rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \ + done + rm -f $(gettextsrcdir)/po-Makefile.in.in + +check: all + +cat-id-tbl.o: ../intl/libgettext.h + +dvi info tags TAGS ID: + +mostlyclean: + rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m + +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 $(GMOFILES) + +distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: update-po $(DISTFILES) + dists="$(DISTFILES)"; \ + for file in $$dists; do \ + ln $(srcdir)/$$file $(distdir) 2> /dev/null \ + || cp -p $(srcdir)/$$file $(distdir); \ + done + +update-po: Makefile + $(MAKE) $(PACKAGE).pot + PATH=`pwd`/../src:$$PATH; \ + cd $(srcdir); \ + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \ + mv $$lang.po $$lang.old.po; \ + echo "$$lang:"; \ + if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \ + rm -f $$lang.old.po; \ + else \ + echo "msgmerge for $$cat failed!"; \ + rm -f $$lang.po; \ + mv $$lang.old.po $$lang.po; \ + fi; \ + done + +POTFILES: POTFILES.in + ( if test 'x$(srcdir)' != 'x.'; then \ + posrcprefix='$(top_srcdir)/'; \ + else \ + posrcprefix="../"; \ + fi; \ + rm -f $@-t $@ \ + && (sed -e '/^#/d' -e '/^[ ]*$$/d' \ + -e "s@.*@ $$posrcprefix& \\\\@" < $(srcdir)/$@.in \ + | sed -e '$$s/\\$$//') > $@-t \ + && chmod a-w $@-t \ + && mv $@-t $@ ) + +Makefile: Makefile.in.in ../config.status POTFILES + cd .. \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +# 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: diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 000000000..e91d84875 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,60 @@ +src/about.c +src/account.c +src/addressbook.c +src/alertpanel.c +src/automaton.c +src/base64.c +src/codeconv.c +src/compose.c +src/filesel.c +src/filter.c +src/folder.c +src/foldersel.c +src/folderview.c +src/gtkutils.c +src/headerview.c +src/headerwindow.c +src/imageview.c +src/imap.c +src/import.c +src/inc.c +src/inputdialog.c +src/logwindow.c +src/main.c +src/mainwindow.c +src/manage_window.c +src/mbox.c +src/menu.c +src/messageview.c +src/mh.c +src/mimeview.c +src/news.c +src/nntp.c +src/passphrase.c +src/pop.c +src/prefs.c +src/prefs_account.c +src/prefs_common.c +src/prefs_filter.c +src/procheader.c +src/procmime.c +src/procmsg.c +src/progressdialog.c +src/recv.c +src/rfc822.c +src/rfc2015.c +src/select-keys.c +src/send.c +src/session.c +src/setup.c +src/smtp.c +src/socket.c +src/sourcewindow.c +src/statusbar.c +src/summary_search.c +src/summaryview.c +src/textview.c +src/unmime.c +src/utils.c +src/uuencode.c +src/xml.c diff --git a/po/cat-id-tbl.c b/po/cat-id-tbl.c new file mode 100644 index 000000000..d662e8394 --- /dev/null +++ b/po/cat-id-tbl.c @@ -0,0 +1,936 @@ +/* Automatically generated by po2tbl.sed from sylpheed.pot. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include "libgettext.h" + +const struct _msg_ent _msg_tbl[] = { + {"", 1}, + {"About", 2}, + {"\ +The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. \ +Portions of those are also copyrighted by Carl Harris, 1993 and 1995. \ +Copyright retained for the purpose of protecting free redistribution of \ +source.\n\ +\n", 3}, + {"\ +The MD5 support is copyright by RSA Data Security, Inc. See the header \ +comment of the md5.c module for license terms.\n\ +\n", 4}, + {"\ +Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is \ +copyright by takeshi@SoftAgency.co.jp.\n\ +\n", 5}, + {"\ +GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n\ +\n", 6}, + {"\ +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.\n\ +\n", 7}, + {"\ +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.\n\ +\n", 8}, + {"\ +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.", 9}, + {"OK", 10}, + {"Reading all config for each account...\n", 11}, + {"Found label: %s\n", 12}, + {"\ +Some composing windows are open.\n\ +Please close all the composing windows before editing the accounts.", 13}, + {"Opening account edit window...\n", 14}, + {"Creating account edit window...\n", 15}, + {"Edit accounts", 16}, + {"Name", 17}, + {"Protocol", 18}, + {"Server", 19}, + {"Add", 20}, + {"Edit", 21}, + {" Delete ", 22}, + {"Down", 23}, + {"Up", 24}, + {" Set as usually used account ", 25}, + {"Close", 26}, + {"Delete account", 27}, + {"Do you really want to delete this account?", 28}, + {"Yes", 29}, + {"+No", 30}, + {"/_File", 31}, + {"/_File/New _address", 32}, + {"/_File/New _group", 33}, + {"/_File/New _folder", 34}, + {"/_File/---", 35}, + {"/_File/_Edit", 36}, + {"/_File/_Delete", 37}, + {"/_File/_Close", 38}, + {"/_Help", 39}, + {"/_Help/_About", 40}, + {"/New _address", 41}, + {"/New _group", 42}, + {"/New _folder", 43}, + {"/---", 44}, + {"/_Edit", 45}, + {"/_Delete", 46}, + {"E-Mail address", 47}, + {"Remarks", 48}, + {"Address book", 49}, + {"Name:", 50}, + {"Delete", 51}, + {"Lookup", 52}, + {"To:", 53}, + {"Cc:", 54}, + {"Bcc:", 55}, + {"Common address", 56}, + {"Personal address", 57}, + {"Delete address(es)", 58}, + {"Really delete the address(es)?", 59}, + {"No", 60}, + {"New folder", 61}, + {"Input the name of new folder:", 62}, + {"NewFolder", 63}, + {"The name already exists.", 64}, + {"New group", 65}, + {"Input the name of new group:", 66}, + {"NewGroup", 67}, + {"Edit group", 68}, + {"Input the new name of group:", 69}, + {"Edit folder", 70}, + {"Input the new name of folder:", 71}, + {"Really delete `%s' ?", 72}, + {"Edit address", 73}, + {"Address", 74}, + {"Cancel", 75}, + {"Reading addressbook file...", 76}, + {"%s doesn't exist.\n", 77}, + {"done.\n", 78}, + {"Exporting addressbook to file...", 79}, + {"failed to write addressbook data.\n", 80}, + {"Notice", 81}, + {"Warning", 82}, + {"Error", 83}, + {"Creating alert panel dialog...\n", 84}, + {"can't allocate memory\n", 85}, + {"/_Add...", 86}, + {"/_Remove", 87}, + {"/_Property...", 88}, + {"/_File/_Attach file", 89}, + {"/_File/_Insert file", 90}, + {"/_File/Insert si_gnature", 91}, + {"/_Edit/_Undo", 92}, + {"/_Edit/_Redo", 93}, + {"/_Edit/---", 94}, + {"/_Edit/Cu_t", 95}, + {"/_Edit/_Copy", 96}, + {"/_Edit/_Paste", 97}, + {"/_Edit/Select _all", 98}, + {"/_Edit/Wrap long _lines", 99}, + {"/_Edit/Edit with e_xternal editor", 100}, + {"/_Message", 101}, + {"/_Message/_Send", 102}, + {"/_Message/Send _later", 103}, + {"/_Message/Save to _draft folder", 104}, + {"/_Message/---", 105}, + {"/_Message/_To", 106}, + {"/_Message/_Cc", 107}, + {"/_Message/_Bcc", 108}, + {"/_Message/_Reply to", 109}, + {"/_Message/_Followup to", 110}, + {"/_Message/_Attach", 111}, + {"/_Message/Si_gn", 112}, + {"/_Message/_Encrypt", 113}, + {"/_Tool", 114}, + {"/_Tool/Show _ruler", 115}, + {"/_Tool/_Address book", 116}, + {"Can't get text part\n", 117}, + {"%s: file not exist\n", 118}, + {"\ +\n\ +\n\ +Begin forwarded message:\n\ +\n", 119}, + {"File %s doesn't exist\n", 120}, + {"Can't get file size of %s\n", 121}, + {"File %s is empty\n", 122}, + {"Message: %s", 123}, + {" [Edited]", 124}, + {"%s - Compose message%s", 125}, + {"Compose message%s", 126}, + {"Recipient is not specified.", 127}, + {"can't get recipient list.", 128}, + {"\ +Account for sending mail is not specified.\n\ +Please select a mail account before sending.", 129}, + {"Error occurred while posting the message to %s .", 130}, + {"Queueing", 131}, + {"\ +Error occurred while sending the message.\n\ +Put this message into queue folder?", 132}, + {"Can't queue the message.", 133}, + {"Error occurred while sending the message.", 134}, + {"Can't save the message to outbox.", 135}, + {"can't change file mode\n", 136}, + {"Can't convert the codeset of the message.", 137}, + {"can't write headers\n", 138}, + {"saving sent message...\n", 139}, + {"can't save message\n", 140}, + {"can't open mark file\n", 141}, + {"queueing message...\n", 142}, + {"can't queue the message\n", 143}, + {"Can't open file %s\n", 144}, + {"generated Message-ID: %s\n", 145}, + {"MIME type", 146}, + {"Size", 147}, + {"Creating compose window...\n", 148}, + {"From:", 149}, + {"Send", 150}, + {"Send message", 151}, + {"Send later", 152}, + {"Put into queue folder and send later", 153}, + {"Draft", 154}, + {"Save to draft folder", 155}, + {"Insert", 156}, + {"Insert file", 157}, + {"Attach", 158}, + {"Attach file", 159}, + {"Signature", 160}, + {"Insert signature", 161}, + {"Editor", 162}, + {"Edit with external editor", 163}, + {"Linewrap", 164}, + {"Wrap long lines", 165}, + {"Invalid MIME type.", 166}, + {"File doesn't exist or is empty.", 167}, + {"Property", 168}, + {"Encoding", 169}, + {"Path", 170}, + {"File name", 171}, + {"External editor command line is invalid: `%s'\n", 172}, + {"\ +The external editor is still working.\n\ +Force terminating the process?\n\ +process group id: %d", 173}, + {"Terminated process group id: %d", 174}, + {"Temporary file: %s", 175}, + {"Compose: input from monitoring process\n", 176}, + {"Couldn't exec external editor\n", 177}, + {"Couldn't write to file\n", 178}, + {"Pipe read failed\n", 179}, + {"can't remove the old draft message\n", 180}, + {"Select file", 181}, + {"Discard message", 182}, + {"This message has been modified. discard it?", 183}, + {"Discard", 184}, + {"to Draft", 185}, + {"Select folder", 186}, + {"/Create _new folder...", 187}, + {"/_Rename folder...", 188}, + {"/_Delete folder", 189}, + {"/Remove _mailbox", 190}, + {"/Remove _IMAP4 server", 191}, + {"/_Subscribe to newsgroup...", 192}, + {"/_Remove newsgroup", 193}, + {"/Remove _news server", 194}, + {"Folder", 195}, + {"New", 196}, + {"Unread", 197}, + {"#", 198}, + {"Creating folder view...\n", 199}, + {"Setting folder info...\n", 200}, + {"Setting folder info...", 201}, + {"Scanning folder %s%c%s ...", 202}, + {"Scanning folder %s ...", 203}, + {"Updating all folders...", 204}, + {"Inbox", 205}, + {"Outbox", 206}, + {"Queue", 207}, + {"Trash", 208}, + {"Folder %s is selected\n", 209}, + {"`%c' can't be included in folder name.", 210}, + {"The folder `%s' already exists.", 211}, + {"Input new name for `%s':", 212}, + {"Rename folder", 213}, + {"\ +All folder(s) and message(s) under `%s' will be deleted.\n\ +Do you really want to delete?", 214}, + {"Delete folder", 215}, + {"can't remove folder `%s'\n", 216}, + {"\ +Really remove the mailbox `%s' ?\n\ +(The messages are NOT deleted from disk)", 217}, + {"Remove folder", 218}, + {"Really delete folder `%s'?", 219}, + {"Really delete IMAP4 server `%s'?", 220}, + {"Delete IMAP4 server", 221}, + {"Subscribe newsgroup", 222}, + {"Input subscribing newsgroup:", 223}, + {"The newsgroup `%s' already exists.", 224}, + {"Really delete newsgroup `%s'?", 225}, + {"Delete newsgroup", 226}, + {"Really delete news server `%s'?", 227}, + {"Delete news server", 228}, + {"Abcdef", 229}, + {"Newsgroups:", 230}, + {"Subject:", 231}, + {"Creating header view...\n", 232}, + {"(No From)", 233}, + {"(No Subject)", 234}, + {"Creating header window...\n", 235}, + {"All header", 236}, + {"Displaying the header of %s ...\n", 237}, + {"%s - All header", 238}, + {"Creating image view...\n", 239}, + {"Can't load the image.", 240}, + {"IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n", 241}, + {"creating IMAP4 connection to %s:%d ...\n", 242}, + {"can't select folder: %s\n", 243}, + {"message %d has been already cached.\n", 244}, + {"getting message %d...\n", 245}, + {"can't fetch message %d\n", 246}, + {"the src folder is identical to the dest.\n", 247}, + {"Moving message %s%c%d to %s ...\n", 248}, + {"can't set deleted flags: %d\n", 249}, + {"can't expunge\n", 250}, + {"can't set deleted flags: 1:%d\n", 251}, + {"can't get envelope\n", 252}, + {"error occurred while getting envelope.\n", 253}, + {"can't parse envelope: %s\n", 254}, + {"deleting message %d...\n", 255}, + {"\tDeleting all cached messages... ", 256}, + {"Can't connect to IMAP4 server: %s:%d\n", 257}, + {"IMAP4 login failed.\n", 258}, + {"can't copy %d to %s\n", 259}, + {"error while imap command: STORE %d:%d %s\n", 260}, + {"error while imap command: EXPUNGE\n", 261}, + {"Import", 262}, + {"Importing file:", 263}, + {"Destination dir:", 264}, + {" Select... ", 265}, + {"Select importing file", 266}, + {"Retrieving new messages", 267}, + {"Input password for %s on %s:", 268}, + {"Input password", 269}, + {"Authorization for %s on %s failed", 270}, + {"getting new messages of account %s...\n", 271}, + {"%s: Retrieving new messages", 272}, + {"Connecting to POP3 server: %s ...", 273}, + {"Can't connect to POP3 server: %s:%d\n", 274}, + {"Can't connect to POP3 server: %s:%d", 275}, + {"Authorizing", 276}, + {"Getting number of new messages", 277}, + {"Retrieving message (%d / %d)", 278}, + {"Deleting message", 279}, + {"Quitting", 280}, + {"a message won't be received\n", 281}, + {"Error occurred while processing mail.", 282}, + {"No disk space left.", 283}, + {"no messages in local mailbox.\n", 284}, + {"Getting new messages from %s into %s...\n", 285}, + {"Creating log window...\n", 286}, + {"Protocol log", 287}, + {"\ +File `%s' already exists.\n\ +Can't create folder.", 288}, + {"g_thread is not supported by glib.\n", 289}, + {"Usage: %s [OPTION]...\n", 290}, + {" --compose [address] open composition window", 291}, + {" --receive receive new messages", 292}, + {" --receive-all receive new messages of all accounts", 293}, + {" --debug debug mode", 294}, + {" --help display this help and exit", 295}, + {" --version output version information and exit", 296}, + {"Composing message exists. Really quit?", 297}, + {"another Sylpheed is already running.\n", 298}, + {"/_File/_Add mailbox...", 299}, + {"/_File/_Update folder tree", 300}, + {"/_File/_Folder", 301}, + {"/_File/_Folder/Create _new folder...", 302}, + {"/_File/_Folder/_Rename folder...", 303}, + {"/_File/_Folder/_Delete folder", 304}, + {"/_File/_Import mbox file...", 305}, + {"/_File/Empty _trash", 306}, + {"/_File/_Save as...", 307}, + {"/_File/_Print...", 308}, + {"/_File/E_xit", 309}, + {"/_Edit/_Search", 310}, + {"/_View", 311}, + {"/_View/_Folder tree", 312}, + {"/_View/_Message view", 313}, + {"/_View/_Toolbar", 314}, + {"/_View/_Toolbar/Icon _and text", 315}, + {"/_View/_Toolbar/_Icon", 316}, + {"/_View/_Toolbar/_Text", 317}, + {"/_View/_Toolbar/_Non-display", 318}, + {"/_View/_Status bar", 319}, + {"/_View/---", 320}, + {"/_View/Separate f_older tree", 321}, + {"/_View/Separate m_essage view", 322}, + {"/_View/_Code set", 323}, + {"/_View/_Code set/_Auto detect", 324}, + {"/_View/_Code set/---", 325}, + {"/_View/_Code set/7bit ascii (US-ASC_II)", 326}, + {"/_View/_Code set/Unicode (_UTF-8)", 327}, + {"/_View/_Code set/Western European (ISO-8859-_1)", 328}, + {"/_View/_Code set/Central European (ISO-8859-_2)", 329}, + {"/_View/_Code set/_Baltic (ISO-8859-13)", 330}, + {"/_View/_Code set/Baltic (ISO-8859-_4)", 331}, + {"/_View/_Code set/Greek (ISO-8859-_7)", 332}, + {"/_View/_Code set/Turkish (ISO-8859-_9)", 333}, + {"/_View/_Code set/Cyrillic (ISO-8859-_5)", 334}, + {"/_View/_Code set/Cyrillic (KOI8-_R)", 335}, + {"/_View/_Code set/Cyrillic (Windows-1251)", 336}, + {"/_View/_Code set/Japanese (ISO-2022-_JP)", 337}, + {"/_View/_Code set/Japanese (ISO-2022-JP-2)", 338}, + {"/_View/_Code set/Japanese (_EUC-JP)", 339}, + {"/_View/_Code set/Japanese (_Shift__JIS)", 340}, + {"/_View/_Code set/Simplified Chinese (_GB2312)", 341}, + {"/_View/_Code set/Traditional Chinese (_Big5)", 342}, + {"/_View/_Code set/Traditional Chinese (EUC-_TW)", 343}, + {"/_View/_Code set/Chinese (ISO-2022-_CN)", 344}, + {"/_View/_Code set/Korean (EUC-_KR)", 345}, + {"/_View/_Code set/Korean (ISO-2022-KR)", 346}, + {"/_Message/Rece_ive new mail", 347}, + {"/_Message/Receive from _all accounts", 348}, + {"/_Message/Send queued messa_ges", 349}, + {"/_Message/Compose _new message", 350}, + {"/_Message/_Reply", 351}, + {"/_Message/Reply to a_ll", 352}, + {"/_Message/_Forward", 353}, + {"/_Message/Forward as an a_ttachment", 354}, + {"/_Message/M_ove...", 355}, + {"/_Message/_Copy...", 356}, + {"/_Message/_Delete", 357}, + {"/_Message/_Mark", 358}, + {"/_Message/_Mark/_Mark", 359}, + {"/_Message/_Mark/_Unmark", 360}, + {"/_Message/_Mark/---", 361}, + {"/_Message/_Mark/Mark as unr_ead", 362}, + {"/_Message/_Mark/Mark it as _being read", 363}, + {"/_Message/Open in new _window", 364}, + {"/_Message/View _source", 365}, + {"/_Message/Show all _header", 366}, + {"/_Message/Re_edit", 367}, + {"/_Summary", 368}, + {"/_Summary/_Delete duplicated messages", 369}, + {"/_Summary/_Filter messages", 370}, + {"/_Summary/E_xecute", 371}, + {"/_Summary/_Update", 372}, + {"/_Summary/---", 373}, + {"/_Summary/_Prev message", 374}, + {"/_Summary/_Next message", 375}, + {"/_Summary/N_ext unread message", 376}, + {"/_Summary/_Go to other folder", 377}, + {"/_Summary/_Sort", 378}, + {"/_Summary/_Sort/Sort by _number", 379}, + {"/_Summary/_Sort/Sort by s_ize", 380}, + {"/_Summary/_Sort/Sort by _date", 381}, + {"/_Summary/_Sort/Sort by _from", 382}, + {"/_Summary/_Sort/Sort by _subject", 383}, + {"/_Summary/_Sort/---", 384}, + {"/_Summary/_Sort/_Attract by subject", 385}, + {"/_Summary/_Thread view", 386}, + {"/_Summary/Unt_hread view", 387}, + {"/_Summary/Set display _item...", 388}, + {"/_Tool/_Log window", 389}, + {"/_Configuration", 390}, + {"/_Configuration/_Common preferences...", 391}, + {"/_Configuration/_Filter setting...", 392}, + {"/_Configuration/_Preferences per account...", 393}, + {"/_Configuration/---", 394}, + {"/_Configuration/Create _new account...", 395}, + {"/_Configuration/_Edit accounts...", 396}, + {"/_Configuration/C_hange current account", 397}, + {"/_Help/_Manual", 398}, + {"/_Help/_Manual/_English", 399}, + {"/_Help/_Manual/_Japanese", 400}, + {"/_Help/---", 401}, + {"Creating main window...\n", 402}, + {"MainWindow: color allocation %d failed\n", 403}, + {"Untitled", 404}, + {"none", 405}, + {"Current account: %s", 406}, + {"window position: x = %d, y = %d\n", 407}, + {"Empty trash", 408}, + {"Empty all messages in trash?", 409}, + {"Add mailbox", 410}, + {"\ +Input the location of mailbox.\n\ +If the existing mailbox is specified, it will be\n\ +scanned automatically.", 411}, + {"The mailbox `%s' already exists.", 412}, + {"Mailbox", 413}, + {"\ +Creation of the mailbox failed.\n\ +Maybe some files already exist, or you don't have the permission to write \ +there.", 414}, + {"Setting widgets...", 415}, + {"Get", 416}, + {"Incorporate new mail", 417}, + {"Get all", 418}, + {"Incorporate new mail of all accounts", 419}, + {"Send queued message(s)", 420}, + {"Compose", 421}, + {"Compose new message", 422}, + {"Reply", 423}, + {"Reply to the message", 424}, + {"Reply all", 425}, + {"Reply to all", 426}, + {"Forward", 427}, + {"Forward the message", 428}, + {"Delete the message", 429}, + {"Execute", 430}, + {"Execute marked process", 431}, + {"Next", 432}, + {"Next unread message", 433}, + {"Prefs", 434}, + {"Common preference", 435}, + {"Account", 436}, + {"Account setting", 437}, + {"Exit", 438}, + {"Exit this program?", 439}, + {"Sending queued message failed.", 440}, + {"forced charset: %s\n", 441}, + {"Getting messages from %s into %s...\n", 442}, + {"can't read mbox file.\n", 443}, + {"invalid mbox format: %s\n", 444}, + {"malformed mbox: %s\n", 445}, + {"can't open temporary file\n", 446}, + {"\ +unescaped From found:\n\ +%s", 447}, + {"can't write to temporary file\n", 448}, + {"%d messages found.\n", 449}, + {"can't create lock file %s\n", 450}, + {"use 'flock' instead of 'file' if possible.\n", 451}, + {"can't create %s\n", 452}, + {"mailbox is owned by another process, waiting...\n", 453}, + {"can't lock %s\n", 454}, + {"invalid lock type\n", 455}, + {"can't unlock %s\n", 456}, + {"can't truncate mailbox to zero.\n", 457}, + {"Exporting messages from %s into %s...\n", 458}, + {"Creating message view...\n", 459}, + {"can't copy message %s to %s\n", 460}, + {"Can't open mark file.\n", 461}, + {"%s already exists.", 462}, + {"Copying message %s%c%d to %s ...\n", 463}, + {"Last number in dir %s = %d\n", 464}, + {"\tSearching uncached messages... ", 465}, + {"%d uncached message(s) found.\n", 466}, + {"\tSorting uncached messages in numerical order... ", 467}, + {"/_Open", 468}, + {"/_Display as text", 469}, + {"/_Save as...", 470}, + {"/_Check signature", 471}, + {"MIME Type", 472}, + {"Creating MIME view...\n", 473}, + {"Select \"Check signature\" to check", 474}, + {"Can't get the part of multipart message.", 475}, + {"Can't save the part of multipart message.", 476}, + {"Save as", 477}, + {"Overwrite", 478}, + {"Overwrite existing file?", 479}, + {"MIME viewer command line is invalid: `%s'", 480}, + {"creating NNTP connection to %s:%d ...\n", 481}, + {"NNTP connection to %s:%d has been disconnected. Reconnecting...\n", 482}, + {"article %d has been already cached.\n", 483}, + {"getting article %d...\n", 484}, + {"can't read article %d\n", 485}, + {"can't post article.\n", 486}, + {"can't retrieve article %d\n", 487}, + {"can't set group: %s\n", 488}, + {"invalid article range: %d - %d\n", 489}, + {"no new articles.\n", 490}, + {"getting xover %d - %d in %s...\n", 491}, + {"can't get xover\n", 492}, + {"error occurred while getting xover.\n", 493}, + {"invalid xover line: %s\n", 494}, + {"deleting article %d...\n", 495}, + {"\tDeleting all cached articles... ", 496}, + {"Can't connect to NNTP server: %s:%d\n", 497}, + {"protocol error: %s\n", 498}, + {"protocol error\n", 499}, + {"Error occurred while posting\n", 500}, + {"Passphrase", 501}, + {"[no user id]", 502}, + {"\ +%sPlease enter the passphrase for:\n\ +\n\ + %.*s \n\ +(%.*s)\n", 503}, + {"\ +Bad passphrase! Try again...\n\ +\n", 504}, + {"error occurred on authorization\n", 505}, + {"Required APOP timestamp not found in greeting\n", 506}, + {"Timestamp syntax error in greeting\n", 507}, + {"POP3 protocol error\n", 508}, + {"Reading configuration...\n", 509}, + {"Found %s\n", 510}, + {"Finished reading configuration.\n", 511}, + {"failed to write configuration to file\n", 512}, + {"Configuration is saved.\n", 513}, + {"Apply", 514}, + {"Opening account preferences window...\n", 515}, + {"Account%d", 516}, + {"Preferences for new account", 517}, + {"Preferences for each account", 518}, + {"Creating account preferences window...\n", 519}, + {"Basic", 520}, + {"Receive", 521}, + {"Advanced", 522}, + {"Name of this account", 523}, + {"Usually used", 524}, + {"Personal information", 525}, + {"Full name", 526}, + {"Mail address", 527}, + {"Organization", 528}, + {"Server information", 529}, + {"POP3 (normal)", 530}, + {"POP3 (APOP auth)", 531}, + {"IMAP4", 532}, + {"News (NNTP)", 533}, + {"None (local)", 534}, + {"News server", 535}, + {"Server for receiving", 536}, + {"SMTP server (send)", 537}, + {"User ID", 538}, + {"Password", 539}, + {"POP3", 540}, + {"Remove messages on server when received", 541}, + {"Receive all messages on server", 542}, + {"Receive at getting from all accounts", 543}, + {"Filter messages on receiving", 544}, + {"Header", 545}, + {"Add Date header field", 546}, + {"Generate Message-ID", 547}, + {"Add user-defined header", 548}, + {" Edit... ", 549}, + {"Automatically set following addresses", 550}, + {"Cc", 551}, + {"Bcc", 552}, + {"Reply-To", 553}, + {"Authentication", 554}, + {"SMTP Authentication (SMTP AUTH)", 555}, + {"Authenticate with POP3 before sending", 556}, + {"Signature file", 557}, + {"Specify SMTP port", 558}, + {"Specify POP3 port", 559}, + {"Specify domain name", 560}, + {"Mail address is not entered.", 561}, + {"SMTP server is not entered.", 562}, + {"User ID is not entered.", 563}, + {"POP3 server is not entered.", 564}, + {"IMAP4 server is not entered.", 565}, + {"NNTP server is not entered.", 566}, + {"Creating common preferences window...\n", 567}, + {"Common Preferences", 568}, + {"Display", 569}, + {"Message", 570}, + {"Privacy", 571}, + {"Interface", 572}, + {"Other", 573}, + {"External program", 574}, + {"Use external program for incorporation", 575}, + {"Program path", 576}, + {"Local spool", 577}, + {"Incorporate from spool", 578}, + {"Filter on incorporation", 579}, + {"Spool directory", 580}, + {"Auto-check new mail", 581}, + {"each", 582}, + {"minute(s)", 583}, + {"Check new mail on startup", 584}, + {"News", 585}, + {"\ +Maximum article number to download\n\ +(unlimited if 0 is specified)", 586}, + {"Use external program for sending", 587}, + {"Save sent message to outbox", 588}, + {"Queue message that failed to send", 589}, + {"Outgoing codeset", 590}, + {"Automatic", 591}, + {"7bit ascii (US-ASCII)", 592}, + {"Unicode (UTF-8)", 593}, + {"Western European (ISO-8859-1)", 594}, + {"Central European (ISO-8859-2)", 595}, + {"Baltic (ISO-8859-13)", 596}, + {"Baltic (ISO-8859-4)", 597}, + {"Greek (ISO-8859-7)", 598}, + {"Turkish (ISO-8859-9)", 599}, + {"Cyrillic (ISO-8859-5)", 600}, + {"Cyrillic (KOI8-R)", 601}, + {"Cyrillic (Windows-1251)", 602}, + {"Cyrillic (KOI8-U)", 603}, + {"Japanese (ISO-2022-JP)", 604}, + {"Japanese (EUC-JP)", 605}, + {"Japanese (Shift_JIS)", 606}, + {"Simplified Chinese (GB2312)", 607}, + {"Traditional Chinese (Big5)", 608}, + {"Traditional Chinese (EUC-TW)", 609}, + {"Chinese (ISO-2022-CN)", 610}, + {"Korean (EUC-KR)", 611}, + {"Quotation", 612}, + {"Quote message when replying", 613}, + {"Quotation mark", 614}, + {"Quotation format:", 615}, + {" Description of symbols ", 616}, + {"Insert signature automatically", 617}, + {"Signature separator", 618}, + {"Wrap messages at", 619}, + {"characters", 620}, + {"Wrap quotation", 621}, + {"Wrap before sending", 622}, + {"Font", 623}, + {"Text", 624}, + {"Translate header name (such as `From:', `Subject:')", 625}, + {"Display unread number next to folder name", 626}, + {"Summary View", 627}, + {"Display recipient on `From' column if sender is yourself", 628}, + {"Enable horizontal scroll bar", 629}, + {" Set display item of summary... ", 630}, + {"Enable coloration of message", 631}, + {"Display 2-byte alphabet and numeric with 1-byte character", 632}, + {"Display header pane above message view", 633}, + {"Display short headers on message view", 634}, + {"Line space", 635}, + {"pixel(s)", 636}, + {"Leave space on head", 637}, + {"Scroll", 638}, + {"Half page", 639}, + {"Smooth scroll", 640}, + {"Step", 641}, + {"Encrypt message by default", 642}, + {"Sign message by default", 643}, + {"Automatically check signatures", 644}, + {"Grab input while entering a passphrase", 645}, + {"Default Sign Key", 646}, + {"\ +Emulate the behavior of mouse operation of\n\ +Emacs-based mailer", 647}, + {"Open first unread message when entering a folder", 648}, + {"Go to inbox after receiving new mail", 649}, + {"Execute immediately when moving or deleting messages", 650}, + {"\ +(Messages will be just marked till execution\n\ + if this is turned off)", 651}, + {"On exit", 652}, + {"Confirm on exit", 653}, + {"Empty trash on exit", 654}, + {"Ask before emptying", 655}, + {"External Web browser (%s will be replaced with URI)", 656}, + {"Command", 657}, + {"Printing (%s will be replaced with file name)", 658}, + {"External editor (%s will be replaced with file name)", 659}, + {"Set message colors", 660}, + {"Colors", 661}, + {"Quoted Text - First Level", 662}, + {"Quoted Text - Second Level", 663}, + {"Quoted Text - Third Level", 664}, + {"URI link", 665}, + {"Recycle quote colors", 666}, + {"Pick color for quotation level 1", 667}, + {"Pick color for quotation level 2", 668}, + {"Pick color for quotation level 3", 669}, + {"Pick color for URI", 670}, + {"Description of symbols", 671}, + {"\ +Date\n\ +From\n\ +Full Name of Sender\n\ +First Name of Sender\n\ +Initial of Sender\n\ +Subject\n\ +To\n\ +Message-ID\n\ +%", 672}, + {"Set display item", 673}, + {"Mark", 674}, + {"MIME", 675}, + {"Number", 676}, + {"Date", 677}, + {"From", 678}, + {"Subject", 679}, + {"Font selection", 680}, + {"Registered rules", 681}, + {"Creating filter setting window...\n", 682}, + {"Filter setting", 683}, + {"Operator", 684}, + {"(none)", 685}, + {"Keyword", 686}, + {"Predicate", 687}, + {"contains", 688}, + {"not contain", 689}, + {"Destination", 690}, + {"Use regex", 691}, + {"Don't receive", 692}, + {"Register", 693}, + {" Substitute ", 694}, + {"Reading filter configuration...\n", 695}, + {"Writing filter configuration...\n", 696}, + {"(New)", 697}, + {"Destination is not set.", 698}, + {"Header name is not set.", 699}, + {"Delete rule", 700}, + {"Do you really want to delete this rule?", 701}, + {"SunMonTueWedThuFriSat", 702}, + {"Code conversion failed.\n", 703}, + {"Cache data is corrupted\n", 704}, + {"\tNo cache file\n", 705}, + {"\tReading summary cache...", 706}, + {"Cache version is different. Discarding it.\n", 707}, + {"\tMarking the messages...", 708}, + {"\t%d new message(s)\n", 709}, + {"Mark file not found.\n", 710}, + {"Mark version is different (%d != %d). Discarding it.\n", 711}, + {"Can't open mark file with append mode.\n", 712}, + {"Can't open mark file with write mode.\n", 713}, + {"Sending queued message failed.\n", 714}, + {"Print command line is invalid: `%s'\n", 715}, + {"Creating progress dialog...\n", 716}, + {"error occurred while retrieving data.\n", 717}, + {"Can't write to file.\n", 718}, + {"Oops: Signature not verified", 719}, + {"No signature found", 720}, + {"Good signature", 721}, + {"BAD signature", 722}, + {"No public key to verify the signature", 723}, + {"Error verifying the signature", 724}, + {"Different results for signatures", 725}, + {"Error: Unknown status", 726}, + {"Good signature from \"%s\"", 727}, + {"BAD signature from \"%s\"", 728}, + {"Cannot find user ID for this key.", 729}, + {" aka \"%s\"\n", 730}, + {"Signature made %s\n", 731}, + {"Key fingerprint: %s\n", 732}, + {"Select Keys", 733}, + {"Select key for: ", 734}, + {"Key ID", 735}, + {"Val", 736}, + {"Select", 737}, + {"Queued message header is broken.\n", 738}, + {"Account not found. Using current account...\n", 739}, + {"Account not found.\n", 740}, + {"Connecting to SMTP server: %s ...\n", 741}, + {"Can't connect to SMTP server: %s:%d\n", 742}, + {"Error occurred while sending HELO\n", 743}, + {"Mailbox setting", 744}, + {"\ +First, you have to set the location of mailbox.\n\ +You can use existing mailbox in MH format\n\ +if you have the one.\n\ +If you're not sure, just select OK.", 745}, + {"Creating source window...\n", 746}, + {"Source of the message", 747}, + {"Displaying the source of %s ...\n", 748}, + {"%s - Source", 749}, + {"Search", 750}, + {"Case sensitive", 751}, + {"Backward search", 752}, + {"Select all matched", 753}, + {"Clear", 754}, + {"Search failed", 755}, + {"Search string not found.", 756}, + {"Beginning of list reached; continue from end?", 757}, + {"End of list reached; continue from beginning?", 758}, + {"Search finished", 759}, + {"/M_ove...", 760}, + {"/_Copy...", 761}, + {"/E_xecute", 762}, + {"/_Mark", 763}, + {"/_Mark/_Mark", 764}, + {"/_Mark/_Unmark", 765}, + {"/_Mark/---", 766}, + {"/_Mark/Mark as unr_ead", 767}, + {"/_Mark/Make it as _being read", 768}, + {"/_Reply", 769}, + {"/Reply to a_ll", 770}, + {"/_Forward", 771}, + {"/Forward as an a_ttachment", 772}, + {"/Open in new _window", 773}, + {"/View so_urce", 774}, + {"/Show all _header", 775}, + {"/Re_edit", 776}, + {"/_Print...", 777}, + {"/Select _all", 778}, + {"M", 779}, + {"U", 780}, + {"Creating summary view...\n", 781}, + {"No.", 782}, + {"Process mark", 783}, + {"Some marks are left. Process it?", 784}, + {"\ +empty folder\n\ +\n", 785}, + {"Scanning folder (%s)...", 786}, + {"done.", 787}, + {"No unread message", 788}, + {"No unread message found. Go to next folder?", 789}, + {"Attracting messages by subject...", 790}, + {"%d deleted", 791}, + {"%s%d moved", 792}, + {", ", 793}, + {"%s%d copied", 794}, + {" item(s) selected", 795}, + {"%d new, %d unread, %d total (%s)", 796}, + {"%d new, %d unread, %d total", 797}, + {"Sorting summary...", 798}, + {"\tSetting summary from message data...", 799}, + {"Setting summary from message data...", 800}, + {"Writing summary cache (%s)...", 801}, + {"(No Date)", 802}, + {"Message %d is marked\n", 803}, + {"Message %d is marked as being read\n", 804}, + {"Message %d is marked as unread\n", 805}, + {"Message %s/%d is set to delete\n", 806}, + {"Current folder is Trash.", 807}, + {"Deleting duplicated messages...", 808}, + {"Message %s/%d is unmarked\n", 809}, + {"Message %d is set to move to %s\n", 810}, + {"Destination is same as current folder.", 811}, + {"Message %d is set to copy to %s\n", 812}, + {"Destination to copy is same as current folder.", 813}, + {"Selecting all messages...", 814}, + {"Print", 815}, + {"\ +Enter the print command line:\n\ +(`%s' will be replaced with file name)", 816}, + {"\ +Print command line is invalid:\n\ +`%s'", 817}, + {"Building threads...", 818}, + {"Unthreading...", 819}, + {"Unthreading for execution...", 820}, + {"filtering...", 821}, + {"Filtering...", 822}, + {"Go to %s\n", 823}, + {"Creating text view...\n", 824}, + {"To save this part, pop up the context menu with\n", 825}, + {"\ +right click and select `Save as...', or press `y' key.\n\ +\n", 826}, + {"To display this part as a text message, select\n", 827}, + {"\ +`Display as text', or press `t' key.\n\ +\n", 828}, + {"To open this part with external program, select `Open',\n", 829}, + {"or double-click, or click the center button, or press `l' key.", 830}, + {"This signature has not been checked yet.\n", 831}, + {"To check it, pop up the context menu with\n", 832}, + {"right click and select `Check signature'.\n", 833}, + {"writing to %s failed.\n", 834}, + {"File copy from %s to %s failed.\n", 835}, + {"Open URI command line is invalid: `%s'", 836}, +}; + +int _msg_tbl_length = 836; diff --git a/po/cs.gmo b/po/cs.gmo new file mode 100644 index 0000000000000000000000000000000000000000..9ba984b363677c57ea0030bd584f48ba2cbfa72a GIT binary patch literal 47210 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 Cc_IV= literal 0 HcmV?d00001 diff --git a/po/cs.po b/po/cs.po new file mode 100644 index 000000000..acf0f4c1a --- /dev/null +++ b/po/cs.po @@ -0,0 +1,3813 @@ +# Czech translation of Sylpheed +# Copyright (C) 2000 Free Software Foundation, Inc. +# Jan Mura <jan_mura@altavista.com>, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2000-11-01 15:39+0100\n" +"Last-Translator: Vladimír Marek <vlmarek@volny.cz>\n" +"Language-Team: Jan Mura <jan_mura@altavista.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-2\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "O aplikaci" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"Èásti kódu z programu fetchmail jsou chránìny Copyrightem 1997 Erica S. " +"Raymonda. Jeho dal¹í èásti jsou chránìny Copyrightem Carla Harrisa, 1993 a " +"1995. Ponechání si práv za úèelem ochrany volné\n" +" distribuce kódu.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"Podpora MD5 je chránìna Copyrightem RSA Data Security, Inc. Pro podrobnosti " +"viz komentáø ve hlavièce modulu md5.c.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc je chránìno Copyrightem Yasuhiro Tonooka <tonooka@msi.co.jp>, a libkcc " +"je chránìno Copyrightem takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Tento program je volnì ¹iøitelný, mù¾ete jej redistribuovat a/nebo mìnit tak " +"jak to popisuje GNU General Public License publikovaný volný softwarový " +"základ a to ve verzi 2, nebo (podle va¹eho uvá¾ení) v jakékoliv pozdìj¹í " +"verzi.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Tento program je ¹íøen v dobré víøe v jeho u¾iteènost, ale BEZ JAKÉKOLIV " +"ZÁRUKY. Consultez la GNU General Public License pour plus de details.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Vous devez avoir reçu une copie de la GNU General Public License avec ce " +"programme. Si ce n'est pas le cas, écrivez à la Free Software Foundation, " +"Inc.,, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "OK" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Naèítám nastavení pro v¹echny konta...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Nalezen popisek: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Otevírám okno pro úpravu konta...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Vytváøím okno pro úpravu konta...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Úprava konta" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Jméno" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protokol" + +#: src/account.c:382 +msgid "Server" +msgstr "Server" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Pøidat" + +#: src/account.c:407 +msgid "Edit" +msgstr "Úpravy" + +#: src/account.c:413 +msgid " Delete " +msgstr "Smazat" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Dolù" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Nahoru" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Nastavit jako bì¾nì u¾ívané konto " + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Zavøít" + +#: src/account.c:498 +msgid "Delete account" +msgstr "Smazat konto" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Opravdu chcete toto konto smazat?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Ano" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+Ne" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_Soubor" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_Soubor/Nová _adresa" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_Soubor/Nová _skupina" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_Soubor/Nový a_dresáø" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_Soubor/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_Soubor/_Upravit" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_Soubor/_Smazat" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_Soubor/_Zavøít" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/_Nápovìda" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/_Nápovìda/_O aplikaci" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Nová _adresa" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Nová _skupina" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Nová s_lo¾ka" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/_Úpravy" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/_Smazat" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "Po¹tovní adresa" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Poznámky" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Adresáø" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Jméno:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Smazat" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Hledat" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "Komu:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Kopie:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Slepá kopie:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Spoleèná adresa:" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Osobní adresa:" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Smazat adresu(y)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Opravdu chcete smazat tuto adresu?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "Ne" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Nová slo¾ka" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Zadejte jméno slo¾ky:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "Nová slo¾ka" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Jméno u¾ existuje." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Nová skupina" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Zadejte jméno skupiny:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "Nová Skupina" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Upravit skupinu" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Zadejte jméno skupiny:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Upravit slo¾ku" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Zadejte jméno slo¾ky:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Opravdu smazat '%s' ?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Upravit adresu" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Adresa" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Zru¹it" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Naèítám adresáø..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s neexistuje.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "hotovo.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Exportuji adresáø do souboru..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "Neúspì¹ný zápis dat adresáøe.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Poznámka" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Varování" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Chyba" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Vytváøím dialog pro varování...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "nemohu alokovat pamì»\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Pøidat..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Odstranit" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Vlastosti..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_Soubor/_Pøipojit soubor" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_Soubor/_Vlo¾it soubor" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_Soubor/Vlo¾it p_odpis" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/_Úpravy/_Zpìt" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/_Úpravy/Z_nova" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/_Úpravy/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/_Úpravy/_Vyjmout" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/_Úpravy/_Kopírovat" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/_Úpravy/V_lo¾it" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/_Úpravy/V_ybrat v¹e" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/_Úpravy/Upravit pomocí e_xterního editoru" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/_Zpráva" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/_Zpráva/_Poslat" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/_Zpráva/Poslat p_ozdìji" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/_Zpráva/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/_Zpráva/_Slepá kopie" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/_Zpráva/_Odpovìdìt na" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/_Zpráva/_Pøipojit" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/_Nástroje" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/_Nástroje/_Adresáø" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: soubor neexistuje\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Zaèátek pøeposílané zprávy:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Soubor %s neexistuje\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Nemohu zjistit délku souboru %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Soubor %s je prázdný\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Zpráva: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr "" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - psaní zprávy%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Psaní zprávy%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Není uveden pøíjemce." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Zaøazuji" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Pøi posílání zprávy nastala chyba.\n" +"Chcete zprávu zaøadit do výstupní fronty?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Zprávu nelze zaøadit." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Pøi posílání zprávy nastala chyba." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Zprávu nelze ulo¾it do výstupní schránky" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "nelze zmìnit mód souboru\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "Nelze zmìnit znakovou sadu nastavené zprávy" + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "nelze zapsat hlavièky\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "ukládám odeslanou zprávu...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "zprávu nelze ulo¾it\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "nelze otevøít oznaèený soubor\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "zaøazuji zprávu...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "Zprávu nelze zaøadit\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Nelze otevøít soubor %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "vytváøím èíslo zprávy: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME typ" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Délka" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Vytváøím okno pro psaní...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "Od:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Odeslat" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "Poslat zprávu" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "Poslat pozdìji" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "Zaøadit do výstupní fronty a odeslat pozdìji" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Koncept" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "Vlo¾it" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Vlo¾it soubor" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "Pøíloha" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Pøipojit soubor" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Podpis" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Vlo¾it podpis" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editor" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Úprava externím editorem" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Neplatný MIME typ." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Soubor neexistuje nebo je prázdný." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Vlastnosti" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Kódování" + +#: src/compose.c:3065 +msgid "Path" +msgstr "Cesta k souboru" + +#: src/compose.c:3066 +msgid "File name" +msgstr "Jméno souboru" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "©patný pøíkaz v externím editoru: '%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"Externí editor stále pracuje.\n" +"Mám pøeru¹it proces?\n" +"èíslo procesu: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "Pøeru¹en proces èíslo: %d" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Doèasný soubor: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Psaní: vstup z externího procesu\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "Nelze spustit externí editor\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Nelze zapisovat do souboru\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Nelze èíst\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Vybrat soubor" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Zru¹it zprávu" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Obsah zprávy se zmìnil. Opravdu zru¹it?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Zru¹it" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "udìlat koncept" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Vybrat slo¾ku" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "" + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "" + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/_Smazat slo¾ku" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "" + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/Smazat d_iskusní skupinu" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/_Odebrat server novinek" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Slo¾ka" + +#: src/folderview.c:234 +msgid "New" +msgstr "Nová" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Nepøeètené" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Vytváøím náhled pro slo¾ku...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Nastavuji informace o slo¾ce...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Nastavuji informace o slo¾ce..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Prohledávám slo¾ku %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Prohledávám slo¾ku %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "" + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "Doruèená po¹ta" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Odeslaná po¹ta" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "Fronta" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Odpadkový ko¹" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Slo¾ka %s je vybrána\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "%c nemù¾e být obsa¾eno ve jménì slo¾ky." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "Slo¾ka '%s' u¾ existuje." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Zadejte nové jméno pro '%s' :" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Pøejmenovat slo¾ku" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"V¹echny slo¾ky a zprávy v '%s' budou vymazány.\n" +"Chcete je opravdu smazat ?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Smazat slo¾ku " + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "Nemohu odstranit slo¾ku '%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "Podepsat diskusní skupinu" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "Diskusní skupina '%s' u¾ existuje." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Opravdu chcete smazat diskusní skupinu '%s' ?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Smazat diskusní skupinu" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Opravdu chcete smazat server zpráv '%s' ?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Smazat server zpráv" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Diskusní skupiny:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Pøedmìt:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Vytváøím náhled na hlavièku...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(není znám odesílatel)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(®ádný pøedmìt)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Vytváøím hlavièku okna...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Celá hlavièka" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "Zobrazuji hlavièku %s ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Celá hlavièka" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Vytváøím náhled na obrázek...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Nemohu nahrát obrázek." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "Spojení IMAP4 s %s:%d bylo rozpojeno. Obnovuji spojení...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "vytváøím spojení IMAP4 s %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "Zpráva %d u¾ byla v mezipamìti.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "Získávám zprávu %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "zdrojová slo¾ka je stejná jako cílová.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Pøesouvám zprávu %s%c%d do %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "Nemohu najít obálku\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "Vyskytla se chyba bìhem nacházení obálky.\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "Nemohu analyzovat obálku: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "Vymazávám zprávu %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tVymazávám v¹echny zprávy z mezipamìti... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Nemohu se spojit s IMAP4 serverem: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "Neúspì¹né pøihlá¹ení k IMAP4.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "Import" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "Importuji soubor :" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Cílový adresáø:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr " Vybrat... " + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Vybrat importovaný soubor " + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Nahrazuji novými zprávami" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Zadejte heslo" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "Získávám nové zprávy z konta %s ...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s : Kontroluji stav po¹ty" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Pøipojuji se na POP3 server: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Nemohu se spojit s POP3 serverem: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Nemohu se spojit s POP3 serverem: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Ovìøuji" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Zji¹»uji poèet nových zpráv " + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Obnovuji zprávu (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Vymazávám zprávu" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Zaøazuji" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "zpráva nebyla pøijata\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Vyskytla se chyba bìhem zpracovávání po¹ty." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "Nezbylo ¾ádné místo na disku." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "®ádné zprávy v místí po¹tovní schránce.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Dostávám nové zprávy z %s do %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Vytváøím záznamové okno...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Záznamový protokol" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Soubor '%s' u¾ existuje.\n" +"Nemohu vytvoøit slo¾ku." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "Vytváøená zpráva existuje. Opravdu chcete skonèit ?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "" + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_Soubor/Znovu naèíst slo¾ky" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_Soubor/_Importovat soubor mbox..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_Soubor/Ulo¾it jako..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_Soubor/_Tisk..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_Soubor/_Konec" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/_Upravit/_Hledat" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/Z_obrazit" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/Z_obrazit/_Strom slo¾ek " + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/Z_obrazit/_Zobrazit zprávu" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/Z_obrazit/_Panel nástrojù " + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/Z_obrazit/_Panel nástrojù/Ikony _a text" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/Z_obrazit/_Panel nástrojù/_Ikony" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/Z_obrazit/_Panel nástrojù/_Text" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/Z_obrazit/_Panel nástrojù/_Bez zobrazení" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/Z_obrazit/_Informaèní panel " + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/Z_obrazit/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/Z_obrazit/Samostatný s_trom slo¾ek " + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/Z_obrazit/Samostané pro_hlédnutí zprávy" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/Z_obrazit/_Znaková sada/_Autodetekce " + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/Z_obrazit/_Znaková sada/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/Z_obrazit/_Znaková sada/7bitová ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/Z_obrazit/_Znaková sada/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/Z_obrazit/_Znaková sada/Západní (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/Z_obrazit/_Znaková sada/Støedoevropská (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/Z_obrazit/_Znaková sada/Baltská (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/Z_obrazit/_Znaková sada/Baltská (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/Z_obrazit/_Znaková sada/Øecká (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/Z_obrazit/_Znaková sada/Turecká (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/Z_obrazit/_Znaková sada/Azbuka (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/Z_obrazit/_Znaková sada/Azbuka (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/Z_obrazit/_Znaková sada/Azbuka (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/Z_obrazit/_Znaková sada/Japonská (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/Z_obrazit/_Znaková sada/Japonská (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/Z_obrazit/_Znaková sada/Japonská (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/Z_obrazit/_Znaková sada/Japonská (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/Z_obrazit/_Znaková sada/Zjednodu¹ená èínská (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/Z_obrazit/_Znaková sada/Tradièní èínská (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/Z_obrazit/_Znaková sada/Tradièní èínská (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/Z_obrazit/_Znaková sada/Èínská (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/Z_obrazit/_Znaková sada/Korejská (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/Z_obrazit/_Znaková sada/Korejská (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/_Zpráva/_Pøíjem nové po¹ty " + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/_Zpráva/Pøijmout _ze v¹ech kont" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/_Zpráva/Odeslat pozdr¾ené zprávy" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/_Zpráva/_Napsat novou zprávu " + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/_Zpráva/_Odpovìdìt" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/_Zpráva/Odpovìdìt _v¹em" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/_Zpráva/Pøedat dá_l" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/_Zpráva/Pøepo¹li jako pøílohu" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/_Zpráva/_Pøesunout..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/_Zpráva/S_mazat" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/_Zpráva/_Oznaèit" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/_Zpráva/_Oznaèit/_Oznaèit" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/_Zpráva/_Oznaèit/_Zru¹it oznaèení" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/_Zpráva/_Oznaèit/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/_Zpráva/_Oznaèit/Oznaèit jako nepø_eètené" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/_Zpráva/_Oznaèit/Oznaèit je _jako ètené" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/_Zpráva/Otevøít v novém _oknì" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/_Zpráva/Zobrazit v¹echny _hlavièky" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/_Pøehled" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/_Pøehled/_Smazat duplikované zprávy" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/_Pøehled/_Filtr zpráv " + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/_Pøehled/S_pustit" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/_Pøehled/_Aktualizovat" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/_Pøehled/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/_Pøehled/Pø_edchozí zpráva" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/_Pøehled/_Dal¹í zpráva" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/_Pøehled/Dal¹í nepøeè_tená zpráva" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/_Pøehled/_Jít do jiné slo¾eky" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/_Pøehled/Setøíd_it" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/_Pøehled/Setøíd_it/Setøídit podle _èísla" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/_Pøehled/Setøíd_it/Setøídit podle _velikosti " + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/_Pøehled/Setøíd_it/Setøídit podle _data " + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/_Pøehled/Setøíd_it/Setøídit podle _od koho" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/_Pøehled/Setøíd_it/Setøídit podle pø_edmìtu" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/_Pøehled/Setøíd_it/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/_Pøehled/Setøíd_it/_Získat z pøedmìtu" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/_Pøehled/Podle tématu" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/_Pøehled/Ne podle tématu" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/_Pøehled/Nastavit polo¾ku z_obrazení" + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/_Nástroje/Okno záznamù " + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/_Nastavení" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/_Nastavení/_Hlavní nastavení..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/_Nastavení/_Nastavení úètu..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/_Nastavení/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/_Nastavení/Vytvoøit _nové konto..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/_Nastavení/_Úprava kont..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/_Nastavení/_Zmìna aktuálního konta" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/Nápo_vìda/_Manuál" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/Nápo_vìda/_Manuál/_Anglicky" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/Nápo_vìda/_Manuál/_Japonsky" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/Nápo_vìda/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Vytváøím hlavní okno...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "Hlavní okno: barevné rozvr¾ení %d bylo neúspì¹né\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Neoznaèený" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "¾ádný" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Souèasné konto: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "pozice okna: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "" + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "" + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Stahnout" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Pøeèíst nové zprávy" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Stahnout" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Pøeèíst novou po¹tu ze v¹ech úètù" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Poslat pozdr¾ené zprávy" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Napsat" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Napsat novou zprávu" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Odpovìdìt" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Odpovìdìt na zprávu" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "Odpov. v¹em" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "Odpov. v¹em" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Pøeposlat" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Pøedat zprávu dál" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Smazat zprávu" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Provést" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Provést oznaèený proces " + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Dal¹í nepøeètenou zprávu" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Nastavení" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Hlavní nastavení" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Konto" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Nastavení konta" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Ukonèení programu" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "Chcete ukonèit tento program?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Neúspì¹né poslání zprávy z fronty." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "Vnucená znaková sada: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Získávám zprávy z %s do %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "Nemohu pøeèíst soubor s po¹tovní schránkou.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "Neplatný formát po¹tovní schránky: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "Selhání po¹tovní schránky: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "Nemohu otevøít doèasný soubor\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "Nemohu zapisovat do doèasného souboru\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d zpráv nalezeno.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "Nemohu vytvoøit uzamèený soubor %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "Nemohu vytvoøit %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "po¹tovní schránka je vlastnìna jiným procesem, èekejte...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "Nemohu uzamknout %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "Neplatný typ zámku\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "Nemohu uzamknout %s\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "nemù¾u smazat mailbox.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Vyvolávám zobrazení zprávy...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "Nemohu zkopírovat zprávu %s do %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Nemohu otevøít oznaèený soubor.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "" + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Poslední poèet v adresáøi %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tHledám zprávy mimo mezipamìt... " + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d zprávy(z) mimo mezipamì» byly nalezeny.\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tTøídím zprávy, které byly mimo mezipamì», v èíselném poøadí... " + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/_Otevøít" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/_Zobrazit jako text" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/_Ulo¾it jako..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME Typ" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Vyvolávám zobrazení MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Nemohu získat èást z mnohaèás»ové zprávy." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Nemohu ulo¾it èást z mnohaèás»ové zprávy." + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Ulo¾it jako" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Pøepsat" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "Pøepsat existující soubor?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "Neplatná pøíkazová øádka prohlí¾eèe MIME: '%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "Vytváøím NNTP spojení s %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "NNTP spojení %s:%d bylo pøeru¹eno. Obnovuji spojení...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "èlánek %d u¾ byl v mezipamìti.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "Získávám èlánek %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "Nemohu èíst èlánek %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "Nemohu obnovit èlánek %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "Nemohu nastavit skupinu: %s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "neplatný rozstah èlánku: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "®ádný nový èlánek.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "Vyskytla se chyba bìhem získávání xover.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "Neplatná xover øádka: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "Vymazávám èlánek %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tVymazávám v¹echny èlánky z mezipamìti... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "Nemohu se spojit s NNTP serverem: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "Chyba protokolu: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "Chyba protokolu\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "Vyskytla se chyba v autorizaci\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "Chyba protokolu POP3\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Naèítám konfiguraci...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "Nalezený: %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Ukonèené ètení konfigurace.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "Selhání zápisu konfigurace do souboru\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Konfigurace je ulo¾ena.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Pou¾ít" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Otevøení okna s nastavením konta...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Konto%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Nastavení pro nové konto" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Nastavení pro ka¾dé konto" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Vyvolání okna pro nastavení konta...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Základní" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Pøijmout" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Roz¹íøený" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Jméno tohoto konta" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Obvykle pou¾itý" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Osobní informace" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Celé jméno" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "Po¹tovní adresa" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organizace" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Informace o serveru" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normální)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "®ádný (místní)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Server pro pøíjem" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "SMTP server (k odesílání)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "U¾ivatelské èíslo" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Heslo" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Smazat zprávy na serveru po jejich pøijmutí" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Pøijmout v¹echny zprávy ze serveru" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Filtr zpráv k pøijímání" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Hlavièka" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Pøidat pole s datovou hlavièkou" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Vytvoøit èíslo zprávy" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Pøidat u¾ivatelsky definovanou hlavièku" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "Upravuji..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Automaticky nastavit následující adresy" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Kopie" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Slepá kopie" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Odpovìdìt na" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Podepsaný soubor" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Urèete SMTP port" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Urèete POP3 port" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Urèete jméno domény" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "Po¹tovní adresa nebyla zadána." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "SMTP server nebyl zadáno." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "U¾ivatelsé èíslo nabylo zadáno." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "POP3 server nebyl zadáno." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "IMAP4 server nebyl zadáno." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "NNTP server nebyl zadáno." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Vytváøím okno hlavního nastavení...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Hlavní nastavení" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Zobrazit" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filtrování" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Rozhraní" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Ostatní" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Externí program" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Pou¾ít externí program k zaèlenìní" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "Cesta k programu" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Místní Spool" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Filtr na zaèlenìní" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Spool adresáø" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Automatická kontrola nové po¹ty" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "ka¾dý" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "minuta(y)" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "Kontrola nové po¹ta pøi spu¹tìní" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "Nová" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "Pou¾ít externí program pro posílání" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "Ulo¾it poslanou zprávu do Odeslaná po¹ta" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "Fronta zpráv, která byla po¹kozena pøi posílání" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Výstupní znaková sada" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Automaticky" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7bitový ascii (US-ASCII)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Západní (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "Støedoevropská (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltická (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltická (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "Øecká (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "Turecká (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Azbuka (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "Azbuka (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "Azbuka (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "Azbuka (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonská (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "Japonská (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "Japonská (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "Zjednodu¹ená èínská (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "Tradièní èínská (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "Tradièní èínská (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "Èínská (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Korejská (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Zaøazování" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "Zaøadit zprávu, kdy¾ odpovídá" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "Zaøazovací znaèka" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Formát zaøazení:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " Popis symbolù " + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Automaticky vlo¾it podpis" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Oddìlovaè podpisu" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "Doporuèené pravítka" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "Obsluha" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(¾ádný)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Klíèové slovo" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Tvrzení" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "obsahuje" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "neobsahuje" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Místo urèení" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Pou¾ít regulární výraz " + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "Nepøijímat" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "Registrovat" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " Nahradit " + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "Písmo" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Zpráva" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Povolit zabarvení zpráv" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Zobrazit 2-bytovou abecedu a èíslice s 1-bytovým znakem" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "Zobrazit krátkou hlavièku pøi zobrazení zprávy" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Prázdná øádka" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "pixel(y)" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "Vynechat prázdné místo v hlavièce " + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Pøenést jméno hlavièky (jako napøíklad 'Od:', 'Pøedmìt:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Zpbrazit pøíjemce v sloupci `Od', jetli¾e odesílatel je vy sám" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr " Nastavení zobrazení souhrného odstavce... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "Emulovat chování my¹i z Emacsu" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Pøi vstupu do slo¾ky otevøít první nepøeètenou zprávu" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "Pøi ukonèení" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Potvrdit ukonèení" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Externí Web prohlí¾eè (%s bude nahrazen s URI)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "Pøíkaz" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Externí editor (%s bude nahrazen se jménem souboru)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "Popis symbolù" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Naèítání nastavení filtru...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "Zapisování nastavení filtru...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(Nový)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Místo urèení není nastavené." + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Jméno hlavièky naní nastavené." + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "Smazat pravidlo" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "Opravdu chcete smazat toto pravítko?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Nastavit zobrazení odstavce" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Oznaèit" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Èíslo" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Datum" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "Od" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Pøedmìt" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "Výbìr písma" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "Ne Po Út St Èt Pá So" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Neúspì¹ná konverze kódu.\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\t®ádný soubor v mezipamìti\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tÈtení celkové mezipamìti..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "Verze mezipamìti je rozdílná, Vyøazuji ji.\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tOznaèuji zprávy..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d nová(é) zpráva(y)\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "Oznaèený soubor nebyl nalezen.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "Oznaèená verze je odli¹ná (%d != %d). Vaøazuji ji.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "Nemohu otevøít oznaèený soubor s re¾imem pøipojení'.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "Nemohu otevøít oznaèený soubor s re¾imem zápisu.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "Neúspì¹né poslání zprávy z fronty.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "Neplatný pøíkazoví øádek tisku: '%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "Vytváøím dialog procesu...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "Vyskytla se chyba bìhem obnovy dat.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "Nemohu zapisovat do souboru.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "Fronta hlavièek zpráv je po¹kozená.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Pøipojuji se na SMTP serverem: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "Nemohu se spojit s SMTP serverem: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "Vyskytla se chyba bìhem posílání HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "Vyhladat" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Rozli¹ovat malá a velká písmena" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "Hledat nazpìt" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Smazat" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "Neúspì¹né hledání" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "Hladaný øetìzec nebyl nalezen." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Zaèátek seznamu dosáhnut, pokraèovat od konce?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Konec seznamu dosáhnut, pokraèovat od zaèátku ?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Hledání ukonèeno" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/_Pøesunout..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/_Kopírovat..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/S_pustit" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/_Oznaèit" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/_Oznaèit/_Oznaèit" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/_Oznaèit/_Zru¹it oznaèení" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/_Oznaèit/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/_Oznaèit/Oznaèit jak_o nepøeètené" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/_Oznaèit/Oznaèit jako è_tené" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/_Odpovìdìt" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/Odpovìdìt _v¹em" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/Pø_edat dál" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Pøeposlat jako pøílohu" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/Otevøít v novém _oknì" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Zobrazit v¹echny _hlavièky" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/_Tisknout..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/Vybrat _v¹e" + +#: src/summaryview.c:320 +msgid "M" +msgstr "M" + +#: src/summaryview.c:320 +msgid "U" +msgstr "U" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Vytváøím celkový pohled...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "Èís." + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Zpracovat oznaèené" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Zbyly nìjaké oznaèené, zpracovat je ?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"prázná slo¾ka\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Prohledávám slo¾ku (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "Hotovo." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "®ádná nepøeètená zpráva" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "" +"Nebyla nalezena ¾ádná nepøeètená zpráva.\n" +"Chcete jít do dal¹í slo¾ky ?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Získávám zprávy od osoby..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d zmazané" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d pøemístìné" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " polo¾ka(y) vybrána(y)" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d nová(é), %d nepøeètená(é), celkem %d (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d nových, %d nepøeètených, %d celkem" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Celkové setøídìní..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tNastavuji pøehled z dat zpráv..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "Nastavuji pøehled z dat zpráv..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "Zapisuji celkovou mezipamìt (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(®ádné datum)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Zpráva %d je oznaèena\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Zpráva %d je oznaèena jako ètená\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Zpráva %d je oznaèena jako nepøe¹tená\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Zpráva %s/%d je nastavena ke smazání\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "Vybraná slo¾ka je odpadkový ko¹." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Vymazávám duplikované zprávy..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Zpráva %s/%d je odznaèená\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Zpráva %d je nastavena k pøesunutí do %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "Cílová polo¾ka je stejná jako aktuální slo¾ka." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "" + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Tisk" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Vlo¾te pøíkazovou øádku pro tisk:\n" +"('%s' bude nahrazena se jménem souboru)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"Pøíkazová øádka pro tisk je neplatná:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "Sestavuji témata..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "Ma¾u témata" + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "" + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "filtruji..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "Filtruji..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "Pøejít na %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Vytváøím zobrazení textu...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "Pro ulo¾ení této èásti vyvolejte menu pomocí\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"pravého tlaèítka my¹i a zvolte `Ulo¾it jako...'.\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "K zobrazení této èásti jako textové zprávy, vyberte \n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"'Zobrazit jako text', nebo stisknout 't'.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "" +"K otevøení této èásti s pomocí externího programem, vyberte 'Otevøít',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" +"kliknìte dvakrát nebo kliknìte na støední tlaèítko nebo stisknìte 'l'." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "Neúspì¹ný zápis do %s.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "Neplatný otevøený URI pøíkazový øádek: '%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/_Pøehled/_Vybrat v¹e" + +#~ msgid "Clean trash" +#~ msgstr "Vyprázdnit odpadkový ko¹" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/_Oznaèit/Oznaèit jako _dùle¾ité" + +#~ msgid "D" +#~ msgstr "D" + +#~ msgid "o" +#~ msgstr "o" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: pøiøazení barev bylo neúspì¹né\n" + +#~ msgid "*** Warning: code conversion failed ***\n" +#~ msgstr "*** Varování: Neúspì¹ná konverze kódu ***\n" + +#~ msgid "can't set mailbox: %s\n" +#~ msgstr "Nemohu nastavit po¹tovní schránku: %s\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "Neplatný typ MIME\n" + +#~ msgid "Reply-To:" +#~ msgstr "Odpovìdìt na:" + +#~ msgid "%s - Compose message [Edited]" +#~ msgstr "%s - psaní zprávy [Edited]" + +#~ msgid "/_Add news server" +#~ msgstr "/Pøid_at server novinek" + +#~ msgid "deleting folder %s ...\n" +#~ msgstr "Vymazávám slo¾ku %s ...\n" + +#~ msgid "deleting newsgroup %s ...\n" +#~ msgstr "Vymazávám diskusní skupinu %s ...\n" + +#~ msgid "The news server `%s' already exists." +#~ msgstr "Server zpráv '%s' u¾ existuje." + +#~ msgid "deleting cache folder of %s ...\n" +#~ msgstr "Vymazávám mezipamìt slo¾ek z %s ...\n" + +#~ msgid "IMAP login command is invalid.\n" +#~ msgstr "©patný pøihla¹ovací pøíkaz k IMAP.\n" + +#~ msgid "Next unread" +#~ msgstr "Nová zpráva" + +#~ msgid "Previously selected folder: %s\n" +#~ msgstr "Pøedcházející vybraná slo¾ka: %s\n" + +#~ msgid "New directory" +#~ msgstr "Nový slo¾ka" + +#~ msgid "The directory not found. Create it?" +#~ msgstr "Slo¾ka nenalezena. Vytvoøit ji?" + +#~ msgid "Can't create directory." +#~ msgstr "Slo¾ku nelze vytvoøit." + +#~ msgid "Selected name isn't a directory." +#~ msgstr "Vybrané jméno není jménem adresáøe." + +#~ msgid "Writing mail folder list..." +#~ msgstr "Zapisuji seznam s po¹tou..." + +#~ msgid "Writing imap folder list..." +#~ msgstr "Zapisuji seznam pro imap..." + +#~ msgid "Writing news folder list..." +#~ msgstr "Zapisuji seznam s novinkami..." + +#~ msgid "Reading folder %s ..." +#~ msgstr "Naèítám slo¾ku %s ..." + +#~ msgid "Mail Server (IMAP4)" +#~ msgstr "Po¹tovní server (IMAP4)" + +#~ msgid "NetNews" +#~ msgstr "Sí»ové zprávy" + +#~ msgid "reading folder list %s ..." +#~ msgstr "Naèítám seznam slo¾ek %s ..." + +#~ msgid "Broken folder list cache.\n" +#~ msgstr "Po¹kozený seznam slo¾ek v mezipamìti.\n" + +#~ msgid "Select destination directory" +#~ msgstr "Vybrat cílový adresáø " + +#~ msgid "can't drop message into %s\n" +#~ msgstr "Nemohu vlo¾it zprávu do %s\n" + +#~ msgid "%s exists\n" +#~ msgstr "%s existuje\n" + +#~ msgid "can't move tmpmsg to %s\n" +#~ msgstr "Nemohu pøesunout tmpmsg do %s\n" + +#~ msgid "IMAP session is not established\n" +#~ msgstr "IMAP relace není pevnì stanovena\n" + +#~ msgid "news session is not established\n" +#~ msgstr "nová relace není pevnì stanovena\n" + +#~ msgid "Unlinking message %s in trash...\n" +#~ msgstr "Ma¾u zprávu %s z odpadkového ko¹e...\n" + +#~ msgid "Connecting to %s ..." +#~ msgstr "Spojuji se %s ..." + +#~ msgid "Not yet implemented." +#~ msgstr "Nenaimplementováno." + +#~ msgid "/_Summary/Unsele_ct all" +#~ msgstr "/_Pøehled/_Zru¹it vybrat v¹e" + +#~ msgid "Korean (ISO-2022-KR)" +#~ msgstr "Korejská (ISO-2022-KR)" + +#~ msgid "Enable thread view on summary" +#~ msgstr "Povolit tématické zobrazení v souhrnu" + +#~ msgid "Printing" +#~ msgstr "Tisknutí" + +#~ msgid "" +#~ "Date\n" +#~ "from\n" +#~ "Subject\n" +#~ "To\n" +#~ "Message-ID\n" +#~ "%" +#~ msgstr "" +#~ "Datum\n" +#~ "od\n" +#~ "Pøedmìt\n" +#~ "Komu\n" +#~ "Identifikaèní èíslo zprávy\n" +#~ "%" + +#~ msgid "Invalid month\n" +#~ msgstr "Neplatný mìsíc\n" + +#~ msgid "/_Mark/Mark _all" +#~ msgstr "/_Oznaèit/Oznaèit _v¹e " + +#~ msgid "/_Mark/U_nmark all" +#~ msgstr "/_Oznaèit/Zru¹it Oznaèit v¹_e" + +#~ msgid "/_Mark/M_ove marked" +#~ msgstr "/_Oznaèit/Pøe_sunout oznaèené" + +#~ msgid "/_Mark/_Delete marked" +#~ msgstr "/_Oznaèit/_Smazat oznaèené" + +#~ msgid "/U_nselect all" +#~ msgstr "/Zru¹it Oznaèit v¹_e" + +#~ msgid "/_Message/Reply with _quotation" +#~ msgstr "/_Zpráva/Odpovìdìt s " + +#~ msgid "/Reply with _quotation" +#~ msgstr "/_Odpovìdìt " + +#~ msgid "queueing message that failed to send...\n" +#~ msgstr "Mise en file d'attente des messages non envoyés...\n" + +#~ msgid "allocated mainview size: width = %d, height = %d\n" +#~ msgstr "Velikost rozvr¾ení hlavního pohledu: ¹íøka = %d, vý¹ka = %d\n" + +#~ msgid "allocated mainwin size: width = %d, height = %d\n" +#~ msgstr "" +#~ "Velikost rozvr¾ení hlavního okna: ¹íøka = %d, vý¹ka = %d\n" +#~ " " diff --git a/po/de.gmo b/po/de.gmo new file mode 100644 index 0000000000000000000000000000000000000000..117fbc5a90345dc363bcabaf60a401a6fcf1f523 GIT binary patch literal 62893 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 Yx`2j*@!d~X@Ra9?%zKWZw;FT*3x=|StN;K2 literal 0 HcmV?d00001 diff --git a/po/de.po b/po/de.po new file mode 100644 index 000000000..b498c2d8b --- /dev/null +++ b/po/de.po @@ -0,0 +1,3677 @@ +# German translation of Sylpheed +# Copyright (C) 2000 Free Software Foundation, Inc. +# Martin Schaaf <mascha@ma-scha.de>, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-04-15 17:11+0200\n" +"Last-Translator: Martin Schaaf <mascha@ma-scha.de>\n" +"Language-Team: German <gnome-de@gnome.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "Über" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"Das Urheberrecht der Teile von fetchmail 1997 liegt bei Eric S. Raymond. Bei " +"Teilen davon liegt das Urheberrecht bei Carl Harris, 1993 und 1995. Das " +"Urheberecht wird bewahrt für den Zweck der Weitergabe der Quellen.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"Das Urheberrecht für die MD5-Unterstützung liegt bei RSA DATA Security, Inc. " +"Näheres zur Lizenz in den Kopfzeilen der Datei md5.c.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Das Urheberrecht von Kcc liegt bei Yasuhiro Tonooka <tonooka@msi.co.jp>, und " +"das Urheberrecht von Libkcc liegt bei takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"Das Urheberrecht von GPGME (2001) liegt by Werner Koch <dd9jn@gnu.org>\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Dieses Programm ist freie Software; Sie können es weiterreichen und/oder " +"modifizieren im Sinne der GNU General Public License wie sie von der Free " +"Software Foundation veröffentlicht wird; entweder Version 2, oder (nach " +"ihrer Wahl) jede neuere Version.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Dieses Programm wird weitergereicht in der Hoffnung das es nützlich ist,aber " +"OHNE JEDE GARANTIE; ohne die implizierte Garantie der MARKTGÄNGIGKEIT oder " +"der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Lesen Sie die GNU General Public " +"License für weitere Details.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Sie sollten eine Kopie der GNU General Public License mit diesem Programm " +"erhalten haben; wenn nicht, dann schreiben Sie an Free Software Foundation, " +"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "OK" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Lese Konfiguration für jeden Account...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Gefundene Zeichen: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"Es sind einige Fenster zum Verfassen von Nachrichten geöffnet.\n" +"Bitte schließen Sie diese Fenster vor dem Beabeiten der Accounts." + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Öffne Accountbearbeitungsfenster...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Erstelle Accountbearbeitungsfenster...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Bearbeite Accounts" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Name" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protokoll" + +#: src/account.c:382 +msgid "Server" +msgstr "Server" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Hinzufügen" + +#: src/account.c:407 +msgid "Edit" +msgstr "Bearbeiten" + +#: src/account.c:413 +msgid " Delete " +msgstr " Löschen " + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Ab" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Auf" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Als Standardaccount wählen " + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Schließen" + +#: src/account.c:498 +msgid "Delete account" +msgstr "Account löschen" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Wollen Sie diesen Account wirklich löschen?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Ja" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+No" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_Datei" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_Datei/Neue _Adresse" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_Datei/Neue _Gruppe" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_Datei/Neue Ab_lage" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_Datei/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_Datei/_Bearbeiten" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_Datei/_Löschen" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_Datei/S_chließen" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/_Hilfe" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/_Hilfe/_Über" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Neue _Adresse" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Neue _Gruppe" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Neue Ab_lage" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/_Bearbeiten" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/_Löschen" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "E-Mail Adresse" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Kommentar" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Adreßbuch" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Name:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Löschen" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Vorschau" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "An:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Allgemeine Adresse" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Persönliche Adresse" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Adresse(n) löschen" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Adresse(n) wirklich löschen?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "Nein" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Neue Ablage" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Geben Sie den Namen der neuen Ablage ein:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NeueAblage" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Der Name existiert bereits." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Neue Gruppe" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Geben Sie den Namen der neuen Gruppe ein:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NeueGruppe" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Bearbeiten Gruppe" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Geben Sie den neuen Namen der Gruppe ein:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Ablage bearbeiten" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Geben Sie den neuen Namen der Ablage ein:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Wirklich `%s' löschen ?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Adresse bearbeiten" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Adresse" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Abbrechen" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Lese Adressbuchdatei..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s existiert nicht.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "Fertig.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Exportiere Adressbuch in Datei..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "konnte Adressbuchdaten nicht schreiben.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Notiz" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Warnung" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Fehler" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Erstelle Alarmpanel-Dialog...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "konnte keinen Speicher alloziieren\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Hinzufügen..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Entfernen" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Eigenschaften" + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_Datei/Datei _anhängen" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_Datei/Datei _einfügen" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_Datei/_Unterschrift einfügen" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/_Bearbeiten/_Zurück" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/_Bearbeiten/_Wiederholen" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/_Bearbeiten/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/_Bearbeiten/_Ausschneiden" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/_Bearbeiten/_Kopieren" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/_Bearbeiten/_Einfügen" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/_Bearbeiten/A_lle auswählen" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/_Bearbeiten/_Umbrechen langer Zeilen" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/_Bearbeiten/Bearbeiten mit e_xternem Editor" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/_Nachricht" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/_Nachricht/_Senden" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/_Nachricht/S_päter senden" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/_Nachricht/Speichern in Ent_wurfablage" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/_Nachricht/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/_Nachricht/_An" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/_Nachricht/_Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/_Nachricht/_Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/_Nachricht/_Antwort an" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/_Nachricht/_Followup to" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/_Nachricht/An_hängen" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "/_Nachricht/Digital _unterschreiben" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/_Nachricht/_Verschlüsseln" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/_Werkzeuge" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/_Werkzeuge/_Lineal anzeigen" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/_Werkzeuge/_Adressbuch" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "Kann Textabschnitt nicht lesen\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: Datei existiert nicht\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Beginn der weitergeleiteten Nachricht:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Datei %s existiert nicht\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Kann Dateigröße von %s nicht ermitteln\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Datei %s ist leer\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Nachricht: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [Bearbeited]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - Verfasse Nachricht%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Verfasse Nachricht%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Empfänger nicht angegeben" + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "Kann die Empfängerliste nicht holen." + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"Account zum Versenden von E-Mails, wurde nicht angegeben.\n" +"Bitte wählen sie einen E-Mail-Account vor dem Senden." + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "Fehler beim Senden der Nachricht an %s ." + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Einreihen" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Fehler aufgetreten beim Senden der Nachricht.\n" +"Soll die Nachricht in die Queue-Ablage?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Nachricht kann nicht eingereiht werden." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Fehler aufgetreten beim Senden der Nachricht." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Kann die Nachricht nicht in der Outboxablage speichern." + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "kann Dateimodus nicht ändern\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "Kann den Zeichensatz der Nachricht nicht konvertieren." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "kann Kopfzeilen nicht schreiben\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "gesendete Nachricht speichern...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "kann Nachricht nicht speichern\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "kann markierte Datei nicht öffnen\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "Nachricht einreihen...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "Nachricht kann nicht eingereiht werden\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Kann Datei %s nicht öffnen\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "erzeugte Nachrichten-ID: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME-Typ" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Größe" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Erstelle Verfassenfenster...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "Von:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Senden" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "Sende Nachricht" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "Später senden" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "In Queue-Ablage und später senden" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Draft" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Speichern in Entwurfablage" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "Einfügen" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Datei einfügen" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "Anhängen" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Datei anhängen" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Unterschrift" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Unterschrift einfügen" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editor" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Bearbeiten mit externem Editor" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "Zeilenumbruch" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "Umbrechen langer Zeilen" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Ungültiger MIME Typ" + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Datei existiert nicht oder ist leer." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Eigenschaften" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Zeichensatzkodierung" + +#: src/compose.c:3065 +msgid "Path" +msgstr "Pfad" + +#: src/compose.c:3066 +msgid "File name" +msgstr "Dateiname" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "Kommandozeile für den externen Editor ist ungültig: `%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"Der externe Editor ist in Betrieb.\n" +"Prozess terminieren?\n" +"Prozessgruppen ID: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "Gruppen ID: %d des terminierten Prozesses" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Temporäre Datei: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Verfassen: Eingabe vom Überwachungsprozess\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "Kann externen Editor nicht ausführen\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Kann nicht in Datei schreiben\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Lesen von Pipe fehlgeschlagen\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "Kann die alte Nachricht, in der Entwurfablage, nicht entfernen\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Wähle Datei" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Nachricht verwerfen" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Diese Nachricht wurde geändert. Verwerfen?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Verwerfen" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "zum Entwurf" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Wähle Ablage" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/_Neue Ablage erstellen..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/Ablage _umbenennen..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/Ablage _löschen" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/Entferne _Mailbox" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/Entferne _IMAP4-Server" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/Newsgroup _abonnieren..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/Newsgroup _entfernen" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/Newsserver en_tfernen" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Ablage" + +#: src/folderview.c:234 +msgid "New" +msgstr "Neu" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Ungelesen" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Erstelle Ablageansicht...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Setze Ablageinformation...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Setze Ablageinformation..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Durchsuche Ablage %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Durchsuche Ablage %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "Erneuere alle Ablagen..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "Inbox" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Outbox" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "Queue" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Trash" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Ablage %s ist gewählt\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "`%c' kann nicht in den Ablagenamen integriert werden." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "Die Ablage `%s' existiert bereits." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Neuer Name für `%s':" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Ablage umbenennen" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"Alle Ablagen und Nachrichten in `%s' werden gelöscht.\n" +"Wollen Sie das wirklich?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Ablage löschen" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "kann Ablage nicht entfernen `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"Mailbox `%s' wirklich entfernen?\n" +"(Die Nachrichten werden NICHT von der Platte gelöscht)" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "Ablage entfernen" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "Ablage `%s' wirklich löschen?" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "IMAP4-Server `%s' wirklich löschen?" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "IMAP4-Server löschen" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "Newsgroup abonnieren" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "Zu abonnierende Newsgroup eingeben:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "Die Newsgroup `%s' existiert bereits." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Newsgroup wirklich löschen `%s'?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Newsgroup löschen" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Newsserver wirklich löschen `%s'?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Newsserver löschen" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Newsgroups:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Betreff:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Erzeuge Kopfzeilenansicht...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(Kein Von)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Kein Betreff)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Erstelle Kopfzeilenfenster...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Alle Kopfzeilen" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "Anzeige der Kopfzeilen von %s...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Alle Kopfzeilen" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Erstelle Bilderansicht...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Kann das Bild nicht laden." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "IMAP4-Verbindung zu %s:%d wurde unterbrochen. Verbinden...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "erstelle IMAP4-Verbindung zu %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "kann Ablage %s nicht auswählen\n" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "Nachricht %d wurde schon zwischengespeichert.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "empfange Nachricht %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "kann Nachricht %d nicht holen\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "Die Quellablage ist identisch mit dem Ziel.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Verschiebe Nachricht %s%c%d nach %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "kann gelöschte Flags nicht setzen: %d\n" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "kann nicht löschen\n" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" +"kann gelöschte Flags nicht setzen: 1:%d\n" +"\n" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "kann die Nachrichteneigenschaften nicht empfangen\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "Fehler beim Empfang der Nachrichteneigenschaften.\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "kann die Nachrichteneigenschaften nicht bearbeiten: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "Lösche Nachricht %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tLösche alle zwischengespeicherten Nachrichten... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Keine Verbindung mit IMAP4-Server: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "IMAP4-Login fehlgeschlagen.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "kann %d nicht nach %s kopieren\n" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "Fehler beim IMAP-Befehl: STORE %d:%d %s\n" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "Fehler beim IMAP-Befehl: EXPUNGE\n" + +#: src/import.c:116 +msgid "Import" +msgstr "Importieren" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "Importiere Datei:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Zielverzeichnis:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr " Auswählen... " + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Wähle importierte Datei" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Empfange neue Nachricht" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "Kennwort für %s auf %s angeben:" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Kennwort eingeben" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "Authentifizierung mit %s auf %s fehlgeschlagen" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "erhalte neue Nachrichten vom Account %s...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: Empfange neue Nachrichten" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Verbinde mit POP3-Server: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Keine Verbindung mit POP3-Server: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Keine Verbindung mit POP3-Server: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Authentifizieren" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Anzahl der neuen Nachrichten empfangen" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Empfange Nachricht (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Lösche Nachricht" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Beenden" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "eine Nachricht wurde nicht empfangen\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Fehler beim Verarbeiten der E-Mail." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "Kein Festplattenplatz mehr frei." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "Keine Nachrichten im lokalen Mailbox.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Erhalte neue Nachrichten von %s in %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Erstelle Logbuch-Fenster...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Mitschrift des Protokolls" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Datei `%s' existiert bereits.\n" +"Kann Ablage nicht erstellen." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread wird nicht unterstützt von Glib.\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "Aufruf: %s [OPTION]...\n" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr " --compose [Adresse] öffnet Verfassenfenster" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr " --receive empfängt neue Nachrichten" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr " --receive-all empfängt neue Nachrichten von allen Accounts" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr " --debug Fehlersuche" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr " --help diese Hilfe" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "Verfasste Nachricht existiert. Wirklich beenden?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "Ein anderes Sylpheed läuft schon.\n" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/_Datei/_Mailbox hinzufügen..." + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_Datei/_Ablagebaum erneuern" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "/_Datei/Ab_lage" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/_Datei/Ab_lage/_Neue Ablage erstellen..." + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/_Datei/Ab_lage/Ablage _umbenennen..." + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "/_Datei/Ab_lage/Ablage _löschen" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_Datei/_Importiere Mbox-Datei..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "/_Datei/Papierkorb _leeren" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_Datei/Speichern _als..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_Datei/_Drucken..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_Datei/_Beenden" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/_Bearbeiten/_Suchen" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/_Ansicht" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/_Ansicht/Ablagebaum" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/_Ansicht/_Nachrichtenansicht" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/_Ansicht/_Werkzeugleiste" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/_Ansicht/_Werkzeugleiste/Bilder _und Text" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/_Ansicht/_Werkzeugleiste/_Bilder" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/_Ansicht/_Werkzeugleiste/_Text" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/_Ansicht/_Werkzeugleiste/_Keine Werkzeugleiste" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/_Ansicht/_Statuszeile" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/_Ansicht/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/_Ansicht/_Einzelner Ablagebaum" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/_Ansicht/_Getrennte Nachrichtenansicht" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/_Ansicht/_Zeichensatz" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/_Ansicht/_Zeichensatz/_Automatikerkennung" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/_Ansicht/_Zeichensatz/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/_Ansicht/_Zeichensatz/7bit ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/_Ansicht/_Zeichensatz/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/_Ansicht/_Zeichensatz/Western European (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/_Ansicht/_Zeichensatz/Central European (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/_Ansicht/_Zeichensatz/_Baltic (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/_Ansicht/_Zeichensatz/Baltic (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/_Ansicht/_Zeichensatz/Greek (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/_Ansicht/_Zeichensatz/Turkish (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/_Ansicht/_Zeichensatz/Cyrillic (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/_Ansicht/_Zeichensatz/Cyrillic (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/_Ansicht/_Zeichensatz/Cyrillic (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/_Ansicht/_Zeichensatz/Japanese (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/_Ansicht/_Zeichensatz/Japanese (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/_Ansicht/_Zeichensatz/Japanese (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/_Ansicht/_Zeichensatz/Japanese (_Shift_JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/_Ansicht/_Zeichensatz/Simplified Chinese (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/_Ansicht/_Zeichensatz/Traditional Chinese (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/_Ansicht/_Zeichensatz/Traditional Chinese (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/_Ansicht/_Zeichensatz/Chinese (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/_Ansicht/_Zeichensatz/Korean (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/_Ansicht/_Zeichensatz/Korean (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/_Nachricht/Empfange _neue E-Mail" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/_Nachricht/Empfange von _allen Accounts" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/_Nachricht/Sende _wartende Nachrichten" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/_Nachricht/Verfasse n_eue Nachricht" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/_Nachricht/An_twort" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/_Nachricht/Antwort an a_lle" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/_Nachricht/We_iterleiten" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/_Nachricht/Weiterleiten als An_hang" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/_Nachricht/_Verschieben..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "/_Nachricht/_Kopieren..." + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/_Nachricht/_Löschen" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/_Nachricht/_Markieren" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/_Nachricht/_Markieren/_Markieren" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/_Nachricht/_Markieren/Markierung _entfernen" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/_Nachricht/_Markieren/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/_Nachricht/_Markieren/Markieren als _ungelesen" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/_Nachricht/_Markieren/Markieren als _gelesen" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/_Nachricht/Öffne in neuen _Fenster" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/_Nachricht/Zeige _Quellen" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/_Nachricht/Zeige alle _Kopfzeilen" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/_Nachricht/Wieder_bearbeiten" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/E_xtras" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/E_xtras/_Lösche mehrfach vorhandene Nachrichten" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/E_xtras/Nachrichten _filtern" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/E_xtras/_Ausführen" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/E_xtras/_Erneuern" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/E_xtras/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/E_xtras/_Vorherige Nachricht" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/E_xtras/_Nächste Nachricht" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/E_xtras/Nächste _ungelesene Nachricht" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/E_xtras/_Gehe zu anderer Ablage" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/E_xtras/_Sortieren" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/E_xtras/_Sortieren/Sortieren nach _Nummer" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/E_xtras/_Sortieren/Sortieren nach _Größe" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/E_xtras/_Sortieren/Sortieren nach _Datum" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/E_xtras/_Sortieren/Sortieren nach _Absender" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/E_xtras/_Sortieren/Sortieren nach _Betreff" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/E_xtras/_Sortieren/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/E_xtras/_Sortieren/_Attract by subject" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/E_xtras/_Threads einschalten" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/E_xtras/T_hreads ausschalten" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/E_xtras/Setze angezeigte _Informationen..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/Werkzeug/_Logbuch-Fenster" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/_Einstellungen" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/_Einstellungen/Allgemeine _Einstellungen..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/_Einstellungen/_Accounteinstellungen..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/_Einstellungen/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/_Einstellungen/_Neuen Account erstellen..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/_Einstellungen/Accounts _bearbeiten..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/_Einstellungen/Aktuellen Account _wechseln..." + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/_Hilfe/_Anleitung" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/_Hilfe/Anleitung/_Englisch" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/_Hilfe/Anleitung/_Japanisch" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/_Hilfe/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Erstelle Hauptfenster...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "Haupt-Fenster: Bereitstellung von Farbe %d fehlgeschlagen\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Unbenannt" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "nicht" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Aktueller Account: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "Fensterposition: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "Leere Papierkorb" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "Lösche alle Nachrichten im Papierkorb?" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "Neue Mailbox" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"Geben Sie den Ort der Mailbox an.\n" +"Wenn die existierende Mailbox angegeben wird, wird\n" +"sie automatisch durchsucht." + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "Die Mailbox `%s' existiert bereits." + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Mailbox" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"Erstellen der Mailbox fehlgeschlagen.\n" +"Vielleicht existieren einige Dateien, oder Sie haben keine Schreibrechte" + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "Setze Widgets..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Holen" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Neue E-Mail aufnehmen" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Hole alle" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Neue E-Mail aller Accounts aufnehmen" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Senden wartender Nachrichten" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Verfassen" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Neue Nachricht verfassen" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Antwort" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Nachricht beantworten" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "Alle beantworten" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "Antwort an alle" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Weiterleiten" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Nachricht weiterleiten" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Nachricht löschen" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Ausführen" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Markierten Prozess ausführen" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "Nächste" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Nächste ungelesene Nachricht" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Einstellungen" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Allgemeine Einstellungen" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Account" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Accounteinstellungen" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Beenden" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "Beenden des Programms?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Senden wartender Nachrichten fehlgeschlagen." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "erzwungener Zeichensatz: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Erhaltene Nachrichten von %s in %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "Kann Mbox-Datei nicht lesen.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "Ungültiges Mbox-Format: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "zerstörte Mbox: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "kann temporäre Datei nicht öffnen\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"uncodiertes Von gefunden:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "kann nicht in temporäre Datei schreiben\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d Nachrichten gefunden.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "kann Sperrdatei %s nicht erstellen\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "Benutze, wenn möglich, 'flock' anstatt 'file'.\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "Kann %s nicht erstellen\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "Mailbox gehört einem anderen Prozess, warten...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "kann %s nicht sperren\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "ungültiger Sperrtyp\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "kann %s nicht entperren\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "Kann Mailbox nicht auf null setzen.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Erstelle Nachrichtenansicht...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "kann Nachricht %s nicht nach %s kopieren\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Kann markierte Datei nicht öffnen.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "%s existiert bereits." + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "Kopiere Nachricht %s%c%d nach %s ...\n" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Letzte Nummer im Verzeichnis %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tSuche nicht zwischengespeicherte Nachrichten..." + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d nicht zwischengespeicherte Nachricht(en) gefunden.\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "" +"\tSortiere, nicht zwischengespeicherte, Nachrichten in numerischer " +"Reihenfolge... " + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/_Öffnen" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/_Dartsellung als Text" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/Speichern _als..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "/Digitale Unterschrift übeprüfen" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME Typ" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Erstelle MIME-Ansicht...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "Wähle \"Digitale Unterschrift überprüfen\" zum überprüfen" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht bekommen." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Kann einen Teil einer mehrteiligen Nachricht nicht speichern." + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Speichern als" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Überschreiben" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "Überschreibe existierende Datei?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "MIME Betrachterbefehl ist ungültig: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "erstelle NNTP-Verbindung zu %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "NNTP-Verbindung mit %s:%d wurde aufgehoben. Erneut verbinden...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "Artikel %d wurde schon zwischengespeichert.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "empfange Artikel %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "kann Artikel %d nicht lesen\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "kann Artikel nicht senden.\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "kann Artikel %d nicht empfangen\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "kann die Gruppe: %s nicht setzen\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "ungültiger Artikelbereich: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "Keine neuen Artikel.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "bekomme Newsübersicht %d - %d in %s...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "kann Newsübersicht nicht bekommen\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "Fehler beim Empfang der Newsübersicht.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "ungültige Newsübersichtszeile: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "lösche Artikel %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tLösche alle zwischengespeicherten Artikel... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "keine Verbindung mit NNTP-Server: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "Protokollfehler: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "Protokollfehler\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "Fehler beim Senden\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "Mantra" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[keine Benutzer-ID]" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%sGeben Sie, bitte, das Mantra für:\n" +"\n" +" %.*s \n" +"(%.*s) an\n" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" +"Falsches Mantra! Nochmal...\n" +"\n" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "Fehler bei der Authentifizierung\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "Erforderlichen APOP-Zeitstempel in der Begrüßung nicht gefunden\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "Zeitstempel Syntax-Fehler in Begrüßung\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "POP3-Protokollfehler\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Lese Konfiguration...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "Gefunden %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Einlesen der Konfuguration beendet.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "konnte nicht in die Konfigurationsdatei schreiben\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Konfiguration wurde gespeichert.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Übernehmen" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Öffne Accounteinstellungenfenster...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Account%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Einstellungen eines neuen Accounts" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Einstellungen für jeden Account" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Erstelle Accounteinstellungenfenster...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Grundeinstellungen" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Empfangen" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Speziell" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Name dieses Accounts" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Standard" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Persönliche Informationen" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Vollständiger Name" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "E-Mail-Adresse" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organisation" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Serverdaten" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normal)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOP auth)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "News (NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Keiner (lokal)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "Newsserver" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Server zum Empfangen" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "SMTP-Server (senden)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "Benutzer-ID" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Kennwort" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Nachrichten vom Server nach Empfang löschen" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Empfange alle Nachrichten vom Server" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "Empfange von allen Accounts" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Nachrichten beim Empfang filtern" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Kopfzeilen" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Füge Datum in Kopfzeile ein" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Erzeuge Nachrichten-ID" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Füge benutzerdefinierte Kopfzeile ein" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr " Bearbeiten... " + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Setze automatisch folgende Adressen" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Antwort an" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "Beglaubigung" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "SMTP-Beglaubigung (SMTP AUTH)" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "Beglaubige mit POP3 vor dem Senden" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Datei mit Unterschrift" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "SMTP-Port angeben" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "POP3-Port angeben" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Domäne angeben" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "Keine E-Mail-Adresse angegeben." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "Keinen SMTP-Server angegeben." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "Keine Benutzer-ID angegeben." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "Keinen POP3-Server angegeben." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "Keinen IMAP4-Server angegeben." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "Keinen NNTP-Server angegeben." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Erstelle Allgemeine-Einstellungenfenster...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Allgemeine Einstellungen" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Anzeige" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filter" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "Privat" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Benutzerschnittstelle" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Weiteres" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Externes Programm" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Benutze externes Programm, um E-Mails zu empfangen" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "Programmpfad" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Lokale Mailboxdatei" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "Empfange aus lokaler Mailboxdatei" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Filtern beim Empfangen" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "lokales Mailboxverzeichnis" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Automatische Aktualisierung" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "alle" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "Minute(n)" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "Hole neue E-Mail beim Programmstart" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "News" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"Maximum an herunterzuladenten Artikeln\n" +"(0 angeben für unbegrenzt)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "Benutze externes Programm zum Senden" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "Gesendete Nachrichten in Outbox speichern" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "Nachrichten die nicht gesendet werden konnten, in Queue-Ablage" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Ausgehender Zeichensatz" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Automatisch" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7bit ascii (US-ASCII)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Western European (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "Central European (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltic (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltic (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "Greek (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "Turkish (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillic (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrillic (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrillic (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "Cyrillic (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japanese (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "Japanese (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "Japanese (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "Simplified Chinese (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "Traditional Chinese (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "Traditional Chinese (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "Chinese (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Korean (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Zitat" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "Zitiere Nachricht in der Antwort" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "Zitatzeichen" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Zitatformat:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " Beschreibung der Symbole " + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Füge Unterschrift automatisch hinzu" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Unterschriftentrenner" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "Zeilenumbruch nach" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "Zeichen" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "Zitat umbrechen" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "Zeilenumbruch vor dem Senden" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "Registrierte Regeln" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "Operationszeichen" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(nichts)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Stichwort" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Aussage" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "enthalten" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "nicht enthalten" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Ziel" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Benutze reguläre Ausdrücke" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "Nicht empfangen" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "Registrieren" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " Ersetzen " + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "Schriftart" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Nachricht" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "Zeige Anzahl der ungelesenen E-Mails nach Ablagenname" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Benutze Farben für Nachrichten" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Stelle 2-byte Alphabet und Zahlen mit 1-byte Zeichen dar" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "Zeige kurze Kopfzeilen in der Nachrichtenansicht" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Zeilenabstand" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "Pixel" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "Halte Abstand vom Anfang" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Übersetze Kopfzeilennamen (wie `Von:', `Betreff:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Zeige Empfänger in `Von'-Zeile, wenn Sie selbst der Sender sind" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "Benutze horizontalen Scrollbar" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr " Setze Einträge der Ablageninhaltsansicht... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "Nachrichten immer verschlüsseln" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "Nachrichten immer digital unterschreiben" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "Überprüfe digitale Unterschrift automatisch" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "Eingabe sperren, bei der Eingabe eines Mantra" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "Standard Schlüssel zum Unterschreiben" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" +"Emuliere das Verhalten der Maus eines\n" +"Emacs-Mail-Programmes" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Erste Nachricht anzeigen beim Öffnen einer Ablage" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "Wechsle zu Inbox nach dem Empfang neuer E-Mail" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "Sofort Ausführen beim Bewegen oder Löschen von Nachrichten" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"(Nachricht wird markiert bis zur Ausführung,\n" +" wenn das ausgeschaltet)" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "Benutze sanftest Scrollen in der Nachrichtenansicht" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "Scrollschritt" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "Beim Beenden" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Nachfragen beim Beenden" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "Leere Papierkorb beim Beenden" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "Fragen vor dem Leeren" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Externer Webbrowser (%s wird ersetzt durch URI)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "Befehl" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Drucken (%s wird durch Dateinamen ersetzt)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Externer Editor (%s wird durch Dateinamen ersetzt)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "Setze Nachrichtenfarbe" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "Farben" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "Zitierter Text - Erste Ebene" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "Zitierter Text - Zweite Ebene" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "Zitierter Text - Dritte Ebene" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "URI-Link" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "Stelle Zitatfarben wiederher" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "Wähle Farbe für Zitatebene 1" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "Wähle Farbe für Zitatebene 2" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "Wähle Farbe für Zitatebene 3" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "Wähle Farbe für URI" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "Beschreibung der Symbole" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"Datum\n" +"Von\n" +"Vollständiger Name des Absenders\n" +"Vorname des Absenders\n" +"Initialen des Absenders\n" +"Betreff\n" +"An\n" +"Nachrichten-ID\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Lese Filtereinstellungen...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "Schreibe Filtereinstellungen...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(Neue)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Ziel ist nicht gesetzt." + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Kopfzeilenname ist nicht gesetzt." + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "Lösche Regel" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "Wollen Sie wirklich diese Regel löschen?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Setze anzeigte Information" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Markiert" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Nummer" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Datum" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "Von" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Betreff" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "Schriftauswahl" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "SoMoDiMiDoFrSa" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Zeichensatzumsetzung fehlgeschlagen.\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "Daten im Zwischenspeicher sind falsch\n" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tKeine Zwischenspeicherdatei\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tLese Ablageninhaltsansichtszwischenspeicher..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "Zwischenspeicherversion ist unterschiedlich. Verwerfen.\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tMarkiere die Nachrichten..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d neue Nachricht(en)\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "Markierte Datei nicht gefunden.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "Markierte Version ist unterschiedlich (%d != %d). Verwerfe sie.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "Kann markierte Datei, zum Anhängen, nicht öffnen.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "Kann markierte Datei, zum Schreiben, nicht öffnen.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "Senden wartender Nachrichten fehlgeschlagen.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "Druck-Befehlszeile ist ungültig: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "Erstelle Fortschrittsdialog...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "Fehler beim Empfang von Daten.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "Kann nicht in Datei schreiben.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "Oops: digitale Unterschrift nicht verifiziert" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "Keine digitale Unterschrift gefunden" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "Gute digitale Unterschrift" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "SCHLECHTE digitale Unterschrift" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" +"Kein öffentlicher Schlüssel zum verifizieren der digitalen Unterschrift" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "Fehler beim Verifizieren der digitalen Unterschrift" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "Unterschiedliche Ergebnisse für Unterschriften" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "Fehler: unbekannter Status" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "Gute digitale Unterschrift von \"%s\"" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "SCHLECHTE digitale Unterschrift von \"%s\"" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "Finde keine User-ID für diesen Schlüssel." + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr " aka \"%s\"\n" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "Digitale Unterschrift von %s\n" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "Schlüssel Fingerprint: %s\n" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "Wähle Schlüssel" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "Wähle Schlüssel für: " + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "Schlüssel-ID" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "Val" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "Wählen" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "Kopfzeilen wartender Nachricht ist defekt.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "Account nicht gefunden. Benutze aktuellen Account...\n" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "Account nicht gefunden.\n" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Verbindung zu SMTP-Server: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "Keine Verbindung mit SMTP-Server: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "Fehler beim Senden von HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "Setze Mailbox" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"Zuerst muß der Ort der Mailbox gesetzt werden.\n" +"Sie können eine vorhandene Mailbox im MH-Format nutzen.\n" +"Wenn Sie sich nicht sicher sind, wählen Sie OK." + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "Erstelle Quellen-Fenster...\n" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "Nachrichtenquellen" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "Anzeige der Quellen von %s...\n" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - Quellen" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "Suchen" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Groß-/Kleinschreibung" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "Rückwärts suchen" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "Alle Treffer auswählen" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Leeren" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "Suche fehlgeschlagen" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "Gesuchte Zeichenkette nicht gefunden." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Anfang der Liste erreicht. Weiter vom Ende?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Ende der Liste erreicht. Weiter vom Anfang?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Suche beendet" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/_Verschieben..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/_Kopieren..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/_Ausführen" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/_Markieren" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/_Markieren/_Markieren" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/_Markieren/Markierung _entfernen" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/_Markieren/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/_Markieren/Markiere als _ungelesen" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/_Markieren/Markiere als _gelesen" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/An_twort" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/Antwort an a_lle" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/_Weiterleiten" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Weiterleiten als An_hang" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/Öffnen in _neuem Fenster" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/Zeige _Quellen" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/_Zeige alle Kopfzeilen" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/Wi_ederbearbeiten" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/_Drucken..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/A_lle auswählen" + +#: src/summaryview.c:320 +msgid "M" +msgstr "M" + +#: src/summaryview.c:320 +msgid "U" +msgstr "U" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Erstelle Ablageninhaltsansicht...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "Nr." + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Markierte verarbeiten" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Einige Markierungen sind übrig. Verarbeiten?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"leere Ablage\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Durchsuche Ablage (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "Fertig." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "Keine ungelesene Nachricht" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "Keine ungelesene Nachricht gefunden. Gehe zu nächster Ablage?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Ziehe Nachrichten nach Betreff an..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d gelöscht" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d verschoben" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "%s%d kopiert" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " Einträge gewählt" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d Neue, %d Ungelesene, %d Gesamt (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d Neue, %d Ungelesene, %d Gesamt" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Sortiere Ablagenansicht..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "" + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "" + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "Schreibe Ablagenansichtszwischenspeicher (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(Kein Datum)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Nachricht %d ist markiert.\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Nachricht %d ist markiert als gelesen\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Nachricht %d ist markiert als ungelesen\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Nachricht %s/%d ist zum Löschen markiert\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "Aktuelle Ablage ist Papierkorb." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Lösche mehrfach vorhandene Nachrichten..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Nachricht %s/%d ist nicht markiert.\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Nachricht %d ist markiert zum Verschieben nach %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "Ziel ist gleich der aktuellen Ablage." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "Nachricht %d ist markiert zum Kopieren nach %s\n" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "Kopierziel ist gleich der aktuellen Ablage." + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "Wähle alle Nachrichten..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Drucken" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Geben Sie den Druckbefehl ein:\n" +"(`%s' wird ersetzt durch den Dateinamen ersetzt)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"Druck-Befehlszeile ist ungültig:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "Erstelle Threads" + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "Hebe Threads auf" + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "Hebe Threads zur Ausführung auf" + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "filtere..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "Filtere..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "Gehe zu %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Erstelle Textansicht...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "Zum Speichern dieses Teiles, öffnen Sie das Kontextmenü mit der\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"rechten Maustaste und wählen `Speichern als...', oder drücken die " +"`j'-Taste.\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "Zum Anzeigen dieses Teiles der Nachricht als Text, wählen Sie\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`Darstellung als Text', oder drücken `t'-Taste.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "" +"Zum Öffnen dieses Teiles mit einem externen Programm, wählen Sie `Öffnen',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" +"oder Doppelclick, oder drücken Sie die mittlere Maustaste, oder `l'-Taste." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "Diese digitale Unterschrift wurde noch nicht geprüft.\n" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "Zum Überprüfen, öffnen Sie das Kontextmenü mit der\n" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" +"rechten Maustaste und wählen `Überprüfe digitale Signatur'.\n" +"\n" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "Schreiben in %s fehlgeschlagen.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "Datei kopieren von %s nach %s fehlgeschlagen.\n" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "Öffne-URI-Befehlszeile ist ungültig: `%s'" diff --git a/po/el.gmo b/po/el.gmo new file mode 100644 index 0000000000000000000000000000000000000000..f6ccb36dd84c295059caf364a7d5f87538f80e71 GIT binary patch literal 46832 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 literal 0 HcmV?d00001 diff --git a/po/el.po b/po/el.po new file mode 100644 index 000000000..f9a7135b6 --- /dev/null +++ b/po/el.po @@ -0,0 +1,3657 @@ +# Hellenic translation of Sylpheed +# Copyright (C) 2001 Free Software Foundation, Inc. +# Michalis Kabrianis <kabrianis@hellug.gr>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed 0.4.52\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-01-14 11:33+0200\n" +"Last-Translator: Michalis Kabrianis <kabrianis@hellug.gr>\n" +"Language-Team: Greek <nls@tux.hellug.gr>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-7\n" +"Content-Transfer-Encoding: 8-bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "Ó÷åôéêÜ" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"Ôá ôìÞìáôá êþäéêá ðïõ åöáñìüóèçêáí áðü ôï fetchmail åßíáé Copyright 1997 by " +"Eric S. Raymond. ÔìÞìáôá áõôïý åßíáé åðßóçò copyrighted by Carl Harris, 1993 " +"and 1995. Ôï Copyright ôçñåßôáé ãéá ôçí ðñïóôáóßá ôçò åëåýèåñçò áíáäéáíïìÞò " +"ôïõ êþäéêá\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"Ç õðïóôÞñéîç MD5 åßíáé copyright ôçò RSA Data Security, Inc. Äåßôå ôï " +"ó÷üëéï óôçí åðéêåöáëßäá ôïõ md5.c module ãéá ôïõò üñïõò ôçò Üäåéáò.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Áõôü ôï ðñüãñáììá åßíáé åëåýèåñï ëïãéóìéêü ìðïñåßôå íá ôï åðáíáäéáíåßìåôå " +"êáé/Þ íá ôï ôñïðïðïéÞóåôå õðü ôïõò üñïõò ôçò ÃåíéêÞò Äçìüóéáò ¶äåéáò " +"×ñÞóåùò Ëïãéóìéêïý GNU (GNU General Public Licence) üðùò áõôÞ äçìïóéåýôçêå " +"áðü ôï ºäñõìá Åëåýèåñïõ Ëïãéóìéêïý (Free Software Foundation), åßôå óôçí " +"Ýêäïóç 2, Þ (êáôÜ åðéëïãÞ óáò) ïðïéáäÞðïôå ìåôáãåíÝóôåñç Ýêäïóç.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Áõôü ôï ðñüãñáììá äéáíÝìåôáé ìå ôçí åëðßäá üôé èá åßíáé ÷ñÞóéìï, áëëÜ ×ÙÑÉÓ " +"ÊÁÌÉÁ ÅÃÃÛÇÓÇ; ÷ùñßò ïýôå Ýììåóç åããýçóç ËÅÉÔÏÕÑÃÉÊÏÔÇÔÁÓ Þ ÊÁÔÁËËÇËÏÔÇÔÁÓ " +"ÃÉÁ ÅÍÁ ÓÕÃÊÅÊÑÉÌÅÍÏ ÓÊÏÐÏ. Áíáöåñèåßôå óôï GNU General Public License ãéá " +"ðåñéóóüôåñåò ëåðôïìÝñåéåò.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Èá ðñÝðåé íá Ý÷åôå ëÜâåé Ýíá áíôßôõðï ôçò Üäåéáò áõôÞò ìáæß ìå áõôü ôï " +"ðñüãñáììá. ÅÜí ü÷é, ãñÜøôå óôï ºäñõìá Åëåýèåñïõ Ëïãéóìéêïý (Free Software " +"Foundation) óôç äéåýèõíóç Free Software Foundation, Inc., 59 Temple Place - " +"Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "ÅíôÜîåé" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "ÄéáâÜæù ôéò ñõèìßóåéò ãéá êÜèå ëïãáñéáóìü...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "ÂñÝèçêå ôáìðÝëá: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"ÌåñéêÜ ðáñÜèõñá óýíèåóçò ìçíýìáôïò åßíáé áíïé÷ôÜ.\n" +"Ðáñáêáëþ êëåßóôå üëá ôá ðáñÜèõñá óýíèåóçò ìçíýìáôïò ðñéí åðåîåñãáóôåßôå ôïõò " +"ëïãáñéóìïýò." + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Áíïßãù ôï ðáñÜèõñï åðåîåñãáóßáò ëïãáñéáóìïý...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Äçìéïõñãþ ôï ðáñÜèõñï åðåîåñãáóßáò ëïãáñéáóìïý...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Åðåîåñãáóßá ôùí ëïãáñéáóìþí" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "¼íïìá" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Ðñùôüêïëëï" + +#: src/account.c:382 +msgid "Server" +msgstr "ÅîõðçñÝôçò" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "ÐñïóèÞêç" + +#: src/account.c:407 +msgid "Edit" +msgstr "Åðåîåñãáóßá" + +#: src/account.c:413 +msgid " Delete " +msgstr " ÄéáãñáöÞ" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "ÊÜôù" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "ÐÜíù" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " ÈÝóå ùò óýíçèç ëïãáñéáóìü" + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Êëåßóéìï" + +#: src/account.c:498 +msgid "Delete account" +msgstr "ÄéáãñáöÞ ëïãáñéáóìïý" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "ÈÝëåôå ðñÜãìáôé íá äéáãñÜøåôå áõôü ôï ëïãáñéáóìü;" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Íáé" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+¼÷é" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/Áñ÷åßï" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/Áñ÷åßï/ÍÝá äéåýèõíóç" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/Áñ÷åßï/ÍÝá ïìÜäá" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/Áñ÷åßï/ÍÝïò êáôÜëïãïò" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/Áñ÷åßï/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/Áñ÷åßï/Åðåîåñãáóßá" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/Áñ÷åßï/ÄéáãñáöÞ" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/Áñ÷åßï/Êëåßóéìï" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/ÂïÞèåéá" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/ÂïÞèåéá/Ó÷åôéêÜ" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/ÍÝá äéåýèõíóç" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/ÍÝá ïìÜäá" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/ÍÝïò êáôÜëïãïò" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/Åðåîåñãáóßá" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/ÄéáãñáöÞ" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "Äéåýèõíóç e-mail" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Ó÷üëéá" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Ôçëåöùíéêüò êáôÜëïãïò" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "¼íïìá" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "ÄéáãñáöÞ" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "ÁíáæÞôçóç" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "Ðñïò:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "ÊïéíÝò äéåõèýíóåéò" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "ÐñïóùðéêÝò äéåõèýíóåéò" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "ÄéáãñáöÞ äéåýèõíóçò (äéåõèýíóåùí)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "ÐñÜãìáôé íá äéáãñÜøù ôçí (ôéò) äéåýèõíóç (äéåõèýíóåéò);" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "¼÷é" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "ÍÝïò êáôÜëïãïò" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "ÅéóÜãåôå ôï üíïìá ôïõ íÝïõ êáôáëüãïõ: " + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "ÍÝïòÊáôÜëïãïò" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Ôï üíïìá õðÜñ÷åé Þäç." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "ÍÝá ïìÜäá" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "ÅéóÜãåôå ôï üíïìá ôçò íÝáò ïìÜäáò:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "ÍÝáÏìÜäá" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Åðåîåñãáóßá ïìÜäáò" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "ÅéóÜãåôå ôï íÝï üíïìá ôçò ïìÜäáò:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Åðåîåñãáóßá êáôáëüãïõ" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "ÅéóÜãåôå ôï íÝï üíïìá ôïõ êáôáëüãïõ:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "ÐñÜãìáôé íá äéáãñÜøù ôï `%s' ;" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Åðåîåñãáóßá äéåýèõíóçò" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Äéåýèõíóç" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Áêýñùóç" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "ÄéáâÜæù ôï áñ÷åßï êáôáëüãïõ äéåõèýíóåùí..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s äåí õðÜñ÷åé.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "Ýãéíå.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "ÅîÜãù ôïí êáôÜëïãï äéåõèýíóåùí óå áñ÷åßï..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "áðÝôõ÷á íá ãñÜøù ôá äåäïìÝíá ôïõ êáôáëüãïõ äéåõèýíóåùí.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Óçìåßùóç" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Ðñïåéäïðïßçóç" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "ÓöÜëìá" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "ÄÇìéïõñãþ ôï äéÜëïãï alert panel...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "äåí ìðïñþ íá êáôáíåßìù ìíÞìç\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/ÐñïóèÞêç" + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/ÄéáãñáöÞ" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/Éäéüôçôåò..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/Áñ÷åßï/ÐñïóÜñôçóç áñ÷åßïõ" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/Áñ÷åßï/ÅéóáãùãÞ áñ÷åßïõ" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/Áñ÷åßï/ÅéóáãùãÞ õðïãñáöÞò" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/Åðåîåñãáóßá/Áíáßñåóç" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/Åðåîåñãáóßá/ÅðáíÜëçøç" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/Åðåîåñãáóßá/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/Åðåîåñãáóßá/ÊïðÞ" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/Åðåîåñãáóßá/ÁíôéãñáöÞ" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/Åðåîåñãáóßá/Åðéêüëëçóç" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/Åðåîåñãáóßá/ÅðéëïãÞ üëùí" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/Åðåîåñãáóßá/×þñéóå ìáêñéÝò ãñáììÝò" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/Åðåîåñãáóßá/Åðåîåñãáóßá ìå åîùôåñéêü ðñüãñáììá" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/ÌÞíõìá" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/ÌÞíõìá/ÁðïóôïëÞ" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/ÌÞíõìá/ÁðïóôïëÞ áñãüôåñá" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/ÌÞíõìá/ÁðïèÞêåõóç óôïí êáôÜëïãï ðñïó÷åäßùí" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/ÌÞíõìá/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/ÌÞíõìá/Ðñïò" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/ÌÞíõìá/Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/ÌÞíõìá/Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/ÌÞíõìá/ÁðÜíôçóç óå" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/ÌÞíõìá/ÓõíÝ÷åéá óå" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/ÌÞíõìá/ÐñïóÜñôçóç" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/Åñãáëåßá" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/Åñãáëåßá/ÅìöÜíéóç ÷Üñáêá" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/Åñãáëåßá/ÊáôÜëïãïò äéåõèýíóåùí" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "Äåí ìðïñþ íá äù ôï êïììÜôé êåéìÝíïõ\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: ôï áñ÷åßï äåí õðÜñ÷åé\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Áñ÷Þ ðñïùèçìÝíïõ ìçíýìáôïò:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Ôï áñ÷åßï %s äåí õðÜñ÷åé\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Äåí ìðïñþ íá âñù ôï ìÝãåèïò ôïõ áñ÷åßïõ %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Ôï áñ÷åßï %s åßíáé Üäåéï\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "ÌÞíõìá: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [ÔñïðïðïéçìÝíï]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - Óýíèåóç ìçíýìáôïò" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Óýíèåóç ìçíýìáôïò" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Ï ðáñáëÞðôçò äåí Ý÷åé ïñéóôåß." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "äåí ìðïñþ íá ðÜñù ôçí ëßóôá ðáñáëçðôþí" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"Ï ëïãáñéáóìüò ãéá áðïóôïëÞ ìçíýìáôïò äåí Ý÷åé ïñéóôåß.\n" +"Ðáñáêáëþ åðéëÝîôå Ýíá ëïãáñéáóìü ðñéí óôåßëåôå." + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "ÓöÜëìá óõíÝâç êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò óå %s ." + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "ÂÜæù óôçí ïõñÜ" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"ÓöÜëìá óõíÝâç êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò.\n" +"Íá âÜëù ôï ìÞíõìá óôïí êáôÜëïãï ïõñÜò;" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Äåí ìðïñþ íá âÜëù óôçí ïõñÜ ôï ìÞíõìá." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "ÓöÜëìá óõíÝâç êáôÜ ôçí áðïóôïëÞ ôïõ ìçíýìáôïò." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Äåí ìðïñþ íá áðïèçêåýóù ôï ìÞíõìá óôï outbox." + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "äåí ìðïñþ íá áëëÜîù ôï mode ôïõ áñ÷åßïõ\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "Äåí ìðïñþ íá áëëÜîù ôï êùäéêïóýíïëï ôïõ ìçíýìáôïò." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "äåí ìðïñþ íá ãñÜøù ôçí åðéêåöáëßäá\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "áðïèÞêåõóç óôáëìÝíïõ ìçíýìáôïò...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "äåí ìðïñþ íá áðïèçêåýóù ôï ìÞíõìá\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "äåí ìðïñþ íá áíïßîù ôï áñ÷åßï mark\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "âÜæù ôï ìÞíõìá óôçí ïõñÜ...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "äåí ìðïñþ íá âÜëù ôï ìÞíõìá óôçí ïõñÜ\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Äåí ìðïñþ íá áíïßîù ôï áñ÷åßï %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "generated Message-ID: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "ôýðïò MIME" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "ÌÝãåèïò" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Äçìéïõñãþ ôï ðáñÜèõñï óýíèåóçò...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "Áðü:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "ÁðïóôïëÞ" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "ÁðïóôïëÞ ìçíýìáôïò" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "ÁðïóôïëÞ áñãüôåñá" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "ÔïðïèÝôçóç óôïí êáôÜëïãï ïõñÜò êáé áðïóôïëÞ áñãüôåñá" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Ðñïó÷Ýäéï" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "ÁðïèÞêåõóç óôïí êáôÜëïãï ðñïó÷åäßùí" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "ÅéóáãùãÞ" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "ÅéóáãùãÞ áñ÷åßïõ" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "ÐñïóÜñôçóç" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "ÐñïóÜñôçóç áñ÷åßïõ" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "YðïãñáöÞ" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "ÅéóáãùãÞ õðïãñáöÞò" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "ÓõíèÝôçò" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Åðåîåñãáóßá ìå åîùôåñéêü ðñüãñáììá" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "Ôýëéîç ãñáììÞò" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "×þñéóå ìáêñéÝò ãñáììÝò" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Ìç Ýãêõñïò ôýðïò MIME" + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Ôï áñ÷åßï äåí õðÜñ÷åé, Þ åßíáé Üäåéï." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Éäéüôçôåò" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Êùäéêïðïßçóç" + +#: src/compose.c:3065 +msgid "Path" +msgstr "ÄéÜäñïìïò" + +#: src/compose.c:3066 +msgid "File name" +msgstr "¼íïìá áñ÷åßïõ" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "Ç åíôïëÞ ãéá ôï åîùôåñéêü ðñüãñáììá äåí åßíáé Ýãêõñç: `%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Ðñïóùñéíü áñ÷åßï: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Äåí ìðüñåóá íá ãñÜøù óôï áñ÷åßï\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Áðïôõ÷ßá áíÜãíùóçò áðü ôï pipe\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "äåí ìðïñþ íá áöáéñÝóù ôï ðáëéü ðñïó÷Ýäéï\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "ÅðÝëåîå áñ÷åßï" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "ÁðÝññéøå ôï ìÞíõìá" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Áõôü ôï ìÞíõìá Ý÷åé ôñïðïðïéçèåß, íá ôï áðïññßøù;" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Áðüññéøç" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "óôá ðñïó÷Ýäéá" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "ÅðÝëåîå êáôÜëïãï" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/Äçìéïõñãßá íÝïõ êáôáëüãïõ..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/Ìåôïíïìáóßá êáôáëüãïõ..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/ÄéáãñáöÞ êáôáëüãïõ" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/ÄéáãñáöÞ IMAP4 server" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/ÓõíäñïìÞ óå newsgroup..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/ÄéáãñáöÞ newsgroup" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/ÄéáãñáöÞ news server" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "ÊáôÜëïãïò" + +#: src/folderview.c:234 +msgid "New" +msgstr "ÍÝï" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Ìç äéáâáóìÝíï" + +#: src/folderview.c:235 +msgid "#" +msgstr "áñ." + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Äçìéïõñãþ ôçí áðåéêüíéóç êáôáëüãùí...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "ÈÝôù ôéò ðëçñïöïñßåò êáôáëüãùí...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "ÈÝôù ôéò ðëçñïöïñßåò êáôáëüãùí..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "" + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "" + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "" + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "ÏõñÜ" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Trash" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Ï êáôÜëïãïò %s åßíáé åðéëåãìÝíïò\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "ôï `%c' äåí ìðïñåß íá óõìðåñéëáìâÜíåôáé óå üíïìá êáôáëüãïõ." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "Ï êáôÜëïãïò `%s' õðÜñ÷åé Þäç." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Äþóôå íÝï üíïìá ãéá `%s':" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Ìåôïíïìáóßá êáôáëüãïõ" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"¼ëïé ïé êáôÜëïãïé êáé ôá ìçíýìáôá êÜôù áðü ôï `%s' èá äéáãñáöïýí.\n" +"ÈÝëåôå ðñÜãìáôé íá äéáãñÜøåôå;" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "ÄéáãñáöÞ êáôáëüãïõ" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "äåí ìðïñþ íá áöáéñÝóù ôïí êáôÜëïãï `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "Áöáßñåóç êáôáëüãïõ" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "ÐñÜãìáôé íá äéáãñáöåß ï êáôÜëïãïò `%s';" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "ÐñÜãìáôé íá äéáãñáöåß ï IMAP4 server `%s';" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "ÄéáãñáöÞ IMAP4 server" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "ÓõíäñïìÞ óôï newsgroup" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "ÅéóÜãåôå ôï newsgroup óôï ïðïßï åããñÜöåóôå:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "Ôï newsgroup `%s' õðÜñ÷åé Þäç." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "ÐñÜãìáôé íá äéáãñáöåß ôï newsgroup `%s';" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "ÄéáãñáöÞ newsgroup" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "ÐñÜãìáôé íá äéáãñáöåß ï news server `%s';" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "ÄéáãñáöÞ news server" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Áâãäåæ" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Newsgroups:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "ÈÝìá:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Äçìéïõñãþ ôçí áðåéêüíéóç åðéêåöáëßäáò...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(×ùñßò áðïóôïëÝá)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(×ùñßò ÈÝìá)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Äçìéïõñãþ ôï ðáñÜèõñï åðéêåöáëßäáò...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "¼ëåò ïé åðéêåöáëßäåò" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "ÅìöÜíéóç ôçò åðéêåöáëßäáò ôïõ %s ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - ¼ëåò ïé åðéêåöáëßäåò" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Äçìéïõñãþ áðåéêüíéóç åéêüíáò...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Äåí ìðïñþ íá öïñôþóù ôçí åéêüíá." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "Ç IMAP4 óýíäåóç óôï %s:%d äéáêüðçêå. Åðáíáóýíäåóç...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "äçìéïõñãßá IMAP4 óýíäåóçò óôï %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "ëáìâÜíù ôï ìÞíõìá %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "ï êáôÜëïãïò áöåôçñßáò åßíáé ßäéïò ìå ôïí êáôÜëïãï ðñïïñéóìïý.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Ìåôáêéíþ ôï ìÞíõìá %s%c%d óôï %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "äéáãñÜöù ôï ìÞíõìá %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "" + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí IMAP4 server: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "Ç åßóïäïò óôï IMAP4 áðÝôõ÷å.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "ÅéóáãùãÞ" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "ÅéóÜãù áñ÷åßï:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "ÊáôÜëïãïò ðñïïñéóìïý:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "ÅðÝëåîå... " + +#: src/import.c:201 +msgid "Select importing file" +msgstr "ÅðÝëåîå áñ÷åßï åéóáãùãÞò" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "ËáìâÜíù ôá íÝá ìçíýìáôá" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Äþóå ôïí êùäéêü" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "ëáìâÜíù íÝá ìçíýìáôá ôïõ ëïãáñéáóìïý %s...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: ËáìâÜíù ôá íÝá ìçíýìáôá" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "ÓõíäÝïìáé óôïí POP3 server: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí POP3 server: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí POP3 server: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Åîáêñéâþíù" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "ËáìâÜíù ôïí áñéèìü ôùí íÝùí ìçíõìÜôùí" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "ËáìâÜíù ôï ìÞíõìá (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "ÄéáãñÜöù ôï ìÞíõìá" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Åãêáôáëåßðù" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "Ýíá ìÞíõìá äåí èá ðáñáëçöèåß\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "¸íá óöÜëìá óõíÝâç êáèþò åðåîåñãÜæïìáé mail." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "Äåí õðÜñ÷åé Üëëïò ÷þñïò óôï äßóêï." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "äåí õðÜñ÷ïõí ìçíýìáôá óôï ôïðéêü mailbox.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "ËáìâÜíù íÝá ìçíýìáôá áðü ôï %s óôï %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Êëåßíù ôï ðáñÜèõñï êáôáãñáöÞò...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "ÊáôáãñáöÞ ðñùôïêüëëïõ" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Ôï áñ÷åßï `%s' õðÜñ÷åé Þäç.\n" +"Äåí ìðïñþ íá äçìéïõñãÞóù ôïí êáôÜëïãï." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "ôï g_thread äåí õðïóôçñßæåôáé áðü ôçí glib.\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/Áñ÷åßï/ÐñïóèÞêç mailbox..." + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/Áñ÷åßï/Update folder tree" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/Áñ÷åßï/ÅéóáãùãÞ áñ÷åßïõ mbox..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/Áñ÷åßï/ÁðïèÞêåõóç ùò..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/Áñ÷åßï/Åêôýðùóç..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/Áñ÷åßï/¸îïäïò" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/Åðåîåñãáóßá/ÁíáæÞôçóç" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/Áðåéêüíéóç" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/Áðåéêüíéóç/ÄÝíôñï êáôáëüãùí" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/Áðåéêüíéóç/Áðåéêüíéóç ìçíõìÜôïò" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/Áðåéêüíéóç/ÌðÜñá åñãáëåßùí" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/Áðåéêüíéóç/ÌðÜñá åñãáëåßùí/Åéêüíåò êáé êåßìåíï" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/Áðåéêüíéóç/ÌðÜñá åñãáëåßùí/Åéêüíåò" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/Áðåéêüíéóç/ÌðÜñá åñãáëåßùí/Êåßìåíï" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/Áðåéêüíéóç/ÌðÜñá åñãáëåßùí/Íá ìçí åìöáíßæåôáé" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/Áðåéêüíéóç/ÌðÜñá êáôÜóôáóçò" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/Áðåéêüíéóç/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/Áðåéêüíéóç/Îå÷ùñéóôü äÝíôñï êáôáëüãùí" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/Áðåéêüíéóç/Îå÷ùñéóôÞ áðåéêüíéóç ìçíýìáôïò" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Áõôüìáôç áíáãíþñéóç" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/7bit ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÄõôéêÞò Åõñþðçò (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÊåíôñéêÞò Åõñþðçò (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÂáëôéêÞò (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÂáëôéêÞò (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Åëëçíéêü (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Ôïõñêéêü (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êõñéëëéêü (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êõñéëëéêü (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êõñéëëéêü (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÉáðùíÝæéêï (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÁðëïðïéçìÝíï Êéíåæéêü (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Ðáñáäïóéáêü Êéíåæéêü (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Ðáñáäïóéáêü Êéíåæéêü (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/Êéíåæéêü (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÊïñåÜôéêï (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/Áðåéêüíéóç/Êùäéêïóýíïëï/ÊïñåÜôéêï (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/ÌÞíõìá/ËÞøç íÝùí ìçíõìÜôùí" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/ÌÞíõìá/ËÞøç áðü üëïõò ôïõò ëïãáñéáóìïýò" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/ÌÞíõìá/ÁðïóôïëÞ ìçíõìÜôùí áðü ôçí ïõñÜ" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/ÌÞíõìá/Óýíèåóç íÝïõ ìçíýìáôïò" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/ÌÞíõìá/ÁðÜíôçóç" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/ÌÞíõìá/ÁðÜíôçóç óå üëïõò" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/ÌÞíõìá/Ðñïþèçóç" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/ÌÞíõìá/Ðñïþèçóç óáí ðñïóÜñôçóç" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/ÌÞíõìá/Ìåôáêßíçóç..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/ÌÞíõìá/ÄéáãñáöÞ" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/ÌÞíõìá/ÓÞìáíóç" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/MÞíõìá/ÓÞìáíóç/Áíáßñåóç óÞìáíóçò" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/MÞíõìá/ÓÞìáíóç/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç ùò áäéÜâáóôï" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/MÞíõìá/ÓÞìáíóç/ÓÞìáíóç ùò äéáâáóìÝíï" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/ÌÞíõìá/¶íïéãìá óå íÝï ðáñÜèõñï" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/ÌÞíõìá/ÅìöÜíéóç üëçò ôçò åðéêåöáëßäáò" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/ÌÞíõìá/Åðáí-åðåîåñãáóßá" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/Ðåñßëçøç" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/Ðåñßëçøç/ÄéáãñáöÞ äéðëþí ìçíõìÜôùí" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/Ðåñßëçøç/ÖéëôñÜñéóìá ìçíõìÜôùí" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/Ðåñßëçøç/ÅêôÝëåóç åñãáóéþí" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/Ðåñßëçøç/ÅíçìÝñùóç" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/Ðåñßëçøç/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/Ðåñßëçøç/Ðñïçãïýìåíï ìÞíõìá" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/Ðåñßëçøç/Åðüìåíï ìÞíõìá" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/Ðåñßëçøç/Åðüìåíï áäéÜâáóôï ìÞíõìá" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/Ðåñßëçøç/ÐÞãáéíå óå Üëëï êáôÜëïãï" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ áñéèìü" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ ìÝãåèïò" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ çìåñïìçíßá" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ áðïóôïëÝá" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/Ôáîéíüìçóç êáôÜ èÝìá" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/Ðåñßëçøç/Ôáîéíüìçóç/_Attract by subject" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/Ðåñßëçøç/ÍçìáôéêÞ áðåéêüíéóç" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/Ðåñßëçøç/Unt_hread view" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/Ðåñßëçøç/Set display _item..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/Åñãáëåßá/ÐáñÜèõñï êáôáãñáöÞò" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/Ñõèìßóåéò" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/Ñõèìßóåéò/ÊïéíÝò åðéëïãÝò..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/Ñõèìßóåéò/ÅðéëïãÝò áíÜ ëïãáñéáóìü..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/Ñõèìßóåéò/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/Ñõèìßóåéò/Äçìéïõñãßá íÝïõ ëïãáñéáóìïý..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/Ñõèìßóåéò/Åðåîåñãáóßá ëïãáñéáóìþí..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/Ñõèìßóåéò/ÁëëáãÞ ôñÝ÷ïíôïò ëïãáñéáóìïý" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/ÂïÞèåéá/_Manual" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/ÂïÞèåéá/_Manual/Áããëéêü" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/ÂïÞèåéá/_Manual/ÉáðùíÝæéêï" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/ÂïÞèåéá/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Äçìéïõñãþ ôï êõñßùò ðáñÜèõñï...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "MainWindow: ç êáôáíïìÞ ÷ñùìÜôùí %d áðÝôõ÷å\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "×ùñßò ôßôëï" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "êáíÝíá" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "ÔñÝ÷ïí ëïãáñéáóìüò: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "ÈÝóç ðáñáèýñïõ: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "ÐñïóèÞêç mailbox" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "Ôï mailbox `%s' õðÜñ÷åé Þäç" + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Mailbox" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"Ç äçìéïõñãßá ôïõ mailbox áðÝôõ÷å.\n" +"ºóùò êÜðïéá áñ÷åßá íá õðÜñ÷ïõí Þäç, Þ äåí Ý÷åôå äéêáßùìá íá ãñÜøåôå åêåß." + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "" + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "ËÞøç" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "ËÞøç íÝïõ mail" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "ËÞøç üëùí" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "ËÞøç íÝïõ mail áðü üëïõò ôïõò ëïãáñéáóìïýò" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "ÁðïóôïëÞ üëùí ôùí ìçíõìÜôùí áðü ôçí ïõñÜ" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Óýíèåóç" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Óýíèåóç íÝïõ ìçíýìáôïò" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "ÁðÜíôçóç" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "ÁðÜíôçóç óôï ìÞíõìá" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "ÁðÜíôçóç ðñïò üëïõò" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "ÁðÜíôçóç ðñïò üëïõò" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Ðñïþèçóç" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Ðñïþèçóç ôïõ ìçíýìáôïò" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "ÄéáãñáöÞ ôïõ ìçíýìáôïò" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "ÅêôÝëåóç åñãáóéþí" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "ÅêôÝëåóç ôçò óçìåéùìÝíçò äéáäéêáóßáò" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "Åðüìåíï" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Åðüìåíï áäéÜâáóôï ìÞíõìá" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "ÅðéëïãÝò" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "ÊïéíÝò ÅðéëïãÝò" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Ëïãáñéáóìüò" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Ñõèìßóåéò ëïãáñéáóìïý" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "¸îïäïò" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "¸îïäïò áðü áõôü ôï ðñüãñáììá;" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Ç áðïóôïëÞ ìçíõìÜôùí ïõñÜò áðÝôõ÷å." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "åðéâëçèåßóá êùäéêïóåëßäá: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "ËáìâÜíù ôá ìçíýìáôá áðü ôï %s óôï %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "äåí ìðïñþ íá äéáâÜóù ôï áñ÷åßï mbox.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "ìç Ýãêõñç ìïñöïðïßçóç mbox: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "êáêþò ìïñöïðïéçìÝíï mbox: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "äåí ìðïñþ íá áíïßîù ôï ðñïóùñéíü áñ÷åßï\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "äåí ìðïñþ íá ãñÜøù óôï ðñïóùñéíü áñ÷åßï\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "ÂñÝèçêáí %d ìçíýìáôá.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "äåí ìðïñþ íá äçìéïõñãÞóù ôï áñ÷åßï lock %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "÷ñçóéìïðïéÞóôå ôçí 'flock' áíôß ãéá ôçí 'file' áí åßíáé äõíáôüí.\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "äåí ìðïñþ íá äçìéïõñãÞóù %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "ôï mailbox ÷ñçóéìïðïéåßôáé áðü Üëëç äéåñãáóßá, ðåñéìÝíù...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Äçìéïõñãþ áðåéêüíéóç ìçíýìáôïò...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "äåí ìðïñþ íá áíôéãñÜøù ôï ìÞíõìá %s óôï %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Äåí ìðïñþ íá áíïßîù óçìåéùìÝíï áñ÷åßï.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "" + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Ôåëåõôáßïò áñéèìüò óôïí êáôÜëïãï %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "" + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "" + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/¶íïéãìá" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/ÅìöÜíéóç óáí êåßìåíï" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/ÁðïèÞêåõóç ùò..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "Ôýðïò MIME" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Äçìéïõñãßá áðåéêüíéóçò MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Äåí ìðïñþ íá ëÜâù ôï ôìÞìá ôïõ ðïëõôìçìáôéêïý ìçíýìáôïò" + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Äåí ìðïñþ íá áðïèçêåýóù ôï ôìÞìá ôïõ ðïëõôìçìáôéêïý ìçíýìáôïò" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "ÁðïèÞêåõóç ùò" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "ÅããñáöÞ áðü ðÜíù" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "ÅããñáöÞ ðÜíù áðü ôï õðÜñ÷ïí áñ÷åßï;" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "Ç ãñáììÞ åíôïëÞò ãéá áðåéêüíéóç MIME åßíáé ìç Ýãêõñç: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "äçìéïõñãþ NNTP óýíäåóç óôï %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "Ç NNTP óýíäåóç óôï %s:%d äéáêüðçêå. Åðáíáóýíäåóç...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "ëáìâÜíù ôï Üñèñï %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "äåí ìðïñþ íá äéáâÜóù ôï Üñèñï %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "äåí ìðïñþ íá óôåßëù ôï Üñèñï.\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "äåí ìðïñþ íá ëÜâù ôï Üñèñï %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "ìç Ýãêõñç áêïëïõèßá Üñèñùí: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "äåí õðÜñ÷ïõí íÝá Üñèñá.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "" + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí NNTP server: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "óöÜëìá ðñùôïêüëëïõ: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "óöÜëìá ðñùôïêüëëïõ\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "ÐñïÝêõøå óöÜëìá êáôÜ ôçí áðïóôïëÞ\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "ÐñïÝêõøå óöÜëìá óôçí åîáêñßâùóç\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "ÓöÜëìá ðñùôïêüëëïõ POP3\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "ÄéáâÜæù ôéò ñõèìßóåéò...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "ÂñÝèçêå %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Ôåëåßùóá ôï äéÜâáóìá ôùí ñõèìßóåùí.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "áðÝôõ÷á íá ãñÜøù ôéò ñõèìßóåéò óôï áñ÷åßï\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Ïé ñõèìßóåéò áðïèçêåýôçêáí.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "ÅöáñìïãÞ" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Áíïßãù ôï ðáñÜèõñï åðéëïãþí ôùí ëïãáñéáóìþí...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Ëïãáñéáóìüò%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "ÅðéëïãÝò ãéá ôï íÝï ëïãáñéáóìü" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "ÅðéëïãÝò ãéá êÜèå ëïãáñéáóìü" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Äçìéïõñãþ ôï ðáñÜèõñï åðéëïãþí ôïõ ëïãáñéáóìïý...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "ÂáóéêÜ" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "ËÞøç" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Ðñï÷ùñçìÝíá" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "¼íïìá ôïõ ëïãáñéáóìïý" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "ÓõíÞèùò ÷ñçóéìïðïéïýìåíïò" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "ÐñïóùðéêÝò ðëçñïöïñßåò" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "ÐëÞñåò üíïìá" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "Äéåýèõíóç mail" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Ïñãáíéóìüò" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Ðëçñïöïñßåò åîõðçñÝôç" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Ôßðïôá (ôïðéêü)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "ÅîõðçñÝôçò news" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "ÅîõðçñÝôçò ãéá ëÞøç" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "ÅîõðçñÝôçò SMTP (áðïóôïëÞ)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "¼íïìá ÷ñÞóôç" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Êùäéêüò" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "ÄéáãñáöÞ ìçíõìÜôùí áðü ôïí åîõðçñÝôç üôáí ðáñáëçöèïýí" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "ËÞøç üëùí ôùí ìçíõìÜôùí óôïí åîõðçñÝôç" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "ÖéëôñÜñéóìá ìçíõìÜôùí êáôÜ ôçí ëÞøç" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Åðéêåöáëßäá" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "ÐñïóèÞêç ðåäßïõ çìåñïìçíßáò óôçí åðéêåöáëßäá" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Äçìéïõñãßá Message-ID" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "ÐñïóèÞêç åðéêåöáëßäáò ïñéóìÝíçò áðü ôïí ÷ñÞóôç" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "Åðåîåñãáóßá..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Áõôüìáôá èÝóå áõôÝò ôéò äéåõèýíóåéò" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "ÁðÜíôçóç óå" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Áñ÷åßï õðïãñáöÞò" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Ðñïóäéüñéóå ôçí SMTP èýñá" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Ðñïóäéüñéóå ôçí POP3 èýñá" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Ðñïóäéüñéóå ôï üíïìá ôïõ domain" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "Ç äéåýèõíóç mail äåí Ý÷åé ôåèåß." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "Ï åîõðçñÝôçò SMTP äåí Ý÷åé ôåèåß." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "Ôï üíïìá ÷ñÞóôç äåí Ý÷åé ôåèåß." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "Ï åîõðçñÝôçò POP3 äåí Ý÷åé ôåèåß." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "Ï åîõðçñÝôçò IMAP4 äåí Ý÷åé ôåèåß." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "Ï åîõðçñÝôçò NNTP äåí Ý÷åé ôåèåß." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Äçìéïõñãßá ðáñáèýñïõ êïéíþí åðéëïãþí...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "ÊïéíÝò åðéëïãÝò" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "ÅìöÜíéóç" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "ÖéëôñÜñéóìá" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "ÄéåðáöÞ" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "¶ëëá" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Åîùôåñéêü ðñüãñáììá" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "×ñçóéìïðïßçóå åîùôåñéêü ðñüãñáììá ãéá ëÞøç ìçíõìÜôùí" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "ÄéáäñïìÞ ðñïãñÜììáôïò" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "ÖéëôñÜñéóìá êáôÜ ôç ëÞøç" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Áõôüìáôïò Ýëåã÷ïò ãéá íÝá mail" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "êÜèå" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "ëåðôÜ" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "¸ëåã÷ïò ãéá íÝï mail óôçí áñ÷Þ" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "ÍÝá" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"ÌÝãéóôïò áñéèìüò Üñèñùí ðïõ èá ëçöèïýí\n" +"(÷ùñßò üñéï áí èÝóåôå 0)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "×ñçóéìïðïßçóå åîùôåñéêü ðñüãñáììá ãéá áðïóôïëÞ" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "ÁðïèÞêåõóç ôïõ óôáëìÝíïõ ìçíýìáôïò óôï outbox" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "ÔïðïèÝôçóç óôçí ïõñÜ ôïõ ìçíýìáôïò ðïõ áðÝôõ÷å íá áðïóôáëåß" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Êùäéêïóåëßäá åîåñ÷ïìÝíùí" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Áõôüìáôç" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "ÄõôéêÞò Åõñþðçò (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "ÊåíôñéêÞs Åõñþðçò (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "ÂáëôéêÞò (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "ÂáëôéêÞò (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "ÅëëçíéêÞ (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "ÔïõñêéêÞ (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "ÊõñéëëéêÞ (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "ÊõñéëëéêÞ (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "ÊõñéëëéêÞ (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "ÊõñéëëéêÞ (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "ÉáðùíÝæéêç (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "ÉáðùíÝæéêç (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "ÉáðùíÝæéêç (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "ÁðëïðïéçìÝíç ÊéíåæéêÞ (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "ÐáñáäïóéáêÞ ÊéíåæéêÞ (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "ÐáñáäïóéáêÞ ÊéíåæéêÞ (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "ÊéíåæéêÞ (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "ÊïñåáôéêÞ (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " ÐåñéãñáöÞ óõìâüëùí" + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Áõôüìáôç åéóáãùãÞ õðïãñáöÞò" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Äéá÷ùñéóìüò õðïãñáöÞò" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "Ôýëéîç ìçíõìÜôùí óôïõò" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "÷áñáêôÞñåò" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(êáíÝíá)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "ËÝîç-êëåéäß" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "ðåñéÝ÷åé" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "äåí ðåñéÝ÷åé" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Ðñïïñéóìüò" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "×ñÞóç regex" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "Ìçí ðáñáëÜâåéò" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " ÁíôéêáôÜóôáóç" + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "ÃñáììáôïóåéñÜ" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "ÌÞíõìá" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "ÅìöÜíéóç áñéèìïý áäéÜâáóôùí äßðëá óôï üíïìá ôïõ êáôáëüãïõ" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Åíåñãïðïßçóç ÷ñùìáôéóìïý ôùí ìçíõìÜôùí" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "ÅìöÜíéóç âñá÷åßáò åðéêåöáëßäáò óôçí áðåéêüíéóç ìçíýìáôïò" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "" +"ÌåôÝöñáóå ôá ïíüìáôá ôùí ðåäßùí ôçò åðéêåöáëßäáò (üðùò ôï `From:' óå `Áðü')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "" +"ÅìöÜíéóç ôïõ ðáñáëÞðôç óôçí óôÞëç `ÁðïóôïëÝá' áí ï áðïóôïëÝáò åßóáé åóý" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr "" + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "¶íïéîå ôï ðñþôï áäéÜâáóôï ìÞíõìá üôáí ìðáßíåéò óå Ýíá êáôÜëïãï" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "ÊáôÜ ôçí Ýîïäï" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Åðéâåâáßùóå ôçí Ýîïäï" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Åîùôåñéêüò Web browser (ôï %s èá áíôéêáôáóôáèåß ìå ôï URI)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "ÅíôïëÞ" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Åêôýðùóç (ôï %s èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "" +"Åîùôåñéêüò ðñüãñáììá óýíèåóçò (ôï %s èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "ÐåñéãñáöÞ ôùí óõìâüëùí" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"Çìåñïìçíßá\n" +"Áðü\n" +"ÐëÞñåò üíïìá ôïõ áðïóôïëÝá\n" +"Ìéêñü üíïìá ôïõ áðïóôïëÝá\n" +"Áñ÷éêÜ ôïõ áðïóôïëÝá\n" +"ÈÝìá\n" +"Ðñïò\n" +"Message-ID\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "ÄéáâÜæù ôéò ñõèìßóåéò ôùí ößëôñùí...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "ÃñÜöù ôéò ñõèìßóåéò ôùí ößëôñùí...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(ÍÝï)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Ï ðñïïñéóìüò äåí Ý÷åé ôåèåß." + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "ÄéáãñáöÞ êáíüíá" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "ÈÝëåéò ðñÜãìáôé íá äéáãñÜøåéò áõôü ôïí êáíüíá?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "ÓÞìáíóç" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Áñéèìüò" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Çìåñïìçíßá" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "Áðü" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "ÈÝìá" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "ÅðéëïãÞ ãñáììáôïóåéñÜò" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "ÊõÄåÔñÔåÐåÐáÓá" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Ç ìåôáôñïðÞ ôïõ êþäéêá áðÝôõ÷å.\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "" + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tÓçìåéþíù ôá ìçíýìáôá..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d íÝá ìçíýìáôá\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "ÁðïóôïëÞ ìçíõìÜôùí ïõñÜò áðÝôõ÷å.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "Ç ãñáììÞ åíôïëÞò åêôýðùóçò åßíáé Üêõñç: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "ðñïÝêõøå óöÜëìá êáôÜ ôçí ëÞøç äåäïìÝíùí.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "Äåí ìðïñþ íá ãñÜøù óå áñ÷åßï.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Óýíäåóç óôçí åîõðçñÝôç SMTP: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "Äåí ìðïñþ íá óõíäåèþ óôïí åîõðçñÝôç SMTP: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "ÐñïÝêõøå óöÜëìá êáôÜ ôçí áðïóôïëÞ HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "ÁíáæÞôçóç" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "ÁíáæÞôçóç ðñïò ôá ðßóù" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "Ç áíáæÞôçóç áðÝôõ÷å" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "Ôï êåßìåíï áíáæÞôçóçò äåí âñÝèçêå." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "¸öôáóá ôçí áñ÷Þ ôçò ëßóôáò. Íá óõíå÷ßóù áðü ôï ôÝëïò;" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "¸öôáóá ôï ôÝëïò ôçò ëßóôáò. Íá óõíå÷ßóù áðü ôçí áñ÷Þ;" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Ç áíáæÞôçóç ôåëåßùóå" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/Ìåôáêßíçóç..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/ÁíôéãñáöÞ..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/ÅêôÝëåóç åñãáóéþí" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/ÓÞìáíóç" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/ÓÞìáíóç/ÓÞìáíóç" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/ÓÞìáíóç/Áíáßñåóç óÞìáíóçò" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/ÓÞìáíóç/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/ÓÞìáíóç/ÓÞìáíóç ùò áäéÜâáóôï" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/ÓÞìáíóç/ÓÞìáíóç ùò äéáâáóìÝíï" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/ÁðÜíôçóç" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/ÁðÜíôçóç ðñïò üëïõò" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/Ðñïþèçóç" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Ðñïþèçóç ùò ðñïóÜñôçóç" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/¶íïéãìá óå íÝï ðáñÜèõñï" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/ÅìöÜíéóç ôçò ðëÞñïõò åðéêåöáëßäáò" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/Åðáí-åðåîåñãáóßá" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/Åêôýðùóç..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/ÅðéëïãÞ üëùí" + +#: src/summaryview.c:320 +msgid "M" +msgstr "" + +#: src/summaryview.c:320 +msgid "U" +msgstr "" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Äçìéïõñãßá áðåéêüíéóçò ðåñßëçøçò...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"Üäåéïò êáôÜëïãïò\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "" + +#: src/summaryview.c:673 +msgid "done." +msgstr "" + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "Äåí õðÜñ÷ïõí áäéÜâáóôá ìçíýìáôá" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "Äåí âñÝèçêáí áäéÜâáóôá ìçíýìáôá. Íá ðÜù óôïí åðüìåíï êáôÜëïãï;" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "" + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "äéåãñÜöçóáí %d" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%sìåôáêéíÞèçêáí %d" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " êïììÜôéá åðéëÝ÷èçêáí" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d íÝá, %d áäéÜâáóôá, %d óõíïëéêÜ (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d íÝá, %d áäéÜâáóôá, %d óõíïëéêÜ" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Ðåñßëçøç ôáîéíüìçóçò..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "" + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "" + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "" + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(×ùñßò çìåñïìçíßá)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Ôï ìÞíõìá %d óçìåéþèçêå\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Ôï ìÞíõìá %d óçìåéþèçêå ùò äéáâáóìÝíï\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Ôï ìÞíõìá %d óçìåéþèçêå ùò áäéÜâáóôï\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Ôï ìÞíõìá %s/%d Ý÷åé ïñéóôåß ãéá äéáãñáöÞ\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "" + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "ÄéáãñÜöù ôá äéðëÜ ìçíýìáôá..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Ôï ìÞíõìá %s/%d äåí Ý÷åé óçìåéùèåß\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Ôï ìÞíõìá %s/%d Ý÷åé ïñéóôåß ãéá ìåôáêßíçóç óôï %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "Ï ðñïïñéóìüò åßíáé ßäéïò ìå ôïí ôñÝ÷ïíôá êáôÜëïãï." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "ÅðéëÝãù üëá ôá ìçíýìáôá..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Åêôýðùóç" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"ÅéóÜãåôå ôçí ãñáììÞ åíôïëÞò åêôýðùóçò:\n" +"(Ôï `%s' èá áíôéêáôáóôáèåß ìå ôï üíïìá áñ÷åßïõ)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"Ç ãñáììÞ åíôïëÞò åêôýðùóçò åßíáé Üêõñç:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "" + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "" + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "" + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "öéëôñÜñù..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "ÖéëôñÜñù..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "ÐÞãáéíå óôï %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Äçìéïõñãþ áðåéêüíéóç êåéìÝíïõ...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "áðÝôõ÷å ôï ãñÜøéìï óôï %s.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "Ç ãñáììÞ åíôïëÞò áðåéêüíéóçò URI åßíáé Üêõñç: `%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/Ðåñßëçøç/ÅðéëïãÞ üëùí" + +#~ msgid "Clean trash" +#~ msgstr "ÊáèÜñéóìá ôïõ trash" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/ÓÞìáíóç/ÓÞìáíóç ùò óçìáíôéêü" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: ç êáôáíïìÞ ÷ñùìÜôùí áðÝôõ÷å\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "Ìç Ýãêõñïò ôýðïò MIME\n" diff --git a/po/es.gmo b/po/es.gmo new file mode 100644 index 0000000000000000000000000000000000000000..72463719151384978d38ad9ca23539a9dd094395 GIT binary patch literal 62110 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 Muik^EF`B2#A0wO}CjbBd literal 0 HcmV?d00001 diff --git a/po/es.po b/po/es.po new file mode 100644 index 000000000..ddec0bb66 --- /dev/null +++ b/po/es.po @@ -0,0 +1,3842 @@ +# Spanish translation of Sylpheed. +# Copyright (C) 2000 Free Software Foundation, Inc. +# Ricardo Mones Lastra <mones@aic.uniovi.es>, 2000-2001. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-04-17\n" +"Last-Translator: Ricardo Mones Lastra <mones@aic.uniovi.es>\n" +"Language-Team: Ricardo Mones Lastra <mones@aic.uniovi.es>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "Acerca de" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"Partes tomadas de fetchmail son Copyright 1997 por Eric S. Raymond. Partes " +"de ellas son también Copyright por Carl Harris, 1993 y 1995. Copyright " +"retenido con el propósito de proteger la libre redistribución de las " +"fuentes.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"El soporte de MD5 es copyright por RSA Data Security, Inc. Vease el " +"comentario que encabeza el módulo md5.c para los términos de licencia.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc es copyright por Yasuhiro Tonooka <tonooka@msi.co.jp>, y libkcc es " +"copyright por takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"GPGME es copyright 2001 por Werner Koch <dd9jn@gnu.org>\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Este programa es software libre; puede redistribuirlo y/o modificarlo bajo " +"los términos de la GNU General Public License publicada por la Free Software " +"Foundation; tanto en versión 2, o (opcionalmente) cualquier versión " +"posterior.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Este programa es distribuido con la esperanza de que sea util, pero SIN " +"NINGUNA GARANTÍA; ni siquiera la garantía implícita de COMERCIALIDAD o " +"ADECUACIÓN PARA ALGÚN PROPÓSITO PARTICULAR. Vease la GNU General Public " +"License para más detalles.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Usted debería haber recibido una copia de la GNU General Public License " +"junto con este programa; en caso contrario, escriba a la Free Software " +"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "Aceptar" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Leyendo configuración de cada cuenta...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Encontrada etiqueta: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"Hay ventanas de composición abiertas.\n" +"Cierre todas las ventanas de composición antes de editar las cuentas." + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Abriendo ventana de edición de cuenta...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Creando ventana de edición de cuenta...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Editar cuentas" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Nombre" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protocolo" + +#: src/account.c:382 +msgid "Server" +msgstr "Servidor" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Añadir" + +#: src/account.c:407 +msgid "Edit" +msgstr "Editar" + +#: src/account.c:413 +msgid " Delete " +msgstr " Borrar " + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Abajo" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Arriba" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Marcar de uso habitual " + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Cerrar" + +#: src/account.c:498 +msgid "Delete account" +msgstr "Borrar cuenta" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "¿Realmente quiere borrar esta cuenta?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Si" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+No" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_Fichero" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_Fichero/Nueva _dirección" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_Fichero/Nuevo _grupo" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_Fichero/Nueva _carpeta" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_Fichero/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_Fichero/_Editar" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_Fichero/_Borrar" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_Fichero/_Cerrar" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/_Ayuda" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/_Ayuda/_Acerca de" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Nueva _dirección" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Nuevo _grupo" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Nueva _carpeta" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/_Editar" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/_Borrar" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "Dirección e-mail" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Notas" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Libro de direcciones" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Nombre:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Borrar" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Buscar" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "Para:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Dirección común" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Dirección personal" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Borrar dirección(es)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "¿Borrar realmente la(s) dirección(es)?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "No" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Nueva carpeta" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Nombre de la nueva carpeta:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NuevaCarpeta" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Ese nombre ya existe." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Nuevo grupo" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Nombre del nuevo grupo:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NuevoGrupo" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Editar grupo" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Nombre del nuevo grupo:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Editar carpeta" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Nombre de la nueva carpeta:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "¿Borrar realmente `%s' ?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Editar dirección" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Dirección" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Cancelar" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Leyendo libro de direcciones..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s no existe.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "hecho.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Exportando libro de direcciones..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "fallo al escribir el libro de direcciones.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Notificación" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Aviso" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Error" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Creando el diálogo de alerta...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "no se pudo reservar memoria\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Añadir" + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Quitar" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Propiedad..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_Fichero/_Adjuntar fichero" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_Fichero/_Insertar fichero" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_Fichero/Insertar _firma" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/_Editar/_Deshacer" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/_Editar/_Rehacer" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/_Editar/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/_Editar/_Cortar" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/_Editar/C_opiar" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/_Editar/_Pegar" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/_Editar/_Seleccionar todo" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/_Editar/_Cortar líneas largas" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/_Editar/Editar con editor e_xterno" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/_Mensaje" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/_Mensaje/_Enviar" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/_Mensaje/Enviar _después" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/_Mensaje/_Guardar como borrador" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/_Mensaje/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/_Mensaje/_Para" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/_Mensaje/_Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/_Mensaje/_Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/_Mensaje/_Responder" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/_Mensaje/_Reenviar a" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/_Mensaje/_Adjuntar" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "/_Mensaje/_Firmar" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/_Mensaje/_Encriptar" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/_Herramientas" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/_Herramientas/_Mostrar regleta" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/_Herramientas/_Libro de direcciones" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "No se puede obtener el texto\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: el fichero no existe\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Inicio mensaje redirijido:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "El fichero %s no existe\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "No se puede obtener el tamaño de %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "El fichero %s esta vacío\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Mensaje: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr "[Editar]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - Componer mensaje%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Componer mensaje%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "No se especificó el destinatario." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "no se puede obtener la lista de destinatarios." + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"No especificó ninguna cuenta para enviar.\n" +"Seleccione alguna cuenta antes de enviar." + + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "Ocurrió un error enviando el mensaje a %s ." + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Poniendo en la cola" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Ocurrió un error enviando los mensajes.\n" +"¿Desea poner este mensaje en la cola?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "El mensaje no se puede poner en la cola." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Ocurrió un error enviando los mensajes." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "No se puede guardar el mensaje en Salida." + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "no se puede cambiar los permisos de archivo\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "No se puede convertir el conjunto de códigos del mensaje." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "no se pueden escribir las cabeceras\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "guardando mensaje enviado...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "no se puede salvar el mensaje\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "no se puede abrir el fichero de marcas\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "poniendo en la cola...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "El mensaje no se puede poner en la cola\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "No puedo abrir %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "Message-ID generado: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "Tipo MIME" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Tamaño" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Creando ventana de composicion...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "Desde:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Enviar" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "Enviar mensaje" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "Enviar después" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "Poner en la cola y enviar después" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Borrador" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Guardar como borrador" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "Insertar" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Insertar fichero" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "Adjuntar" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Adjuntar fichero" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Firma" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Insertar firma" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editor" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Editar con un editor externo" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "Recortar" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "Recortar las líneas largas" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Tipo MIME inválido." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "El fichero no existe o está vacío." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Propiedad" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Codificación" + +#: src/compose.c:3065 +msgid "Path" +msgstr "Ruta" + +#: src/compose.c:3066 +msgid "File name" +msgstr "Nombre de fichero" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "El comando del editor externo no es válido: `%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"El editor externo aún esta activo.\n" +"¿Desea terminar el proceso?\n" +"Id. de proceso: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "Terminado proceso id.: %d" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Fichero temporal: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Componer: entrada desde proceso monitor\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "No se pudo ejecutar el editor externo\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "No se pudo escribir en el fichero\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Fallo leyendo tubería\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "no se puede eliminar el borrador antiguo\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Seleccionar fichero" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Descartar mensaje" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Este mensaje se ha modificado. ¿Desea descartarlo?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Descartar" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "a Borrador" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Seleccionar carpeta" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/Crear _nueva carpeta..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/_Renombrar carpeta..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/_Borrar carpeta" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/Eliminar _mailbox" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/Eliminar servidor _IMAP4" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/_Suscribirse a un grupo..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/_Eliminar grupo" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/_Eliminar servidor de noticias" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Carpeta" + +#: src/folderview.c:234 +msgid "New" +msgstr "Nueva" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "No leído" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Creando vista de carpeta...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Estableciendo información de carpeta...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Estableciendo información de carpeta..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Revisando carpeta %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Revisando carpeta %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "Actualizando todas las carpetas..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "Entrada" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Salida" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "Cola" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Papelera" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Carpeta %s seleccionada\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "`%c' no puede estar en el nombre de la carpeta." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "La carpeta `%s' ya existe." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Nuevo nombre para `%s':" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Renombrar carpeta" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"Todas las carpetas y mensajes bajo `%s' serán borrados.\n" +"¿Confirma el borrado?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Borrar carpeta" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "no se puede eliminar la carpeta `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"¿Realmente desea eliminar el buzón `%s' ?\n" +"(Los mensajes NO se borrarán del disco)" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "Eliminar carpeta" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "Eliminar realmente la carpeta `%s' ?" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "¿Eliminar realmente el servidor IMAP4 `%s'?" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "Borrar servidor IMAP4" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "Suscribir grupo de noticias" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "Nombre del grupo de noticias:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "El grupo de noticias `%s' ya existe." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "¿Borrar el grupo de noticias `%s'?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Borrar grupo de noticias" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "¿Eliminar el servidor de noticias `%s'?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Eliminar servidor de noticias" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Grupos de noticias:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Asunto:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Creando vista de cabeceras...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(Sin remite)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Sin asunto)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Creando ventana de cabeceras...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Todas las cabeceras" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "Viendo cabeceras de %s ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Todas las cebeceras" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Creando vista de imagen...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "No se puede cargar la imagen." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "La conexión IMAP4 con %s:%d ha sido rota. Reconectando...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "creando conexión IMAP4 con %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "no se puede seleccionar la carpeta: %s\n" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "el mensaje %d ya esta en caché.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "obteniendo mensaje %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "no se puede obtener el mensaje %d\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "carpetas de origen y destino idénticas.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Moviendo mensaje %s%c%d a %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "no puedo establecer los flags borrados: %d\n" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "no puedo vaciar\n" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "o puedo establecer los flags borrados: 1:%d\n" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "no se puede obtener la estructura del mensaje\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "Error obteniendo la estructura del mensaje.\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "No se puede interpretar la estructura del mensaje: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "borrando mensaje %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tBorrando mensaje en caché... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "No se puede conectar con el servidor IMAP4: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "Autentificación IMAP4 fallida.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "no puedo copiar %d a %s\n" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "error en el comando imap: STORE %d:%d %s\n" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "error en el comando imap: EXPUNGE\n" + +#: src/import.c:116 +msgid "Import" +msgstr "Importar" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "Importando fichero:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Directorio destino:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "Seleccionar..." + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Seleccionar fichero a importar" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Obteniendo nuevos mensajes" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "Contraseña para %s en %s:" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Contraseña" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "La autorización para %s en %s falló" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "obteniendo nuevos mensajes de la cuenta %s...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: Recuperando nuevos mensajes" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Conectando al servidor POP3: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "No se puede conectar al servirdor POP3: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "No se puede conectar al servirdor POP3: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Autorizando" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Obteniendo el número de nuevos mensajes" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Recuperando mensaje (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Borrando mensaje" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Saliendo" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "un mensaje no es recibido\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Ocurrió un error mientras se procesaba el correo." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "No hay espacio libre en disco." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "no hay mensajes en el correo local.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Obteniendo nuevos mensajes desde %s en %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Creando ventana de traza...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Traza del protocolo" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"El fichero `%s' ya existe.\n" +"No puedo crear la carpeta." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread no está soportado por glib.\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "Uso: %s [OPCIÓN]...\n" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr " --compose [dirección] abre la ventana de edición" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr " --receive recive los mensajes nuevos" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr " --receive-all recibe nuevos para todas las cuentas" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr " --debug modo de depuración" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr " --help presenta esta ayuda y finaliza" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "Está componiendo un mensaje. ¿Quiere salir?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "ya hay otro Sylpheed ejecutándose.\n" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/_Fichero/_Añadir buzón" + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_Fichero/_Actualizar árbol" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "/_Fichero/_Carpeta" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/_Fichero/_Carpeta_/Crear _nueva carpeta..." + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/_Fichero/_Carpeta_/_Renombrar carpeta..." + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "/_Fichero/_Carpeta_/_Borrar carpeta" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_Fichero/I_mportar fichero mbox..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "/_Fichero/_Vaciar papelera" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_Fichero/_Salvar como..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_Fichero/_Imprimir" + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_Fichero/Sali_r" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/_Edición/_Buscar" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/_Ver" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/_Ver/_Árbol de carpetas" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/_Ver/_Mensajes" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/_Ver/_Herramientas" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/_Ver/_Herramientas/Iconos _y texto" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/_Ver/_Herramientas/_Iconos" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/_Ver/_Herramientas/_Texto" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/_Ver/_Herramientas/_Ocultar" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/_Ver/_Barra de estado" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/_Ver/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/_Ver/Á_rbol de carpetas flotante" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/_Ver/M_ensaje flotante" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/_Ver/_Conjunto de códigos" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/_Ver/_Conjunto de códigos/_Autodetectar" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/_Ver/_Conjunto de códigos/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/_Ver/_Conjunto de códigos/ASCII de 7 bits (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/_Ver/_Conjunto de códigos/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/_Ver/_Conjunto de códigos/Europeo Occidental (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/_Ver/_Conjunto de códigos/Centroeuropeo (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/_Ver/_Conjunto de códigos/Báltico (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/_Ver/_Conjunto de códigos/Báltico (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/_Ver/_Conjunto de códigos/Griego (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/_Ver/_Conjunto de códigos/Turco (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/_Ver/_Conjunto de códigos/Cirílico (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/_Ver/_Conjunto de códigos/Cirílico (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/_Ver/_Conjunto de códigos/Cirílico (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/_Ver/_Conjunto de códigos/Japonés (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/_Ver/_Conjunto de códigos/Japonés (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/_Ver/_Conjunto de códigos/Japonés (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/_Ver/_Conjunto de códigos/Japonés (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/_Ver/_Conjunto de códigos/Chino simplificado (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/_Ver/_Conjunto de códigos/Chino tradicional (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/_Ver/_Conjunto de códigos/Chino tradicional (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/_Ver/_Conjunto de códigos/Chino (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/_Ver/_Conjunto de códigos/Coreano (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/_Ver/_Conjunto de códigos/Coreano (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/_Mensaje/Rec_ibir correo nuevo" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/_Mensaje/Recibir de tod_as las cuentas" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/_Mensaje/Enviar mensa_jes en cola" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/_Mensaje/Componer _nuevo mensaje" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/_Mensaje/_Responder" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/_Mensaje/Responder a _todos" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/_Mensaje/Re_dirigir" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/_Mensaje/Redirigir como fichero ad_junto" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/_Mensaje/M_over..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "/_Mensaje/_Copiar..." + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/_Mensaje/_Borrar" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/_Mensaje/_Marcar" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/_Mensaje/_Marcar/_Marcar" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/_Mensaje/_Marcar/_Desmarcar" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/_Mensaje/_Marcar/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/_Mensaje/_Marcar/Marcar como no leído" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/_Mensaje/_Marcar/Marcar como leído" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/_Mensaje/Abrir en _ventana nueva" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/_Message/Ver _fuente" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/_Mensaje/_Mostrar todas las cabeceras" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/_Mensaje/Re_editar" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/_Resumen" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/_Resumen/_Borrar mensajes duplicados" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/_Resumen/_Filtrar mensajes" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/_Resumen/_Ejecutar" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/_Resumen/_Actualizar" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/_Resumen/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/_Resumen/Mensaje a_nterior" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/_Resumen/Mensaje s_iguiente" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/_Resumen/Siguiente no _leído" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/_Resumen/_Ir a otra carpeta" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/_Resumen/_Ordenar" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/_Resumen/_Ordenar/Ordenar por _número" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/_Resumen/_Ordenar/Ordenar por _tamaño" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/_Resumen/_Ordenar/Ordenar por _fecha" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/_Resumen/_Ordenar/Ordenar por _remitente" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/_Resumen/_Ordenar/Ordenar por as_unto" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/_Resumen/_Ordenar/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/_Resumen/_Ordenar/Atraer _por asunto" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/_Resumen/_Vista jerárquica" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/_Resumen/Vista plana" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/_Resumen/Elementos visibles..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/_Utilidades/_Ventana de traza" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/_Configuración" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/_Configuración/Preferencias _comunes..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/_Configuración/Preferencias para cada cuenta..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/_Configuración/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/_Configuración/Crear _nueva cuenta..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/_Configuración/_Editar cuentas..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/_Configuración/_Cambiar cuenta actual" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/_Ayuda/_Manual" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/_Ayuda/_Manual/_Inglés" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/_Ayuda/_Manual/_Japonés" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/_Ayuda/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Creando ventana principal...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "MainWindow: fallo solicitando color %d\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Sin título" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "ninguna" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Cuenta actual: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "posición de la ventana: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "Vaciar papelera" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "¿Vaciar todos los mensajes de la papelera?" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "Añadir buzón" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"Introduzca la localización del buzón.\n" +"Si el buzón especificado ya existe será\n" +"escaneado automáticamente." + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "El buzón `%s' ya existe." + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Correo" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"Falló la creación del buzón.\n" +"Quizás ya existan los ficheros o no tenga permisos suficientes para escribir " +" en el directorio." + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "Estableciendo controles..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Traer" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Incorporar correo nuevo" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Traer todo" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Incorporar correo nuevo de todas las cuentas" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Enviar mensaje(s) en la cola" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Componer" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Componer mensaje nuevo" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Responder" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Responder al mensaje" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "Traer" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "Traer" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Redirigir" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Redirijir el mensaje" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Borrar el mensaje" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Ejecutar" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Ejecutar el proceso marcado" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "Sgte." + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Siguiente no leido" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Preferencias" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Preferencias comunes" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Cuenta" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Establecer cuenta" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Salir" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "¿Salir del programa?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Fallo enviando mensaje encolado." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "conjunto de caracteres forzado: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Obteniendo mensajes desde %s en %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "no puedo leer el fichero mbox.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "formato de mbox inválido: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "mbox malformada: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "no se puede abrir el fichero temporal\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"Encontrado Desde sin codificar:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "no se puede escribir el fichero temporal\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d mensajes encontrados.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "no se puede crear el fichero de bloqueo %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "usar 'flock' en vez de 'file' si es posible.\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "no puedo crear %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "el buzón esta siendo usado por otro proceso, esperando...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "no se puede bloquear %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "tipo de bloqueo no válido\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "no se puede desbloquear %s\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "no se puede truncar a cero el buzón.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Creando visor de mensaje...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "no se puede copiar mensaje %s a %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "No se puede abrir el fichero de marcas.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "%s ya existe." + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "Copiando mensaje %s%c%d a %s ...\n" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Último número en directorio %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tBuscando mensajes no cacheados..." + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "Encontrado(s) %d mensaje(s) no cacheado(s).\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tOrdenando mensajes no cacheados numéricamente..." + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/_Abrir" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/_Ver como texto" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/_Salvar como..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "/_Verificar firma" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "Tipo MIME" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Creando visor de MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "Seleccione \"Verificar firma\" para verificar" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "No se puede obtener la parte del mensaje multipartes." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "No se puede guardar la parte del mensaje multipartes." + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Guardar como" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Sobreescribir" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "¿Sobreescribir el fichero existente?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "El comando del visor MIME no es válido: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "creando conexión NNTP con %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "La conexión NNTP con %s:%d ha sido rota. Reconectando...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "el artículo %d ya esta en caché.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "obteniendo artículo %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "no puedo leer el artículo %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "no se puede enviar el artículo.\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "no puedo obtener el artículo %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "no puedo establecer grupo: %s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "rango de artículos no válido: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "no hay artículos nuevos.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "obteniendo xover %d - %d en %s...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "no se puede obtener xover\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "ocurrió un error obteniendo xover.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "linea xover no válida: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "borrando artículo %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tBorrando artículos en caché... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "No se puede conectar con el servidor NNTP: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "error del protocolo: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "error del protocolo\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "Ocurrió un error mientras se enviaba\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "Frase contraseña" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[sin id usuario]" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%sIntroduzca la frase contraseña para:\n" +"\n" +" %.*s \n" +"(%.*s)\n" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" +"¡Contraseña errónea! Intentelo de nuevo...\n" +"\n" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "ocurrió un error en la autorización\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "No se encontro en el saludo la marca temporal APOP requerida\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "La marca temporal del saludo tiene un error de sintaxis\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "Error del protocolo POP3\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Leyendo configuración...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "Encontrado %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Terminada la lectura de la configuración.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "fallo escribiendo la configuración a fichero\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Configuración guardada.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Aplicar" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Abriendo ventana de preferencias de cuenta...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Cuenta%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Preferencias para la nueva cuenta" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Preferencias para cada cuenta" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Creando ventana de preferencias de cuenta...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Basicas" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Recibir" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Avanzadas" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Nombre de esta cuenta" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Uso habitual" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Información personal" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Nombre completo" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "Dirección de correo" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organización" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Información del servidor" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normal)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (autorz. APOP)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "News (NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Ninguna (local)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "Servidor de news" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Servidor de recepción" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "Servidor SMTP (enviar)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "Usuario" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Contraseña" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Eliminar mensajes del servidor al recibir" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Recibir todos los mensajes" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "Recibir al obtener de todas las cuentas" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Filtrar mensajes al recibir" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Cabecera" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Añadir campo Fecha" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Generar ID-Mensaje" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Añadir cabecera de usuario" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr " Editar... " + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Establecer las siguientes direcciones" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Responder" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "Autentificación" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "Autentificación SMTP (SMTP AUTH)" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "Autentificación con POP3 antes de enviar" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Fichero de firma" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Puerto SMTP" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Puerto POP3" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Nombre del dominio" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "No se especificó la dirección de correo." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "No se especificó el servidor SMTP." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "No se especificó el usuario." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "No se especificó el servidor POP3." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "No se especificó el servidor IMAP4." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "No se especificó el servidor NNTP." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Creando ventana de preferencias comunes...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Preferencias comunes" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Ver" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filtrado" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "Privacidad" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Interfaz" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Otras" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Programa externo" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Usar un programa externo para incorporar" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "Ruta al programa" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Spool local" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "Incorporar del spool" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Filtrar al incorporar" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Directorio de spool" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Comprobar correo nuevo" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "cada" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "minuto(s)" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "Comprueba correo nuevo al inicio" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "Nueva" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"Número máximo de artículos a bajar\n" +"(ilimitado si se especifica 0)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "Usar programa externo para enviar" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "Salvar mensajes salientes en Salida" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "Poner en cola los envios fallidos" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Conjunto de códigos para enviar" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Automático" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "ASCII de 7 bits (US-ASC_II)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Europeo Occidental (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "Centroeuropeo (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "Báltico (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "Báltico (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "Griego (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "Cirílico (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonés (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "Japonés (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "Japonés (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "Chino simplificado (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "Chino tradicional (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "Chino tradicional (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "Chino (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Citación" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "Citar mensaje al responder" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "Marca de citación" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Formato de citación:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " Descripción de símbolos " + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Insertar firma automáticamente" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Separador de firma" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "Recortar mensajes a los" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "caracteres" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "Recortar citación" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "Recortar antes de enviar" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "Reglas registradas" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "Operador" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(ninguna)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Palabra" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Predicado" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "contiene" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "no contiene" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Destino" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Usar exp.reg." + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "No recibir" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "Registrar" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " Sustituir " + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "Fuente" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Mensaje" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "Ver el número de no leídos junto al nombre de la carpeta" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Permitir colores en el mensaje" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Ver alfabetos de 2-bytes con caracteres de 1-byte" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "Cabeceras breves en la vista del mensaje" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Interlineado" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "pixel(s)" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "Dejar espacio de cabecera" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Traducir cabeceras (como `Desde:', `Asunto:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Mostrar remitente en la columna `Desde' si es el usted mismo" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "Habilitar la barra de desplazamiento horizontal" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr " Elementos visibles en cabecera... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "Encriptar el mensaje por defecto" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "Firmar el mensaje por defecto" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "Comprobar las firmas automáticamente" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "Capturar la entrada mientras se introducen contraseñas" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "Clave de firma por defecto" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "Emular el comportamiento del raton como enel correo basado en Emacs" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Abrir el primer mensaje no leído al abrir una carpeta" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "Abrir entrada despues de recibir correo nuevo" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "Ejecutar inmediatamente movimientos o borrados de mensajes" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"(Los mensajes serán marcados hasta la ejecución\n" +" si esto esta desactivado)" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "Habilitar desplazamiento suave en el visor de mensajes" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "Salto de desplazamiento" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "Al salir" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Confirmar al salir" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "Vaciar papelera al salir" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "Preguntar antes de vaciar" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Visor web externo (%s se sustituirá con el URI)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "Comando" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Impresión (%s se sustituirá con el nombre de fichero)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Editor externo (%s se sustituirá con el nombre de fichero)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "Colores del mensaje" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "Colores" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "Texto citado - Primer nivel" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "Texto citado - Segundo nivel" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "Texto citado - Tercer nivel" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "Enlace URI" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "Reciclar colores de citado" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "Elejir color para el nivel de citado 1" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "Elejir color para el nivel de citado 2" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "Elejir color para el nivel de citado 3" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "Elejir color para URIs" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "Descripción de símbolos" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"Fecha\n" +"Desde\n" +"Nombre completo del remitente\n" +"Nombre del remitente\n" +"Asunto\n" +"Para\n" +"ID-Mensaje\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Leyendo configuración de filtrado...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "Escribiendo configuración de filtrado...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(Nuevo)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "No se especifico destinatario." + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "No se estableció el nombre de cabecera" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "Borrar regla" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "¿Quiere borrar realmente esta regla?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Indicar elemento visual" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Marca" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Número" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Fecha" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "Desde" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Asunto" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "Selección de fuente" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "DomLunMarMieJueVieSab" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Conversión de códigos fallida.\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "La caché de datos esta corrupta\n" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tNo hay fichero caché\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tLeyendo caché de cabeceras..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "La versión en caché es distinta. Descartándola.\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tMarcando los mensajes..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d nuevo(s) mensaje(s)\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "Fichero de marcas no encontrado.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "Versión de marca diferente (%d != %d). Descartándola.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "No se puede abrir el fichero de marcas para añadir.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "No se puede abrir el fichero de marcas para escribir.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "Fallo enviando mensaje en cola.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "El comando de impresión no es válido: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "Creando diálogo de progreso...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "ocurrió un error mientras se obtenian datos.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "No se puede escribir al fichero.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "Oops: firma no verificada" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "No se encontró firma" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "Firma válida" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "Firma INVÁLIDA" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "No hay clave pública para verificar la firma" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "Error al verificar la firma" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "Resultados diferentes para las firmas" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "Error: Estado desconocido" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "Firma válida de \"%s\"" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "Firma INVÁLIDA de \"%s\"" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "No encuentro ID de usuario para esta clave." + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr " aka \"%s\"\n" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "Firma hecha %s\n" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "Huella de clave: %s\n" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "Seleccione teclas" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "Seleccione tecla para:" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "ID tecla" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "Val" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "Seleccionar" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "Cabecera corrupta en el mensaje en cola.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "Cuenta no encontrada. Usando la cuenta actual...\n" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "Cuenta no encontrada.\n" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Conectando con el servidor SMTP: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "No se puede conectar con el servidor SMTP: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "Ocurrió un error enviando HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "Configurar buzón" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"Primero establezca la localización de su buzón.\n" +"Puede utilizar un buzón existente en formato MH\n" +"si ya lo tiene.\n" +"Si no está seguro, seleccione Aceptar." + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "Creando ventana de fuente...\n" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "Fuente del mensaje" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "Viendo la fuente de %s ...\n" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - Fuente" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "Buscar" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Mayús./minús." + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "Buscar hacia atrás" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "Seleccionar coincidentes" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Limpiar" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "Búsqueda fallida" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "Cadena no encontrada." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Se llegó al principio de la lista, ¿siguir desde el final?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Se terminó la lista, ¿comenzar desde el principio?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Búsqueda concluida" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/_Mover..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/_Copiar..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/E_jecutar" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/_Marcar" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/_Marcar/_Marcar" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/_Marcar/_Desmarcar" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/_Marcar/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/_Marcar/Marcar como _no leído" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/_Marcar/Marcar como _leído" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/_Responder" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/Responder a _todos" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/Rediri_gir" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Redirigir como fichero ad_junto" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/Abrir en ventana _nueva" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/Ver _fuente" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Mostrar todas las cabeceras" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/Re_editar" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/_Imprimir..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/_Seleccionar todo" + +#: src/summaryview.c:320 +msgid "M" +msgstr "x" + +#: src/summaryview.c:320 +msgid "U" +msgstr "N" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Creando vista de cabeceras...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "No." + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Procesar marcas" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Queda alguna marca. ¿Procesarla?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"carpeta vacía\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Revisando carpeta (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "hecho." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "No hay mensajes sin leer" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "No hay mensajes sin leer. ¿Ir a la carpeta siguiente?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Agrupando mensajes por asunto..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d borrados" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d movidos" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "%s%d copiado" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " elemento(s) seleccionado(s)" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d nuevos, %d no leídos, %d totales (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d nuevos, %d no leídos, %d totales" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Ordenando cabeceras..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tExtrayendo cabeceras de los mensajes..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "Resumiendo los mensajes..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "Escribiendo caché resumen (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(Sin fecha)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Mensaje %d marcado\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Mensaje %d marcado como leído\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Mensaje %d marcado como no leído\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Mensaje %s/%d marcado para borrar\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "La carpeta actual es Papelera." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Borrando mensajes duplicados..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Mensaje %s/%d desmarcado\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Mensaje %d marcado para mover a %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "El destino es el mismo que la carpeta actual." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "Mensaje %d marcado para copiar a %s\n" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "El destino de copia es la carpeta actual." + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "Seleccionando todos los mensajes..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Imprimir" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Teclee el comando para imprimir:\n" +"(`%s' será sustituido por el fichero)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"El comando de impresión no es válido:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "Construyendo jerarquía..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "Deshaciendo jerarquía..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "Deshaciendo jerarquía para ejecución..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "filtrando..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "Filtrando..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "Ir a %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Creando vista de texto...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "Para salvar esta parte, abra el menu contextual con el\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"botón derecho y seleccione `Salvar como...', o pulse la tecla `y'.\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "Para ver esta parte como un mensaje de texto, seleccione\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`Ver como texto', o pulse la tecla `t'.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "Para abrir esta parte con un programa externo seleccione `Abrir',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "o doble-click, o pulse el botón central, o pulse la tecla `l'." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "Esta firma aún no ha sido verificada.\n" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "Para verificarla, abra el menu contextual con\n" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "el botón derecho y seleccione `Verificar firma'.\n" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "fallo escribiendo en %s.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "La copia de %s a %s ha fallado.\n" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "La orden de apertura de un URI es inválida: `%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/_Resumen/_Seleccionar todos" + +#~ msgid "Clean trash" +#~ msgstr "Limpiar papelera" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/_Marcar/Marcar como _importante" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: fallo solicitando color\n" + +#~ msgid "*** Warning: code conversion failed ***\n" +#~ msgstr "*** Atención: conversión de códigos fallida ***\n" + +#~ msgid "can't set mailbox: %s\n" +#~ msgstr "no puedo establecer correo: %s\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "Tipo MIME no válido\n" + +#~ msgid "Reply-To:" +#~ msgstr "Responder a:" + +#~ msgid "%s - Compose message [Edited]" +#~ msgstr "%s - Componer mensaje [Edited]" + +#~ msgid "/_Add news server" +#~ msgstr "/_Añadir servidor de noticias" + +#~ msgid "deleting folder %s ...\n" +#~ msgstr "borrando carpeta %s ...\n" + +#~ msgid "deleting newsgroup %s ...\n" +#~ msgstr "borrando grupo de noticias %s ...\n" + +#~ msgid "Input adding news server:" +#~ msgstr "Nombre del servidor de noticias:" + +#~ msgid "The news server `%s' already exists." +#~ msgstr "El servidor de noticias `%s' ya existe." + +#~ msgid "deleting cache folder of %s ...\n" +#~ msgstr "borrando carpeta de caché de %s ...\n" + +#~ msgid "IMAP login command is invalid.\n" +#~ msgstr "El comando de autentificación IMAP no es válido.\n" + +#~ msgid "Next unread" +#~ msgstr "Siguiente no leido" + +#~ msgid "Previously selected folder: %s\n" +#~ msgstr "Carpeta seleccionada previamente: %s\n" + +#~ msgid "New directory" +#~ msgstr "Nuevo directorio" + +#~ msgid "The directory not found. Create it?" +#~ msgstr "No se encuentra el directorio. ¿Crearlo?" + +#~ msgid "Can't create directory." +#~ msgstr "No se puede crear el directorio." + +#~ msgid "Selected name isn't a directory." +#~ msgstr "El nombre seleccionado no es un directorio." + +#~ msgid "Writing mail folder list..." +#~ msgstr "Escribiendo lista de carpetas de correo..." + +#~ msgid "Writing imap folder list..." +#~ msgstr "Escribiendo lista de carpetas de imap..." + +#~ msgid "Writing news folder list..." +#~ msgstr "Escribiendo lista de carpetas de noticias..." + +#~ msgid "Reading folder %s ..." +#~ msgstr "Leyendo carpeta %s ..." + +#~ msgid "Mail Server (IMAP4)" +#~ msgstr "Servidor Correo (IMAP4)" + +#~ msgid "NetNews" +#~ msgstr "Noticias" + +#~ msgid "reading folder list %s ..." +#~ msgstr "leyendo lista de carpetas %s ..." + +#~ msgid "Broken folder list cache.\n" +#~ msgstr "Caché de la lista de carpetas corrupta.\n" + +#~ msgid "Select destination directory" +#~ msgstr "Seleccionar directorio destino" + +#~ msgid "can't drop message into %s\n" +#~ msgstr "no se puede poner el mensaje en %s\n" + +#~ msgid "%s exists\n" +#~ msgstr "%s existe\n" + +#~ msgid "can't move tmpmsg to %s\n" +#~ msgstr "no se puede renombrar tmpmsg a %s\n" + +#~ msgid "IMAP session is not established\n" +#~ msgstr "sesión de IMAP no establecida\n" + +#~ msgid "news session is not established\n" +#~ msgstr "sesión de noticias no establecida\n" + +#~ msgid "Unlinking message %s in trash...\n" +#~ msgstr "Eliminando mensaje %s de la papelera...\n" + +#~ msgid "Connecting to %s ..." +#~ msgstr "Conectando con %s ..." + +#~ msgid "Enable thread view on summary" +#~ msgstr "Habilitar vista jerárquica de cabeceras" + +#~ msgid "Not yet implemented." +#~ msgstr "Aún no implementado." + +#~ msgid "Korean (ISO-2022-KR)" +#~ msgstr "Coreano (ISO-2022-KR)" + +#~ msgid "/_Summary/Unsele_ct all" +#~ msgstr "/_Resumen/_Deseleccionar todos" + +#~ msgid "" +#~ "Date\n" +#~ "from\n" +#~ "Subject\n" +#~ "To\n" +#~ "Message-ID\n" +#~ "%" +#~ msgstr "" +#~ "Fecha\n" +#~ "desde\n" +#~ "Asunto\n" +#~ "Para\n" +#~ "ID-Mensaje\n" +#~ "%" + +#~ msgid "Printing" +#~ msgstr "Impresión" + +#~ msgid "/_Mark/Mark _all" +#~ msgstr "/_Marcar/_Marcar todos" + +#~ msgid "/_Mark/U_nmark all" +#~ msgstr "/_Marcar/Desmarca_r todos" + +#~ msgid "/_Mark/M_ove marked" +#~ msgstr "/_Marcar/_Mover marcados" + +#~ msgid "/_Mark/_Delete marked" +#~ msgstr "/_Marcar/_Borrar marcados" + +#~ msgid "Invalid month\n" +#~ msgstr "Mes no válido\n" + +#~ msgid "/U_nselect all" +#~ msgstr "/_Deseleccionar todo" + +#~ msgid "/_Message/Reply with _quotation" +#~ msgstr "/_Mensaje/Responder con _citación" + +#~ msgid "/Reply with _quotation" +#~ msgstr "/Responder con _citación" + +#~ msgid "queueing message that failed to send...\n" +#~ msgstr "poniendo en la cola los envios fallidos...\n" + +#~ msgid "Western (ISO-8859-1)" +#~ msgstr "Occidental (ISO-8859-1)" diff --git a/po/fr.gmo b/po/fr.gmo new file mode 100644 index 0000000000000000000000000000000000000000..93f2219e41ccb24669465110af156e191d131780 GIT binary patch literal 48945 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 literal 0 HcmV?d00001 diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 000000000..33c7b8d0a --- /dev/null +++ b/po/fr.po @@ -0,0 +1,3807 @@ +# French translation of Sylpheed +# Copyright (C) 2000 Free Software Foundation, Inc. +# Paul Rolland <rol@as2917.net>, 2000. +# Updated by : Sébastien Rodriguez <srodriguez@ifrance.com> +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2000-08-28\n" +"Last-Translator: Paul Rolland <rol@as2917.net>\n" +"Language-Team: Paul Rolland <rol@as2917.net>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "A propos" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"Le code extrait de fetchmail est Copyright 1997 par Eric S. Raymond. " +"Certains de ces extraits sont aussi Copyright par Carl Harris, 1993 et 1995. " +"Les Copyrights sont maintenus afin de protéger la libre redistribution des " +"sources.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"The support MD5 est Copyright RSA Data Security, Inc. Voyez les commentaires " +"dans l'entête du module md5.c pour les termes de la licenses.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc est Copyright Yasuhiro Tonooka <tonooka@msi.co.jp>, et libkcc est " +"Copyright takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"GPGME est copyright 2001 par Werner Koch <dd9jn@gnu.org>\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Ce programme est un logiciel libre, vous pouvez le redistribuez et/ou le " +"modifiez sous les termes de la GNU General Public License publiée par la " +"Free Software Foundation, soit en version, soit (à votre choix) une version " +"ultérieure.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Ce programme est distribué en espérant qu'il sera utile, mais SANS AUCUNE " +"GARANTIE. Consultez la GNU General Public License pour plus de details.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Vous devez avoir reçu une copie de la GNU General Public License avec ce " +"programme. Si ce n'est pas le cas, écrivez à la Free Software Foundation, " +"Inc.,, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "OK" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Lecture de la configuration des comptes...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Label trouvé : %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Ouverture de la fenêtre d'édition...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Création de la fenêtre d'édition...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Edition des comptes" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Nom" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protocole" + +#: src/account.c:382 +msgid "Server" +msgstr "Serveur" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Ajout" + +#: src/account.c:407 +msgid "Edit" +msgstr "Edition" + +#: src/account.c:413 +msgid " Delete " +msgstr " Suppression" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Bas" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Haut" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Défini comme compte courant " + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Ferme" + +#: src/account.c:498 +msgid "Delete account" +msgstr "Suppression du compte" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Voulez-vous vraiment supprimer ce compte ?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Oui" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+Non" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_Fichier" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_Fichier/Nouvelle _adresse" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_Fichier/Nouveau _groupe" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_Fichier/Nouveau dossier" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_Fichier/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_Fichier/_Edition" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_Fichier/Suppression" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_Fichier/Fermeture" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/Aide" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/Aide/_A propos" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Nouvelle _adresse" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Nouveau _groupe" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Nouveau dossier" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/_Edition" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/Suppression" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "Adresse E-Mail" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Remarques" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Carnet d'adresses" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Nom:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Supprime" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Recherche" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "A:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Adresse courante:" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Adresse personnelle:" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Supprime l'adresse(s)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Confirmez la suppression de l'adresse(s)" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "Non" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Nouveau dossier" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Saisissez le nom du nouveau dossier :" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NouveauDossier" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Le nom existe déjà." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Nouveau groupe" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Saisissez le nom du nouveau groupe :" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NouveauGroupe" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Edition du groupe" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Saisissez le nouveau nom du groupe :" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Edition du dossier" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Saisissez le nouveau nom du dossier :" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Voulez-vous vraiment détruire '%s' ?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Edition d'adresse(s)" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Adresse" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Annulation" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Lecture du fichier du carnet d'adresses" + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s n'existe pas.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "Fait.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Export du carnet d'adresses vers un fichier..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "Echec lors de l'écriture des données du carnet d'adresses.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Information" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Alerte" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Erreur" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Creation du dialogue d'alerte...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "Erreur d'allocation mémoire\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Ajout..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Retrait" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Propriétés..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_Fichier/_Attachement fichier" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_Fichier/_Insertion fichier" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_Fichier/Insertion si_gnature" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/_Edition/Ann_ule" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/_Edition/_Répète" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/_Edition/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/_Edition/Coupe" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/_Edition/_Copie" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/_Edition/Colle" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/_Edition/Sélectionne tout" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/_Message" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/_Message/Envoi" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/_Message/Envoi différé" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/_Message/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/_Message/_Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/_Message/_Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/_Message/_Répondre" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/_Message/_Attachement" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/Outils" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/Outils/Carnet d'adresses" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "Impossible d'obtenir le texte\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: le fichier n'existe pas\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Début du message transféré :\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Le fichier %s n'existe pas\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Impossible d'obtenir la taille de %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Le fichier %s est vide\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Message: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [Edition]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - Ecriture de message%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Ecriture de message%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Destinataire non spécifié." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Mise en file d'attente" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Une erreur est arrivée pendant l'envoi de message.\n" +"Mise en file d'attente de ce message ?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Impossible de mettre ce message en attente." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Une erreur est arrivée pendant l'envoi de message." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Impossible d'enregistrer de message dans l'outbox" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "impossible de changer les droits du fichier\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "" + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "impossible d'écrire les entêtes\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "Enregistrement du message envoyé...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "Impossible d'enregistrer le message\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "Impossible d'ouvrir le fichier des marques\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "Mise en file d'attente des messages...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "Impossible de mettre ce message en attente\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Impossible d'ouvrir %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "Message-ID créé : %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME type" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Taille" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Création de la fenêtre d'écriture...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "De:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Envoi" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "Envoi du message" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "Envoi différé" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "Mise en file d'attente et envoi différé" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Brouillon" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "Insertion" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Isertion de fichier" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "Attachement" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Attachement de fichier" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Signature" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Insertion de signature" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editeur" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "Retour à la ligne" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "Couper les longues lignes" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Type MIME invalide." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Le fichier n'existe pas ou est vide." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Propriétés" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Encodage" + +#: src/compose.c:3065 +msgid "Path" +msgstr "Chemin d'accés" + +#: src/compose.c:3066 +msgid "File name" +msgstr "Nom du fichier" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "La ligne de commande d'editeur externe est invalide : '%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Fichier temporaire: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Impossible d'écrire dans le fichier\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Choisissez un fichier" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Annule le message" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Ce message a été modifié. Voulez-vous l'annuler ?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Annule" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "vers Brouillon" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Choisissez un dossier" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/Création d'un _nouveau dossier..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/_Renomme le dossier..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/_Détruit le dossier" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/In_scription au newsgroup..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/Supp_ression du newsgroup" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/Suppression du serveur de _news" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Dossier" + +#: src/folderview.c:234 +msgid "New" +msgstr "Nouveau" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Non lu" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Création de la vue des dossiers...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Enregistrement des infos du dossier...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Enregistrement des infos du dossier..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Analyse du dossier %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Analyse du dossier %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "" + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "Inbox" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Outbox" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "File d'attente" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Poubelle" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Dossier %s sélectionné\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "%c n'est pas valide dans le nom du dossier." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "Le dossier '%s' existe déjà." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Saisissez le nouveau nom pour '%s' :" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Changement de nom du dossier" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"Tous les dssiers et messages sous '%s' vont être détruits.\n" +"Voulez-vous vraiment continuer ?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Suppression du dossier" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "Impossible de supprimer le dossier '%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "Abonnement news" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "Saisissez le nom du newsgroup :" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "Le newsgroup '%s' existe déjà." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Supprimer vraiment le newsgroup '%s' ?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Suppression du newsgroup" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Supprimer vraiment le serveur de news '%s' ?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Suppression du serveur de news" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Newsgroups:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Sujet:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Création de la vue des entêtes...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(Pas d'expéditeur)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Pas de sujet)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Création de la fenêtre des entêtes...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Tous les entêtes" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "Affichage des entêtes de %s ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - tous les entêtes" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Création de la vue de l'image...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Impossible de charger l'image." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "La connexion IMAP4 vers %s:%d a été coupée. Reconnexion...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "création de la connexion IMAP4 vers %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "Le message %d a déjà été caché.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "Récupération du message %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "dossier source identique à la destination.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Déplacement du message %s%c%d vers %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "Impossible de faire une enveloppe\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "Une erreur a eu lieue pendant la lecture du enveloppe.\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "Suppression du message %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tSuppresion de tous des messages en cache... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Impossible de se connecter au serveur IMAP4: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "Import" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "Import de fichier :" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Répertoire de destination :" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr " Choisissez... " + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Choisissez le fichier d'import" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Récupération des nouveaux messages" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Saisissez le mot de passe" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "Récupération des nouveaux messages du compte %s ...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s : Récupération des nouveaux messages" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Connexion au serveur POP3 : %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Impossible de se connecter au serveur POP3 : %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Impossible de se connecter au serveur POP3 : %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Autorisation acceptée" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Récupération du nombre de nouveaux messages" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Récupération du message (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Suppression du message" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Fermeture" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "Un message n'a pas été reçu\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Une erreur est survenue pendant le traitement du mail." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "Plus de place sur le disque." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "Pas de message dans la boite locale.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Récupération des nouveaux messages de %s dans %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Création de la fenêtre de log...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Log Protocol" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Le fichier '%s' existe déjà.\n" +"Impossible de créer le dossier." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "" +"La fenêtre de composition de message existe.\n" +"Voulez-vous vraiment quitter ?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "" + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_Fichier/_Mise à jour de l'arbre des dossiers" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_Fichier/_Import de fichier mbox..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_Fichier/Enregistre _sous..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_Fichier/Im_prime..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_Fichier/E_xit" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/_Edition/Recherche" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/_Vue" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/_Vue/Arbre des dossiers" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/_Vue/Vue par _message" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/_Vue/Barre d'ou_tils" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/_Vue/Barre d'ou_tils/Icones et texte" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/_Vue/Barre d'ou_tils/_Icones seules" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/_Vue/Barre d'ou_tils/_Texte seul" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/_Vue/Barre d'ou_tils/_Non affichée" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/_Vue/Barre d'état" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/_Vue/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/_Vue/Séparation de l'arbre des d_ossiers" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/_Vue/Séparation de la fenêtre des messages" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/_Vue/Jeux de _caractères" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/_Vue/Jeux de _caractères/Détection _automatique" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/_Vue/Jeux de _caractères/___" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/_Vue/Jeux de _caractères/7bit ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/_Vue/Jeux de _caractères/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/_Vue/_Code set/Europe de l'Ouest (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/_Vue/_Code set/Europe Centrale (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/_Vue/_Code set/Europe de l'Ouest (ISO-8859-_1)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/_Vue/_Code set/Europe Centrale (ISO-8859-_2)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/_Vue/_Code set/Europe de l'Ouest (ISO-8859-_1)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/_Vue/_Code set/Europe de l'Ouest (ISO-8859-_1)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/_Vue/_Code set/Europe Centrale (ISO-8859-_2)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/_Vue/Jeux de _caractères/Japanese (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/_Vue/Jeux de _caractères/Japanese (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/_Vue/Jeux de _caractères/Japanese (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/_Vue/Jeux de _caractères/Japanese (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/_Message/Recupère nouveau courr_ier" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/_Message/Récupèration de tous les comptes" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/_Message/Envoi des messa_ges en file d'attente" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/_Message/Création d'un _nouveau message" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/_Message/_Répondre" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/_Message/Répondre à_ tous" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/_Message/Trans_fert" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/_Message/Transférer en tant qu'a_ttachement" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/_Message/Déplacement" + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/_Message/Suppression" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/_Message/_Marque" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/_Message/_Marque/_Marque" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/_Message/_Marque/Démarque" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/_Message/_Marque/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/_Message/_Marque/Marque comm_e non lu" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/_Message/_Marque/Marque comme lu" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/_Message/Ouvrir dans une nouvelle fenêtre" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/_Message/Affic_her tous les entêtes" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/_Message/Rée_dition" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/Ré_sumé" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/Ré_sumé/Suppression des messages en _double" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/Ré_sumé/Tri des mess_ages" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/Ré_sumé/E_xécution" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/Ré_sumé/Mise à jo_ur" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/Ré_sumé/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/Ré_sumé/_Précédent" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/Ré_sumé/Suiva_nt" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/Ré_sumé/Suivant non lu" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/Ré_sumé/Autre dossier" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/Ré_sumé/Tri" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/Ré_sumé/Tri/Tri par _numéro" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/Ré_sumé/Tri/Tri par ta_ille" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/Ré_sumé/Tri/Tri par _date" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/Ré_sumé/Tri/Tri par expéditeur" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/Ré_sumé/Tri/Tri par _sujet" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/Ré_sumé/Tri/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/Ré_sumé/Tri/_Attraction par sujet" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/Ré_sumé/Vue par _thread" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/Ré_sumé/Vue non t_hreadée" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/Ré_sumé/Cho_ix des éléments affichés" + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/Ou_tils/Fenêtre de log" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/_Configuration" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/_Configuration/Préférences _communes..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/_Configuration/_Préférences par compte..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/_Configuration/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/_Configuration/Création d'un _nouveau compte..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/_Configuration/_Edition des comptes..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/_Configuration/C_hangement du compte courant" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/Aide/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Creation de la fenêtre principale...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "Fenêtre principale : allocation de la couleur %d a échouée\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Sans titre" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "rien" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Compte courant : %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "position de la fenetre : x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "Rajouter une boîte aux lettres" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "" + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Boite aux Lettres" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "Définition des widgets..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Récupère" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Incorporation du nouveau courrier" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Récupère tout" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Récupère tout pour tous les comptes" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Envoi les messages en attente" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Création" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Création de nouveau message" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Répondre" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Répondre au message" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Transfert" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Transfère le message" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Détruit le message" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Exécute" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Exécute les commandes marquées" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Message suivant non lu" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Préférences" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Préférences communes" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Compte" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Paramètres du compte" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Quitte" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "Quitter le programme ?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "L'envoi des messages en attente a échoué." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "Jeu de caractères forcé : %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Récupération des messages de %s dans %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "Impossible de lire le fichier mbox.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "Format mbox invalide : %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "mbox mal formée : %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "Impossible d'ouvrir un fichier temporaire\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"From 'unescaped' trouvé:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "Impossible d'écrire dans le fichier temporaire\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%s messages trouvés.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "Impossible de créer le fichier verrou %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "Utilisation de 'flock' à la place de 'file' si possible\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "Impossible de créer %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "mailbox utilisée par un autre process, attente...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "Impossible de verrouiller %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "Type de verrou invalide\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "Impossible de déverrouiller %s\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "Impossible de vider la boite aux lettres.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Création de la vue Message...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "Impossible de copier le message de %s à %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Impossible d'ouvrir le fichier des marques.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "" + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Dernier numéro dans le répertoire %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tRecherche des messages non cachés... " + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d message(s) non caché(s) trouvé.\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tTri des messages non cachés par ordre numérique... " + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/_Ouvrir" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/Afficher comme du texte" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/Enregistrer _sous..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME Type" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Création de la vue MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Impossible de lire une pièce d'un message multipart" + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Impossible d'enregistrer une pièce d'un message multipart" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Enregistrer sous" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Ecraser" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "Ecraser le ficheir existant ?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "La ligne de commande du viewer MIME est invalide: '%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "Création de la connexion NNTP vers %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "La connexion NNTP vers %s:%d a été coupée. Reconnexion...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "L'article %d a déjà été caché.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "Récupération de l'article %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "Impossible de lire l'article %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "Impossible de récupérer l'article %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "Impossible de définir le groupe : %s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "Intervalle d'article invalide : %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "Pas d'article.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "Exécution de xover %d - %d sur %s...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "Impossible de faire un xover\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "Une erreur a eu lieue pendant la lecture du xover.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "Ligne xover invalide : %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "Suppression de l'article %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tSuppresion de tous les articles en cache... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "Impossible de se connecter au serveur NNTP : %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "Error de protocole : %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "Erreur de protocole\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "Erreur lors de la demande d'autorisation\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "Le 'timestamp' APOP n'a pas été reçu\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "Erreur de syntaxe du 'timestamp' dans la bannière\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "Erreur de protocole POP3\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Lecture de la configuration...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "Trouvé: %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Fin de lecture de la configuration.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "Echec d'écriture de la configuration dans le fichier\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "La configuration est sauvegardée.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Appliquer" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Ouverture de la fenêtre de préférences du compte...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Compte%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Préférences du nouveau compte" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Préférences pour chaque compte" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Création de la fenêtre de préférences du compte...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Basic" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Réception" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Avancées" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Nom de ce compte" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Compte courant" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Informations personnelles" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Nom complet" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "Adresse de mail" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organisation" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Information serveurs" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normal)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOP auth)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Aucun (local)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "Serveur de groupes de discussion" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Serveur de réception" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "Serveur SMTP (envoi)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "Nom de l'utilisateur" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Mot de passe" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Suppresion des messages du serveur une fois reçus" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Réception de tous les messages du serveur" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "Réception sur tous les comptes" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Filtrage des messages à la réception" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Entête" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Ajout du champ Date à l'entête" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Génération de Message-ID" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Ajout de champs définis" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "Edition..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Définition automatique des adresses suivantes" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Répondre à" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Fichier de signature" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Indiquez le port SMTP" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Indiquez le port POP3" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Indiquez le nom de domaine" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "Adresse de mail non saisie." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "Serveur SMTP non indiqué." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "User ID manquant." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "Serveur POP3 non indiqué." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "Serveur IMAP4 non indiqué." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "Serveur NNTP non indiqué." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Création de la fenêtre des préférences communes...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Préférences communes" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Affichage" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filtrage" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "Vie privée" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Interface" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Divers" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Programme externe" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Utilisation d'un programme externe pour l'incorporation" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "Chemin du programme" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Spool local" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "Incorporation à partir du spool" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Filtrage à l'incorporation" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Répertoire de spool" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Contrôle automatique de nouveau courrier" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "chaque" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "minute(s)" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "Recherche de nouveau courrier au démarrage" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "Groupes de discussions" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"Nombre maximum d'articles à récupérer\n" +"(pas de limites si 0 est spécifié)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "Utilisation d'un programme externe pour l'envoi" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "Sauvegarde des messages envoyés dans l'outbox" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "Mise en file d'attente des messages non envoyés" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Jeu de caractères en sortie" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Automatique" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7bit ascii (US-ASCII)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Europe de l'Ouest (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "Europe Centrale (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "Japonais (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "Japonais (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Citation" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "Citer le message en répondant" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "Caractère de citation" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Format de citation :" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " Description des symboles " + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Insertion automatique de la signature" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Séparateur de signature" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "Couper les messages à" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "caractères" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "Couper citation" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "Couper les lignes avant d'envoyer" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "Règles enregistrées" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "Opération" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(aucun)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Mot-clé" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Prédicat" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "contient" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "ne contient pas" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Destination" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Utilisation d'expression régulière" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "Ne reçoit pas" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "Enregistre" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " Remplace " + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "Police" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Message" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "Affiche le nombre de messages non lus près du nom de dossier" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Coloration des messages" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Affiche les caractères codés sur 2 octets avec un alphabet codé sur 1" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "Affiche des entêtes courts dans la fenetre des messages" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Espacement des lignes" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "pixel(s)" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "Espace laissé en tête" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Traduction des entêtes (comme 'From:', 'Subject:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Affiche destinataire dans la colonne 'From' si vous êtes l'expéditeur" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "Activer la scroll bar horizontale" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr " Eléments affichés dans le résumé... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "Crypter le message par défaut" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "Signer le message par défaut" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" +"Simulation du comportement des mailers Emacs\n" +"lors des opérations avec la souris" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Ouvrir le premier message non lu en ouvrant un dossier" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"(Les messages seront marqués jusqu'à l'execution\n" +" si c'est désactivé)" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "En quittant" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Confirmer en quittant" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Navigateur externe (%s sera remplacé par l'URI)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "Commande" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Impression en cours (%s sera remplacé par le nom du fichier)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Editeur externe (%s sera remplacé par le nom du fichier)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "Description des symboles" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Lecture de la configuration de filtrage...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "Ecriture de la configuration de filtrage...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(Nouveau)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Destination non définie" + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Le nom de l'entête n'est pas défini." + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "Suppression de règle" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "Voulez-vous vraiment détruire cette règle ?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Choix des éléments à afficher" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Marque" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Numéro" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Date" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "De" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Sujet" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "DimLunMarMerJeuVenSam" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tPas de fichier cache\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tLecture du cache du résumé..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "Version du cache différente, suppression.\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tMarquage des messages..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d nouveau(x) message(s)\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "Fichier des marques non trouvé.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "Version de marques différentes (%d != %d). Suppresion.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "Impossible d'ouvrir le fichier des marques en mode 'append'.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "Impossible d'ouvrir le fichier des marques en mode 'write'.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "L'envoi des messages en file d'attente a échoué.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "La ligne de commande d'impression est invalide : '%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "Création du dialogue d'avancement...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "Une erreur est survenue pendant la récupération des données.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "Impossible d'écrire dans le fichier.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "L'entête du message en attente est corrompu.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Connection au serveur SMTP: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "Impossible de se connecter au serveur SMTP: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "Une erreur est arrivée pendant l'envoi de HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "Recherche" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Distinction majuscule/minuscule" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "Recherche arrière" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Efface" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "La recherche a échouée" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "Chaîne recherchée non trouvée." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Début de liste atteinte, reprise à la fin ?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Fin de liste atteinte, reprise au début ?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Recherche finie" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/Déplace..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/_Copie..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/E_xécute" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/_Marque" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/_Marque/_Marque" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/_Marque/Démarque" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/_Marque/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/_Marque/Marqu_e comme non lus" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/_Marque/Marque comme lus" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/_Répondre" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/Transfert" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Affic_h tous les entêtes" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/Im_prime..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/Sélectionne tout" + +#: src/summaryview.c:320 +msgid "M" +msgstr "M" + +#: src/summaryview.c:320 +msgid "U" +msgstr "U" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Création de la vue Résumé...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "Non." + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Traitement des marques" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Il reste des marques, voulez-vous les traiter ?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"dossier vide\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Analyse du dossier (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "Fait." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "Pas de message non lu" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "Pas de message non lu. Passage au dossier suivant ?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Tri des messages par sujet..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d détruit" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d déplacé" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " élément(s) sélectionné(s)" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d nouveau(x), %d non lu(s), %d au total (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d nouveau(x), %d non lu(s), %d au total" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Tri du résumé..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tDéfinition du résumé à partir des données du message..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "Définition du résumé à partir des données du message..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "Ecriture du cache résumé (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(Pas de date)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Le message %d est marqué\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Le message %d est marqué lu\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Le message %d est marqué non lu\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Le message %s/%d sera détruit\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "Le dossier courant est la Poubelle." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Suppression des messages en double..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Le message %s/%d est démarqué\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Le message %d est marqué pour déplacement dans %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "La destination est identique au dossier actuel." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "" + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Impression" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Saisissez la ligne de commande d'impression:\n" +"('%s' sera remplacé par le nom du fichier)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"La ligne de commande d'impression est invalide:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "Construction des threads..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "Suppression des threads..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "Suppression des threads pour exécution..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "tri en cours..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "Tri en cours..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "Aller à %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Création de la vue Texte...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "Pour sauvegarder cette pièce, activer le menu contextuel avec\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"un click droit et sélectionnez 'Enregistrer comme...' ou appuyez sur 'y'.\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "Pour afficher cette pièce comme du texte, sélectionnez\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"'Afficher comme du texte' ou appuyez sur 't'.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "" +"Pour ouvrir cette pièce avec un programme externe, choisissez 'Open',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" +"ou double-cliquez, ou cliquez avec le bouton du milieu ou appuyez sur 'l'." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "L'écriture dans %s a échouée.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "La ligne de commande Open URI est invalide : '%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/Ré_sumé/Sélectionne tout" + +#~ msgid "Clean trash" +#~ msgstr "Nettoyage de la poubelle" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/_Marque/Marque comme _important" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: l'allocation de couleur a échouée\n" + +#~ msgid "can't set mailbox: %s\n" +#~ msgstr "Impossible de définir la boite aux lettres : %s\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "MIME type invalide\n" + +#~ msgid "Reply-To:" +#~ msgstr "Répondre à:" + +#~ msgid "%s - Compose message [Edited]" +#~ msgstr "%s - Ecriture de message [Edited]" + +#~ msgid "/_Add news server" +#~ msgstr "/_Ajout d'un serveur de news" + +#~ msgid "deleting folder %s ...\n" +#~ msgstr "Suppression du dossier %s ...\n" + +#~ msgid "deleting newsgroup %s ...\n" +#~ msgstr "Suppression du newsgroup %s ...\n" + +#~ msgid "Input adding news server:" +#~ msgstr "Saisissez le nom du nouveau serveur de news :" + +#~ msgid "The news server `%s' already exists." +#~ msgstr "Le serveur de news '%s' existe déjà." + +#~ msgid "deleting cache folder of %s ...\n" +#~ msgstr "Suppressio du dossier cache de %s ...\n" + +#~ msgid "Next unread" +#~ msgstr "Suivant non lu" + +#~ msgid "Previously selected folder: %s\n" +#~ msgstr "Dossier précédemment sélectionné : %s\n" + +#~ msgid "New directory" +#~ msgstr "Nouveau répertoire" + +#~ msgid "The directory not found. Create it?" +#~ msgstr "Répertoire non trouvé. Faut-il le créer ?" + +#~ msgid "Can't create directory." +#~ msgstr "Impossible de créer le répertoire." + +#~ msgid "Selected name isn't a directory." +#~ msgstr "Le nom choisi n'est pas un répertoire." + +#~ msgid "Writing mail folder list..." +#~ msgstr "Ecriture de la liste du dossier mail..." + +#~ msgid "Writing imap folder list..." +#~ msgstr "Ecriture de la liste du dossier imap..." + +#~ msgid "Writing news folder list..." +#~ msgstr "Ecriture de la liste du dossier news..." + +#~ msgid "Reading folder %s ..." +#~ msgstr "Lecture du dossier %s ..." + +#~ msgid "Mail Server (IMAP4)" +#~ msgstr "Serveur aux Lettres (IMAP4)" + +#~ msgid "NetNews" +#~ msgstr "Forums de News" + +#~ msgid "reading folder list %s ..." +#~ msgstr "lecture de la liste du dossier %s ..." + +#~ msgid "Broken folder list cache.\n" +#~ msgstr "Cache corrompu.\n" + +#~ msgid "Select destination directory" +#~ msgstr "Choisissez le répertoire de destination" + +#~ msgid "can't drop message into %s\n" +#~ msgstr "Impossible de mettre le message dans %s\n" + +#~ msgid "%s exists\n" +#~ msgstr "%s existe\n" + +#~ msgid "can't move tmpmsg to %s\n" +#~ msgstr "Impossible de déplacer tmpmsg vers %s\n" + +#~ msgid "IMAP session is not established\n" +#~ msgstr "La session pour les IMAP n'est pas établie\n" + +#~ msgid "news session is not established\n" +#~ msgstr "La session pour les news n'est pas établie\n" + +#~ msgid "Unlinking message %s in trash...\n" +#~ msgstr "'Unlinking' du message %s dans la poubelle...\n" + +#~ msgid "Connecting to %s ..." +#~ msgstr "Connexion à %s ..." + +#~ msgid "Enable thread view on summary" +#~ msgstr "Autorise la vue 'threadee' pour le résumé" + +#~ msgid "Not yet implemented." +#~ msgstr "Non encore implémenté." + +#~ msgid "/_Summary/Unsele_ct all" +#~ msgstr "/Ré_sumé/Désélectionne tout" + +#~ msgid "" +#~ "Date\n" +#~ "from\n" +#~ "Subject\n" +#~ "To\n" +#~ "Message-ID\n" +#~ "%" +#~ msgstr "" +#~ "Date\n" +#~ "de\n" +#~ "Sujet\n" +#~ "A\n" +#~ "Message-ID\n" +#~ "%" + +#~ msgid "Printing" +#~ msgstr "Impression en cours" + +#~ msgid "/_Mark/Mark _all" +#~ msgstr "/_Marque/M_arque tout" + +#~ msgid "/_Mark/U_nmark all" +#~ msgstr "/_Marque/Démarque tout" + +#~ msgid "/_Mark/M_ove marked" +#~ msgstr "/_Marque/Déplace les éléments marqués" + +#~ msgid "/_Mark/_Delete marked" +#~ msgstr "/_Marque/_Détruit les éléments marqués" + +#~ msgid "Invalid month\n" +#~ msgstr "Mois invalide\n" + +#~ msgid "/U_nselect all" +#~ msgstr "/Désélectio_nne tout" + +#~ msgid "/_Message/Reply with _quotation" +#~ msgstr "/_Message/Répondre avec '_citation'" + +#~ msgid "/Reply with _quotation" +#~ msgstr "/_Répondre avec 'citation'" + +#~ msgid "queueing message that failed to send...\n" +#~ msgstr "Mise en file d'attente des messages non envoyés...\n" + +#~ msgid "allocated mainview size: width = %d, height = %d\n" +#~ msgstr "taille de la vue principale : largeur = %d, hauteur = %d\n" + +#~ msgid "allocated mainwin size: width = %d, height = %d\n" +#~ msgstr "taille de la fenêtre principale : largeur = %d, hauteur = %d\n" diff --git a/po/it.gmo b/po/it.gmo new file mode 100644 index 0000000000000000000000000000000000000000..bfb5b42859394d53909431fbdb4976c22f09b783 GIT binary patch literal 58936 zcmb`w34EMY^~XKz5cYkCho!WICTZDQ*3hOU&@`n<*>O5aCh5>*Cd_2Ipn^MYsE7-S zii(OT3MekPFNh23A4S9k5fJ_3Ul4c2_5J?Nx%Zi8l1cINzVCec^!MC*&)v^G_uO;u zbMwd^TfaHSZ-=dNxr4yr{c^cox6b8mn=jv7?#VNAxjn&OgNK3t3V3K&E(d9@3)~gF z7~CJc98AEMfwRE(gA2g>K&AgLP)Q$fRxWo0crJJxSOMF?o59n-?}6KcyDs*8_5*jo zy#U-1JOw-$Tm~j!5!?xU1t_}f!QH`kf?I&MgKglQpz8BE@Idf>Fae(e4*_>x;`Nya z?t}YOQ2F(Pdw_XR=~O|*e<7&!-Uc2Iegx!S?s5Lx2AtjP<!KLi5~y-^f!l&Bz^%a5 z;FjP;;MU-!pz<$(s?SF70PrQj{Z4Ra+_!*A?-QWP`4w<4@VlVe?-$_S;8Wmk;Fe20 zd{1x}+;c$1KM7QOEdiD8`JmztgX-ULQ1yHvI2*hUJPN!!;G^JSxVKxD%N+yG1y%0V zpwh{MN@p#od^UpHg0BYEp4WjY|2sgX^FdJU{Vi}`@MoaP`Dak&+wyF8?*^(K2M6~& zQ0XoNmF}6r|6EY~dLgKKTmdTmmxC(L4Z;6Ipwj;WsC2&#D&L=i>hC8(#oxNe+jBoq z>C6SyKc|8_fER!&M*&nh)`Cj61}fbbgR0jXK$Yu*py<C0ivAm*`1=7+eDHfv<=Fll zkH0s#1MVY1rP~3De@_LE051VmuB$<%^F~nhyaQA{z5*TzJ_4#7Tb-NB9SR-@ieF9% z?(;y^>k3ficrB=OZU$A4Pk_q*p5Xs|Q29O)@UNiyy=}R-+X0~R=>U%cSAfc|4yqil z0mY{`gKFoyK*j$CsC<3|s-1oXwt-Iv|G$CT<KDK{^WQb#;ox@op8)Ozo(8J^=YVRz z5pZX40#v!L0@aS!1-t`P|NIX)3w#n(d+f5p+jTCeaxV**2UXq;pvr#@sP?}x;N76= z{}7mfe+~Zo^?ARY2&$bg2G!12fU56HL6z^-pvLz*gZpD4{A-}v<J+L*>_edP{S&D6 z++(H3I|7`I`(#k{Sp#;0uL%C14EP8rKHBy?WCVCLD1PY&=Yku9|9e5v-3Kb&XF!eL zeOGz<3&D2Wd9VY#7Muru4pjgD8WjC*{a%h^L6v(DRQQX)J;7T*)%&yH9^n1puHY{~ z_17Ok@zEXwUjI3u+}!~$0o9IIfZKo@LGi^^;053-z&*i7K$Y(gpwd5dwev|QC^@|l zRJx~uJA(b7`acgUy$zuF>}pW__*(FM@Xet5=P6M6{}ohu{sk(Xts$~@0M#$Yg1dkh zf(jo6RlXW1zP$z%-F4v3;HN;9_iLcq<3VsQ@K2!P?LZ}!@4=wzaRjJ&W;Uq)nFosQ zVo>~E29E)+0hQ0kLG}NSLG|~)gZuCc-G3P<z8C{FKHdT<|2skP&%NN@;4`4|+2$hW zm;FKYa~HS|xE9<Gyc$${+yE-w&wz^m1gLiVJE->A;$ojScLP<gJwfr$zTp1g383Qj zfvSHo;5tzGTmh=zUJZ(`-Uuq)_k+8GcZKkKgZsOn%Ks=Re*Y7w@*i}Gr?(hXKU@l` z{A1wZ;Ojv3%bno9;QgTL`y`lv{{fX=a;eLQvq7c17CaDqJ*e`2IN&|t0l0q#D!so2 z-0d=_n**x;UEo3BC7|dx2LJ0p<^K_I0=x%Qy-s+Z$L|5vZiArOVPn8ogUat6p!nx5 zkgRiegX))k@}ADYpxSW(sCGRQ6rc77cLCfD_arF(etGb}4m=e1`#^=?1FD=4f}(pW z`2P)5Id)j%?Q|HZemomg`>zb{HQ++rYr&Jj_k!Z*pMv76EehWL#{^ss9*zGvsQ$PC zRJp$ds=nU^#YYc-s^5=;|C6BTo(47k{{gDJ+YkD<-wRZK915zP7J{dNXM*aVs{-B# zN^X1_RDXRL)cAZDTmrTYdH#Li!MIn0^T8UZdc6-k9Q+oj`aKQyg8L3TeGybUy%ani zd=04f{Svq}_z<Z6dKgT=XTamY-HJ}X1nj`Q2~_`l5LEoTLGj7`A^dUhP~5wZxV%~b zs-CBS>bDDn{{*P^x)MylYrr>x9|X4rPZ{;}&jMAxi$Jye^T6%EaZr3)2X_Ep1*%-v zgQ9;QxD9w~2)`W^AKVQp-XFlNz-`xhdTrp5xc30(fG2^6fNMade>JH5Uj-fo-T<n- zz6h$k-v?E{AA`#G_h1+JS5WeBVaeNJ1t|J;p!l^4ivA^_+Vhp5=x+j5p1VMe{~v?O z{|}(rbBoK-VZcK`@x#kO`QIGeUkdI=K;`!jP<*-NI&Y_4K-KS1a0l>oQ1v+*RDWIq zsyySM%JVXC0(={&^xDR}-F636kNrW(tGS@sw;OB&F9Np*hru1eaZvF$fm?tt0@YtH z0acD`0$vBs#eE~V6Zkby_4_`!9rz5WeE$m02DcmcbUH!Fuj9cJz;nPe!54vw_vH}& zP4EcZKL^FHTa}#;j{xOf0%{x%gDUscA^bJqnYeEQRo|yUm4Andx6>}5`tt}-{52O; zJG6tU-^l^b0@W_dLB(GUDxZr3js&cR@T)+z>r25c!M6tY+re45KMJb<egLZf{uew3 zd=^wWX3=>&fpbB%|A_%l1C`zqQ0=n}R6F;9M}cGDeDHcu?Q&1>e*#qbcf7*W-3wH` z4+E9{Y;ZTQ15~}w0L8~Wpz1pq!bicKac>00XRiR&t~Y{ew@-n}=PRJ%-3Kb&`$5q^ z2JR021ynxUSH1jufJ&zmRJqO#cpj*JzW_WEd_LF?z8h5izYD6Jei-l<pz{A+z-NR1 zmNk#RE2#932M+@m1-ukgysH9U1FC#)09D?%gS&vYfhy-`13m<bpZ^GI-Z*g5`SOH- z=Yy*E22lL@T2TFR3n)48bx`B_mtYULb=~W=0+j#xpz2)*mG9d@mGhIJ+VzW|+Tngs z{qiGF<@r@`@3P+Odl0Dl91g0z=7D>G3qhr~0_*@U0L4$Q03{!9236kAf_s2J1yzpU zg37mTgS+<tm0kz954adqeJ=+01?!;r>{?Led=t1U_+C(a_OTFtAE<HleNg#565PKB z74Ki*-r$ZKz5a)RYWHJ7@!N7xe0UzHdR_{uJS9-=`65vDxd~Kxz6h$^_kvbGQ0@9# zQ1Si)?hEd-$@`%L6kR_k{}E8_dKD=CcqO<e_*PKu^kGot`Z_oaej7}{1y_1Ht3cJK z2#U|1AMjdG>D&aWojwk#y}t^ozwQg+KL8c~Nl@kbH>mpU{(QzLxB$Ee{17PrtzY2z z9|`V<yBj<ld>;4<@Wr6yQ1OMi-2Z{sfscbPxXQ<2{%T+Uy%and|Br+7!KXmUt%G0W z{eBpD5bjgK<G_nRjk{|>wfFU)=93SCs^5n|^~YyG#rra-_Iw0XeV+y;_x=K^-Jb>3 zKfAx!<=z}H!QBU{KPEu6*Oj2?Ujm9B-VUmqw}kKyg9qdOIH>mi9;ovC5)>c&8B{s8 zeTk>PHz@iOL8UVQegnJ^RQiX#)XUQma5bp<ya1d9z75oP{vxRIKLM(I{{Yo4d%n!+ z=YYz;8$19!A5=N607d^IQ02V=+#kFR6#c!R=pF*a7rz1(|DT}f_I<hMvj9~8F9lVO ze8Baf=&l8i0B->m|2|Op{R&jPzk{mRp0Dt6H6K*@`@jSo234My2miN#8h;-KH9o%u zs$U-jC9fU<j{>*7#_QJ}up8V4|I5H_!69&K@N!V~tbhr46*wEb2|N<~I;ixX0uKlG ze5LCrCxUXX0TupIQ2q8HQ1$y1sCwTAsvVvI)jm7C$}s^I?<DY0@Oc5R0yX~L1*(1S z1l3R90_TH|gGztTS9|$pgFE0}4ys+w2Q~idpz3!GC^`6A@O1D7aC`6}Q2hBQsPujZ zs@=DKjgQCuLFKy&oC{tKD&CtwmFu10G2kb`1biG+{kD27`qvipHK_hxd99Dzb>ITr zH-VC8-viYyPlI#7?Ox|N9~9k1;A!A%K(+HX!4trzK(*`PulM!IQm`HO^TBTLR#5Hn z45;!y8{E6U!Tb3@Q1v-F-~hNY?yJBy@U@`Y;jJLm$lV62Uq1?J9DEi$4E!Fb{`(`S z@*QxU=XV;YdaVYPZUx*Gd|_~33#z|w1XaGzf(yY1z@^~MZ*+Mx0PceOQgBCb9k@HV z0aQP{3fu~OBe*5_7Et~DHc<WZE>Luz0+r8~g8N6H(s>Nr4g4dhe73$mj6+cI=7Xxo zLQw6|532ra!9BpMK&5jXD89QHRC-?lRqqFa`!P`Q{{S8hZucf1U&n%Kzl%Zj$BRMn z(}%(Bz=uHf<Ih3m_iJ!Z@Sote;BIgB{@NE*`40!x4+}umcK{Thje#o9D?#<cTR`>a z2ZH~{gZs;%()}(dK6o(rKME?nrvq;D7U%PW!M*T59#pw{K$YV%Q2C63%I5{3`ukPj zKH#mO+U-l=-r)B^@&A*c>bv_}z5WM+D#sC^=sG~P?-J1X3zXcffNHPTg5r}mftpv| z9q<dF%Jnd)^8N-CUG4@i=T4yH+(Dq)uM1RthQZn3#^8Q8nBcxE_&*3LpMM4Sfp7Ej zEC$uDYe3cO8c=fJ4p8ad2dW-F2h~o$168iv+r6H9gK{4Os^8B9_W}DsrFS_fKDr*< zAN&HS_Wcp4cKRE*FSyH%9{(s%^<N08f6oTR-+jUVLQw5K3aWfpfXeUXpxXZ(pvrj* zcp&(x;Qs)qbRPj#&Zj|@FZT|gpXY)H;Oqm{9+!g$g4cm+=Z}CIH}``H_zb9Yc6+Di ze*`Eww+K{yp9jtYUj?dPZU>d$L&2SUmyi27pxUnsR6m~&9s~}8s^8VYeLX0?xdRm4 zr$NcJdqB14uRyiuwl{e@9|X?BeIj@aI0POKzCO6`0o!r^4%B!)<lVjwI2)9E12`Xi z57-HQA5^`ze2>$$gR0l1pwfRCcpP{~z$d^3xc7Unr*{shcAW%I0&fJB-UFb@`EPJP z@R*w&mw@7n%YwTOD!<o(hk~C3mEI47`(L2yfAIU9Z;k^so)>{?w`JhvU>_*D&ww4^ z{h-?aKcM((ulGB@9RePKdp0QkKNnPaF9k(+4JiJ+4itah0A2vT2NYjC3o758KHzkF zf$Fyd!Nb7W;89=?D88Hscr}>dejV5b-VUmqp8>_!zXny_XThVuU2gIEoB+!ITu|}W zfLnp<z^%awsCJ(O#n-oiD#tfKrT>4R_+kGKdVeef)vuGm{qBI@0Y(4!;GTP{x6}Ec z`uj@o5b!ooe0(3Me4hkQ0Fw{-csd_cKW+k#2HysXf9?Sf2LA?b2k!G>A76)nTjD+e zRJ~3HMRzKw{4NGn|4pFcy$;+Kd<&>@yfgTJ29!Mi3aEblL2&;vg#Q&ZegMUPd)?;k zF%LWu_eG%i^bMfe@m6pS_%(1Y_*?KuaKDeZJUI<iIWGh?p4NlMgSUWc$A>}Hd&iG@ zI%k0Dm$l$5@YUck;2pvLVeoL={|43nhu!Y(vq9y%F5nwLrSl0;?eh>g3H}9?Tv>OA z`(F)8e!dG7-+m(CH$c_%r=a-fPvGU?v!L2{_)c%1F>qJhF9VhCo50<`4}wbfZg6+- zesCA?aZv61dr<wq?Z><wj{?=+XMsC`7lWc34dE{U)lN5n>ep|B%IAULegZrh_iw<( z;E^Bqc3um1;(jN1H257*{q?tihu!6J<s7gL|0*c{dLg(C_+n7`Tmz~dZUFZL-wCQd zcY-^EUjlaozYA&}`3b0U{u#U&{3odXxZo4spPRt#alaoFe|{9yIJplz2i)qD9)ATW zK3EO5gU<)&gSUdJ&rd@5HlK3&a||fHd?~2>Zvq#A9{^RZ$AbSqLCwcoecJiwU~mEM zGr@&m6`Tj&2JR027~BW^4XFBWdAE;;eL(SdFSrA^4pjbia6j-mQ04d#sCK*)RKI@( zL`3Eu2h|R*{EVk_9jJD`9aQ_?1&ZIk3ho8o2dbSP1y!D>K*@!zKI{FqEvWuz15X0? z16AIYpvo}}ioe!@$ATLJei&4HJ_3plcKDp<vlpoGmw<bK%R$A@g9$hWichWu#dp_( zdxH;!@TWnQf0xfYfA0e-{SHv+Ed*7*<)Gxp8c^f))u7tzR#5f+3|ImG2b>L_@dcN= zqoCZc3GR=B>W7Cwwclf)#^>)q$&K6>y<SIv%C|G%Vo?2c0jPGJ0LQ><K&AI5Q0@9} zQ03a`OJ4tjLD8QMs$EtG91K_iRsR=&TYxVE)xWO*mF{Z-z8O3f_f4Sq?O{-S|65S; z_xiH8!$IJ2xEFwG_ab-zxDGrSd<D1+{359IxBH5R?+&UT=Yey<3&9h>mw?BEp9T*D zp9WRWUBBx5e=yjC`yB94@J*n~e;25F-wmo9_XqqTsCIuCRD1jeRC<2{#kbqu<MH<Z z<=!{o5dk|vjfYdfgTN)=mS6!?{|tkYXD<ZRP9FhP|1W}Pf<FPb0uTI}_tT-E_<nxC zlR%|+I;i&P0u}#UQ0*`Ro(|p!O3wTQ>;QMX*Xb95s^1cD8?Zn4Uj&NJhCtP;1|9-l z4Q>s-3l!hn3@ZLz;J)BjLAC2oL5+)lfU5ttUw7OU6rb(~s=eod8efY+mH#5}KyV0D zI#+`#*G=HI;QK+9|2A+Q_)}1FZu@UIUo8Svp0hxW$MZm?I}EBk<q*CJ6#u*uRDJFO zj|T4sB}bkBtv|o%{e1+e_zOUl|5Q-*UkR$51@H*)#h}Xbe(-ScA#g7EcW^d%<hQ)v zmxH1&f=7X`0*?gm0B3;@f-Av)fU5WM`#imVa1QSE;KATc;P&9>LGjPM!Tlpp<$DaA z5B?#9AMtIcKLJ!boeqkw7gRqy4{QS`!4tu&L6!59p!($}pz8Y<Q0=hKcieq6sCegq zs?TareE0%TeDPLL@oxv!F86`kfxiXCXMX`z{%ybO_1X{I0r!cZ%6BHH^v(l!0mne~ z@AE;m!|Oot(`}&I@vETt=1EZL|2E*iL6v8h|M7M{3RHQQgKFm*DEWLPsQSG=;LV`& z`4p&e@F1vm{S&Bq&AQ*Q3sk<Bfjfgk;BMd*pvM18K#kX%z^lObg3AA}@A>?FHmG_G zf-2{xfY*VFe=DeZ-wUeWe+;Uf9tU>^p90m7{{~h5y}s}5F$YwBz2F+~+n~~Gf56Lq z4k-E&Q1!eL{26!y*a@!x0cnCC0G|Ti|Df~X8-M8X<+I=t{QnM0?ws+E*K-n7zij}O z-y6Xb!P`Og|F6J3z~6#ffLr{?`)eyu_1Y6W20R#4{2p*8a0FC4)<E_5dQkPg5fuHM zp!oD>pwjtQ!0mqQ>Ff?F-wtpqunSaqy1@kO1@{HZpxWgXp!nkLpxXI%@M!SMU_1B} zsPY`}6Ks><!JyKA22^`&`BRryCxPPsVNmkm8c_4p?cjmn_rL^v8dSUO^03p*1(pAK zp!j73RDG`nH9l_!_Xoco!XFFn?dimQ@IM?>J_|v$*Cn9hy$BRPzYk2nuLgV~;5Lth zaRMGk_;S$Vfok9Pfhx~E;9T%GpxS@$pL;#KK!p#3YR}hzR$fr`|2nAtc?J|eKMSfo zw|vywYd)xQUk0k(t_HUS-wUe0ZUwgn?*w-PKM6`cejS_-{ti@nhdt)`^?@qq22k~R z4|pi}VDSGlsB{i}+}nFTsPcA$>W>mA`j>%+f$syA&%Iy*{uNYx_xpv*`7=PpyAV|W z)WDO#YeDtr*FcT0pMYwIwkN!tdx2`NQ$f{t02JR}0xk#Ff@-f%fZ~HMfJ*-d;342| z!7gy;UwZ%bfvRsEv~~kkt~){X*SEpL!M}kAfd~G|$0M)lPyBh-7K{b3z9l+8??2&P z`RJ#5{{z2I5%w*fdw9PG{5y|+&*Hw7_Z`4{-7B|=_gZ*=l=pW8+TfMD4EOtaRMu+< ze~kAIo^?F`;klRRb%ebXTuZpd+Dmx<J<khp>-QPnRd@Xs@~+?Q;30%>yA`$y+*j~^ zH-2Y;XW^a;ZbR7iJV)R@ov<I^r#5~7+!D9=<ZuvCn)?`jC-VMX@F1QgJRijWKRkJ! zFW^3k=XhxJdz|Ov_J+&~_)YL4!pET77u2}z3iJ|EFUS2m+;8PkpX+xd4^vPMagnRx ze>-tkg4^PL8TfhJ;?FC1^t&GS{rI=@yuiJ3-^4HB$^L$cdwKBt7q~O@`vi9{@A3CQ zc)1+>I!}eL8gy#{&4)wyMfjC@UWxnp;L$w)$NT4bUdVGF^smD22HwYb{(}2n-1B(` zalZlg%X!!DV?6KT{a@x{4+p$~@UQdi#S?#j=H=bE{}<YCg9~t<2hIZz0_TMEK7;#L zJU_(mqxc;f{9lTnezWm^Gmm~uBQ_6qgA>sGjOQ?(7liO_!2jd<GU2-hzaR2`J<lj~ zE5XI!{}6Tn&q$zo2ma^dzc0_bcs~sP7xFyAb0L2E9SdHGdkOC^;r+9`|A}W2?)UP% ziFf@@BkUI;&Qstc!T%2Ml<<CWz^B145$8qV*3h28`)$1cj`w%-{08^2xV5MF2j0KI z^E)2>5}r>Irr+*_S9vZC?p5F*?hk+kp524LXh(P^c-n&Bo1h!y{iFD8!~0Kp-+||I zxHZS>*Ny-4z>~lSc|ObYJ)W%?7hlAGA@ApahZ65Po+{5X_&p3t-oG8(0^0a{C2sw0 zg(m*~&HLj#eLNQu{%7!Pa4`f|^S&k!YCh5Lu8>AQVefIT+?M1~$F1MCU@^RZ96SU1 zo8<<-82m+dDer&7?|VEa@WkI5{NK;>N1n6r*Zgob&zEpt1s({#3jgbQJ{ICV6)>i8 z8tzAVp3k!r^gDuY;~C<8JIeZX@N}LNc`7{m{TA#8SD4HHdus@jYhmy&k<L>5{{ZUO z1Fq&7!EYAsoq0Zu``h3scrCbrN53CK^Ln1=@$5sGez)<y)L(OD@I$znj&id>{WRbG z1lm);OL!g*{^KG3-r$FMG`~F#o(8@P+=@rPT>||q+<S-j*LYCwg}4vpeFL~X&lb@9 z1-ygj13dbD4g4+m3c{WQKLOr|-*!A#@vh%Xcs|Xu9`|d(PZIV)-v7e;j=Uci=uQRa z^L!2e%XswL5BDE=9^ldMjo@S8KY0Gd`-9+Xz&&`F-tD(jz#rhJUlPz=@F4Dsaa;oa zI(Yt)_a}G`3+{Q8>kGIS^ZW_FSK!v~ynws%elt&*aQ%9Cz8u0f^8TaXudokg-sRTs z`_Miw_<sfWUFPfmeKn+W1>t)Jn)Sg?6uSh!pYuM9|EoQkt+5WrUB$g1(BBclzDb<# z@cu>cr<t_g7t-29*quC=5w>H96X9F<oq*#l(F1%RemjSB{*L?Syk7u*1N;K`-VnyC z{Z`@Lk7p9sWC;5Rc^`uNEujpj;(rb9lW;!*o{9T@@FJcg@Y@Ub-Ms5}E${pJYi|D# zzZ1VRgWp>4MLcH`_Ws}}D2DepfNzHWH9X6q`FBX;yZ9dy-bMNw-Y<aWS>ERa|66!} z5q>>9`Ym_J9f5lp?{5IV5AAsHe;N3zK>H!ypU?9~+;;`PT>@PPZt20_2ER)D|K<JT z;7x%pkQux+IP}fzFL-}Bbbsa1Z{rmD_u#%1|C22g-7|#W30@c8_t1L?7d#o#`d@Hk zc;6IoDL4$xpM!e^ac{-_UED9`naeW^zg75sDbN(bpNIFKfeUyp=Q$p_gM&ZhxkbG9 z;x}6key_%TJGiwT-nA}x3*qkr590YeeiiU^p3mVQe}Cj<OWdQu<7x1<xOWE+=UG9# zCvd+G)b9_xxAVL{xc|oc65h7}FX4F|&sU*)HFzWb+w;8MVxp(v_W|Co0{_FK-w(mn z{+c@%{A+lBHl#1-B=36$db!`m`<wL=e&=Usf5H2^ga66Uy*7ju@H++fOL^Au-kpi_ z2!31f9EjgAPj84XxCQr>!JX&*80h|o=X=5LZr=6#r~c#pavsQX5A*y$e*A8d2frWl z?8P$<%>g{;;Qt<;Z}8Ode;Pmij>f$k&pEh{!TmMf=kdG)_fFv3!7qdQ-3i_Xo{QfA z&wBH9yTlvA`%s|mBK%t3KLx&>utS1>A2@`&6MQjYi+DcF^N|q$DR4FJ^T8XyW5M0P zKk<Ab&<MUm{FmYPP{vQMdHk*>te;1}`*9a|{(<`wpniKg<bI9&gFO4<elbs5@c$OL z4*y?=G~_+T`<uZ3!+#?9|AzNvyblET9)v%M-;u$65AG7r&A1=Jzk_%E-pTvfJoo86 z&|1Kh{|18lF=$);uEhVZJg*9Y=YbdF-VoB<F5s#7_wihV`zx9JmO*<kPyGFguyc7X z;Q0>zZ9JbM@FU<HaMwWlH{L%N(s>B{4E`&5PUih=!q$RE2HGD7x_9Cqf3FN-KLHQM z^JhH2=Q%F;-va)Yc%Q`YL>~Q0`29YF{}X)1y>tJB?$Pl6Y5af0a}<6T20y`rxZlfj z6YpCin?K6Ce)}uE9cB$D<>H29yjZIhMvHT5bK7z|EGdo^Crjngq%by?3>Ajf7Kf8U zb+R-xR;+b&bR?}QLK1<Zw@_WDBqrAuW8w<Q?XaTaNhTwuu_BqRDi(%CSgVhZ7pj{) z&?x(hh3e2+h1JWU6wP_`7bmTlG3rRQG9EKah6|GgPo_fATP2c|%1OCCUaXde3S&v7 zI$W$;?b_PTDvlC1QmJkz;5!`CT-4T<OOp2Xq00C~rB+NXDGU!+X}HT0ewB%0Iq{Iv zWT{e4Hk8W4l?@hQxHwoJ6;bx*p5v9_Vor&!EsjlOgYA8|RGSzpY@!uQwZte2<>92b zu{3FMs>PvVX??LdTJ+3xYb{INu3k-lt*DdAh;@BoXsA*zPZHZWqL}EVHdHN5SOuY~ zZ5kh}jMWI}9xhE<>m~hg&rte4nG|YCy;djFO`tf*QzZ`lm&6*DCX3_BH}qvlsy<ko zEKSxYmGvdcqBwk6E)gx9n$#>OzTG<_2OAHIYjN-z*@P~vmxnvr<VSPNOTc=$3dh;& zWM#52wz;rm&aB#85lm%3<({TpOWKnz+H@`H7OS~gaxV@n5=t_w=HC64dUdF%_u)#h zR-QenzN}5Egf*4BvR)OaElO4uC#$96dhu;jKPpTECn;A#Tt!_uRxH4e#qwmaY9nr< zP^(R>t;!QFhHsN(R>#q`Bx#!?WRTD4^$}l#PbvFgF}b{6n@kvj>x#q4r2L8-i$itw zbX!syaTbINC+pQR6qS*Yxw$zjiW~HQC0SCKEc)A02BE+8*9R|$6L6F(WkQcxQOV6q za-Hq%?YYjy^a9<QSM5eBV?OqBo!xoMw3zE$>Z4EWQz$2e{NyBpXq+nMI(zf9lg4%@ z`6u}>3WLiN3y#rhr9P4C?9<rPXcu`Hmz}GM`63*Z<3;VB<a>I%Rvr&iRoBytsqc89 zG&We-*zh2cT83%@zMia5z_GDhr}I8VGRNA=1{+8Dz!{zAmncB3k~b#k%y$hBTP^a7 zE9H^WXuVocYv($f-QHeP{1)fe7RsZ=WT;-P(k5|GO^cgt<}mPDWT_m-$B|hR)#6Bz z1cyw}PfIPYAsF*AaXz)I`IU_nk_otRN~RN=JbM=?WDq1v?6v%oAo1w-$>K(O$MOsi znnI=MTwKq`&`vAXhSKEPq?q5x7$_sp)wdP;(c(9EjC);BEleb16-HQotW+-6A}MV# zu_<+|EYv39MvszTRUEFQ4xgV==W4_~j-`yw0HL_@5o3$jEV#3$43|wNwNiexTwp+@ z5t{kgiOnx<A4|-<0&hD}zRSjk$%dFqe(@NyRO(8b+>(gR>W&^JGzx?;-)KpACxtLC z>`10w^m3^z5uYaBUtk0k0!w(j)e}s?l0O>U$z-)?Me$KhytA3_0)%#w4})T`QddK{ ztG7^Q>X_oBH_D@9rP|tQ{^t}X3UsA%k^&MSq%WV&-om;f6Nto0ey}L{s_7sSio_<Y zay6gvZb~e_x-2QFC@w-9Z!shH?~Idx3Ar#6WQaE-;bPJmQI~qP6lQ5?D%CPRL&dzb z1OylIy`<I*B}d4)0%4kyq*ffS8VwDiCK;FdTc0EP^261_$Yki~OuYUgx=MZwCeSd9 zshRH;^<te##M&f3YGW@ApC&cas3t!1HJ?KpDF)up<dHvXXejGk+~i6JLd+6&8mexZ z5Z9$%p>wick)uNI8dFT^arbM%MNM%myd@7dk)>SM>^qhHI+03rP`0Gz!K{?^Q@dx~ z0}2%{0h!^vvWg;GoeW~yr$#8k90?26qTE?kEEmS(_;y(k3(_PFPy?hhqG7-*X#yUh z-<5tc2ydZ1qpP6~qy#JSObbDai;7+*epaW<OHpjfsB?9BGQU<MK3UIPoQW4FqT%|) z80!HP$(Xo?LM)Gjt#mA7T<6;~Xjw%StgzszHpW64x<aK6(Xt6LU#@TE-;X@b(#bug zaq{M;|B}H?j6w=MEk+uu5k7M$%b-CUrD=Ja)2_KHH)8^|eCf*RnQLHH3qw}C7AXw0 z?g*bZ$ZDWck*pGQ_Dd?{tMxG}rFltx(&{T2tW+e8-E(<mG_Jfl^AZ?@2twQ0YkzT~ zfUX7a=9?y`=D_j1kGsez7K(B(Ttxd*-!yw<Gf1gAPa3pwK2$0tb5{4acl9sM_w>x2 z9{H@o80+g~PEUVd`^hJtu&_OUd<&|@sCrd&o9?<sDQa<s{@7OZte%+-o$T28#~$0B zU%a9f-KHuEe{=pPY?kiazMhlY^Q$&XbAc^@YwZh;Jz+r$!ewX#>#{XCsRdD-&@)vy zXJvb<y0)OqpR;naN#?s(FK&M>n*Oz=k;#1ioSyy`X`Nd^me37KD1UCN=7<#PSnGk7 zRQ;uK#Lh?wsk1otS$^4B#~!z!RaFP7m`t=(fE7}5E5g79EehF^JbzYcv{e@m)Un&t z)@J)<VT&|ZmrFw$33KwR2bQ*<+=AkQB8qdh+>%#Yu|vMAj`$pA2|v_gaOI~BkOjvz zGF>`-7{{5sdGz*AqHZHG3ere?{7P)JaCi0$u^!6H+!EFyP2`<<g-=bSGryuzZVx7n z>45`U&`g&I5(r&`L&L=pK+12ITSy`@n^X}wWiyjWflFA1YyDrFC=MCZbhHHvfLlb8 zg6Vltmt%2H3X)ouL`Ryg(uh`!kf){Ve#z>Z)Z-~DOs3PeGy&wGOl#3SYdD8Y)?@a7 zU=U$JQ5<vMxRw?LwxDV|bw)xBN7G4==t`j>*}I0<7g&&z0_v%+CS-n5&xH9@PV79) zyK83EW~T;?VK)eMv@NM5n<{lF`Z7XoD6n2OR+GKx3`;gF(7Pt2NcmDKfUl^+M5gwL zQ@`fiFsVt!fP2>>olSM11S~~Y_N_c_O4Dblw9;3kO0{&QwIS@^j;VEMT|-gVkQm1( zFeFNUvntT;YKgH5whXMa-dbqUXLT)MQ5n~iXBCFl$$&}6%aEEo3$3SN7&<H&z}i|E zEtJaY(>8*qOhFo9(>$4$&MMR>kyLD+ML9E;mQ@hUcdW`L)zGpTpMp7*7Ae=6Xl0p& z{m#gpRWFShBTw4wZ!5;dA~%DrID4p4t=1<{z}j*ifH|f{Ybk8FG-CFN$&Lg=!4Q>G zzE~bbD{~q-mJuN8->f-jQG(%YmZdm_YQ>6yl{AoSJ~I<pS2ht%&u%(Ri!$~1ZYDR1 zK*4DVNmg|+?U^y3cZ57g)%h|3*3h{`GpiPJQjnw--CUh)@+4LHiF~|HKbs@4a!h!v z0)r^S(l}cI(HBJnQ@HYL<YRtX1bcw7dtm}XnJ|ZoX>YWm+fYR--yB&Q+ZKtfTA(Il zL#Aa+@2*c`yoiNPDW0>^UL4p(RrIWfieof2Y7+vp#yq>em}3FC7*^km{>41KxM}bv zaBOXoHpc*&PSU9sAT?|;R@*B7%SdBtCCnRneFQOIl;v86IYgZyDQ3)T(JKu9=xmtq z<fDCxh*5OSs--?=5^yy)`YpmxI#GwkY%`@&mK9BdY@%AhDkxU7ROJ=;$8FfP4vf|& zovx^tCeMH@W7E{wRiAi`2&iK0FZ)IYgc`C+kZzbVj1tM#W{N3eNE9kmeQen6>BS+^ zZ88F8f}6S<e?*n#+}qRJZK{H&7QG8$uR_Meu&iiJ&}elT)V1+5g^q=bhGn@ph7c=^ zRYse`ho;$ITP6dU?L4*0A{g4%v)E})+b6dcwF?2Q5;GCdA_@g>SukeyxZ~BFdE}Al z#e$(mZI*A<9&Y4mnN=-p6i!dkMBfx|xGaiMH{>UAX!RC0VUws;WW!*vvCS|>w-0Y} zcAm$EplJ=m6|vRYC~`24jF)OQAHl7GomlcqUN+m}HJzk>p>r4pXydiD5Kmunp^i6v zZGpvtVv5h|tj`5a3oLEH<n&+LQig8Z(mLwW3R!5Vzl=Y{YTMFMmFankXAeUhj?9o@ zvC+m&+d!qQ*M&oS&yu!TxnMYRXqsO`P}De6r)ws2itM6=Sl$rPC38@ieY0L}VhS;| z=#POJq3>Rj8ZAsV@L(f6upl0-_Acd(2=J|!%sa!hx+oi%YTd<2C7wod*+x5KQjW^9 z*Ag;UQX)o)DYy1@BPPeT4{l;sER0R8EetY=OSuhO(~JR>$pua@v=+m~kPNCJ1$3>U z(nLvHKydmR_55t~hq3xN`VzaT*6%7I3UHOx!AKghhUN)h!||wBikuy(DV6V*sw~)t zP)yM+G*|k1OZLA=Y2q8*A;=U{OI$REl173sva<x6QO}v?DSQyaXXG}g$vdgIMRXdp zVQ(APhH`F+jMTaA_FgTZ;+(0Cqnzy?g)C~p<&5i&z_Lc>oN2GV-_$(QSOj*Rx>2%Z zU=qI$77-pLqzP3XudwXVQ32oT!>g@(yf9R2A4K0kdD5&;>~diceT#0aq;#=+VxX-X zP_G%da5ZZIThwC6u1F<@$}HM3mKH0lwF;<y1Znqnvzq##&Ob<{KLcvnJ5`Sf?fFnB z(?^J2E-q@DvnIRXs$z#Ouu^lDHJwo`GB?*<t*TM<e^ME;K?2cQDw{B!X##HBY^dcQ z`4j$|RZBW%h~Qd^m`#m2165cFCuesr@0%g#NRp8_&yiS`vTY?Al(B9sHEmZ(T%&b< zqG_!?(D+Itn^a&W&{(~7hmG)nDCOftX3EK;mar@}byz^LXwqRVbgjxRtzlx1OdHsC ze$d_U7Q6GGm(6D2!Z;<_sO>+c5C(=!sy5K+BFWP3$mSOm2a~~SWdn;L9gd)<#d$@B zTDI#~ufn8}#-Z5gkeeaTa!Sl7M9Q+8#8|1kzA#oAUSunMx-OE3s^pf6rzls`@rt(8 zn-q%U6O)^Qk8y9)v|sCJ3kyl9fa&grC(x9r8a^i1;o&9^DS<{z=y#K>E{AAdktq;q zTVkYEX?34>+`mD=o0@%Tsf;a-0VTym-NOo@aZmuY*CzCNrl+`uQbFXacZ=+7vx}i+ zv&4?8J{@frVFnq(U@0kNCr^}U2-N|J-m{VIRZI?TOdhhCq<Rl0I6B&T%yTxjBr`v; zaXrtEjRd<>-?^08=7s?33L43SwW42&$g=-}pR6Ept1Y0FJ~SU;7<NcSG4(da^f)HX z3J>Nw`)^UsbRBE`Wh<AV$dly|oA}kz=-SET*!lApNd8@bHIlYJw=%RgIdyn=;pOEs zN6Yn&N_F&ftRKsY1ggh-Q;i3|Nj*BlA#56AzCKd*G_YsMj-f=HD6_1pZJyBQRk|n} zCFfg7s^qdt1^Z2E(pgq543eYPXD&XO_>mtPxEa$<ZmMY=%lg?i(FaJ>R%#{dM(HzV zEb;%vWVRrKcdTj{PT&KqrbVRAFdB`AvzTMW7m1Bw+d>Mg5_En}vzb<WSxZdJ)e25% z&W|1hP)$aNwJ6t9)}fo8bd&@eQf)$;LRoKXIC5&~Ddwm5q5@HaNNuM$)&wxSNfPC! z0GY=&a1t;$vG3W|rHVxy-};QSGY&FFiNdCjF9t%i*v``#gdjZIFl5o<oQ%sF`Dhs{ zl9IBr1}5>@BU^}UsOcw7fw8JYZxJ;Unnp#oPm;O7IwQU}*f2f65=@QFC5IlS96=M{ z&BS$L%j?Na6ReUN`!sR)rQwsBN3<!^@b)bj+krWEXsCH~Gq5iz)aq+X)k-o@DKl>s zl2a%B<;?L~sbi?parwmQ^Gu~4D-Et|k-#KpLTYPEXZBY{Cc8#C{j|wr$trqoaZ}Q> zL|}Xow{ui>?c^-ycu>@iVR_aJ5_zX_(6BAHyr@NEZGwi7#Fu8ATaMb~UiP|yGe}%= zuJfnP*~_T_2BY4bTFm}S252^aQv>>&7P-i>&CZUwUPeWn(3>37#-J!Q+yZJ2k+74y z?2F7r<b^h>!4&5eq=Jv|Ht0AHW2YK4cr$wl9+X6@77{15;Gz!<Cx@w}=1w=}_7*ml z#_Qwp)NyQK#1WR2vJ91NbL!=>(zs59YN0b<bxKFq++2|25y?dat`1Qsm+?)$TD~<7 z1kFt2E2634HtSZTli4u`iS9I$TBqk8XiQt<<ny%fx}7W1EE$5#g3#+~-gqo>ZPpOU znPB$ym07T(82*1Fvoj{}X`Hd5z!FdYNs?yQV&=Ihw}K6Jo*-K6)t5+k22FssWp)gc zmzpSQ$sA=l*WcZ&ZtoVerbO8%vjY=h`57vo;{YjVO__q$g<&;T9AWapZ=yb^{p)p% zR+`3jYLmhZp#@dypuA`kia0HYDLziwk@%Es3t$(cXAoOiGoI&YOpH;V3R^Wammj9+ zJ2%%COq_j{3C`{I$7$RKh?S8IU;dT=(<&PCbBtyq!*GhcX)d#`1~Q6(m(S8Q&0q!_ zrV`AC&tSrY484fuTVHjwP%d5R3Tq$J5?*F>7mQYvRM@!4^-(!9jWymH)1gGf89CW` z?Z0GB7w?)u*3JzcWvQUFr`dwh>?bP-pQNbeQk#1^(@f)54r_*E&pExC#9mpLT$@{o zjl;If<HA4nD3x8|l_I*bG@+FYyC6}pVQwF`ExjCX@nkG4QBAbP71fGqfn`QSFeq49 zjsMXT{r?&Jxor)L>F1yc>mEx^Ek5%a%q1}+mv*d{))$60fo8%tF(}7qwJ?s#qxK1> zzVu?PoxZS+7|m%lJ8c1LGpd%!DCNxex$|_U&;O6BA4XsS9m4cLjZ0BGMY?wz4Ms?3 z)|KmuW%NZ$iQ4f}@`>oYI!E>GaCG{nUSOfJ2%-??^^!CF<iy8@7N=Ta=T?PfRCblC zcG6la4MSZ-nzGEA*3YKnM>?koXSSO{NKuQtmIT^>_6Z<q(u&pfXQ&Jr0{JCVJ$-N+ z8%zy?>!LAr#&8p{EkmVehIWy?Hch<hr{fho?rMTXPtItYGa$cUa$u@1CM)^|LhTqr z+CP%0o=dgtlxalM$kTYtSYZkXWC<)Y8WvKPNRt8&QLuNyF}8e(Dz&<Bl<j9&F}|Q1 z$R1e3LsP$@X6PUx!=c9MMTu-<#U3WMsn}^O9TKpkj<z!NH@KT}25%hJUfwqD+0KE> zRYms35Gjd?yvY(dPZq`}8VZxv;B1PRHKz^o^dpc^MpK$Pr88v%C2nFRa<)Cjae;Um zK_-AX?zwv4?71Eu<mVg>$Y!t5s_F799OcXzLY^LC)OhBwiqu96!`XBWxL=DJiKxJ_ zsKpv))4kDWS_kRl8;jz{7yP(=kS4k43Ko*+uF+yztfePg2+-$90TT51T6`B@AwhIh zA$my|r0;IX@c5YDqKPa^BYguov?vLYl(!`tMuit2q1WG#llB_A%l*wPm`X%WvzWKi zY7Pl?rx8hQ=HNEM?Hd*c6Ju2yg2V}7Fj`~Y>&M2yNVPA`bYvD9w_}8^6Rp>zmAA5U z|F|<}qc(CZ$5QP(yhya6G|cF>b01QOBI9N))TyGBOW%AU+HltV2q$VutD|%A<Xpc_ zrS@xw&o@rhX1?3Wo&xf!f(n$Lof^_cy!D>O?(_)Z6qO8<N=HO-(|{gPCMIJnVbe>K zINxeJT<2*OEwqs}ryXQ>#X1$Fxqg#pn-W)kh?V--AQl&<KEs>|LSjfd;fG~}ZltHt z);8tBCSJrvdI{&SHBq>h-d`{GR>}kQ;swRwfwlFe)lz?9GB<#Y6w4&XgT(8$3K`J0 zC!1u*u8E*U_*5cWEa$!kXpP<_Cs4f!l~9^l!ve<|eN}&#&V&_`e!eN=1jwd&2}Ycb z1h?;!gnc8eXeDH9wLzl{pU^R+!y-s=<71S34rLI9@?fiNvy53TWWV`Q=4>i3x={f2 z5o$-<(h8s5StQ%(3*8rLaz@*XRSE;ZX5uM!V#~Q{Mr=i36GzK{*atqFwjwcsQz^r$ z981&DP#aexMI@H;RW<dgl3O_!EL?b!#!xq3vnKsm<_eqmpbHaSvQnI<WUNh%$6@`# zSd9;HV{{TH?&3mqEIGSSt(I!@5)wSlR6JfzAely1)#4;vr}Cf&YZy$_v1DssYedYU z1DxXY5#}+pX#@*0dC)#26ov2qdDl^cC?-+^Bc1JM8YPl+!V62;88kMuByK7zuW70j zgAt%otYtLwg7(lbt;x_mQXiX_kbiPP&%oJzs|S*<6&EEJbgf#|wPN6+Q*5t_c`PZe zXBnn+>?khDa&)fBQNc|rbZ_^n#b-m`bym;vo`H*G`(N5Ku%f%aKUvzhD(OmAcC8xd zS-g6A*Q#XY>QyWI`nx+))?T(^b>imbv1FyMQ<n!eRtt{nY$oSk>C(W_%~iE_tYMm> zK*dwcDlZd$re!I!Z5el3YBb*_dH9J))yM{mcYiV2Olh!y*gD#_9N-7VU8-J`VNAIv zW`s9I{FJ1~zBFoXwCx;gCno05{Mu?pw2J9;Omma34<e!Ue5(1>HnD}d(bsm(%Flo; z^leTuyMvwNqJ#xM;THI2Uf4%K5TK4|CEXxy-k=T46C)&RSlE_l&$Ea+n$(Cmk4?#m zq&{KwM~k;(B}k>Z@roiW%C$UG?MJFx2FYHi!`TFuYqm8U1fB_qIkmc0lQrMKUo?AO zvL=Y{MYAmqpSn#yn9aHD)w%Q_b~uN<x?Gi=k?&mWe5DOU*dqOwR})VrFgQz-Sn6}D zC-}#Ftw_>hT>9Bmy;`>eXeLN5>03F_)3@R>Vz%X0+dfi|zHxYpshhXAW+X$QwC!pU zREwj<jY_d9gKNNPOZ?TDPswxV^J(A(g{sud+-A<3bKKlM_G~@}?SA$FsDJ-yG=Z<+ zvq>koA}%j+`piG$`YsYgJ;*LC&=TF$*o#<)X#b6a7o1h|oi$g>5H<yq#sAG1wE`P! zJEyx$JVi!OwBC8~NRqEWW*WUd`_4;FSeR(CXL4PsoqIl9?`O$fOpZHl{=DQYw&pA4 zc}Z_qGXK~G3l_95IBxz)^ODv5T^+eg%9zg7RV6;iUo&fnLnn6rmaSmAeypxr6OhYc z{uGmU<kl={{<ar3hf^>+@eR+K$=NdANjPwL-L+??Z=K?>-DO{i5l9^+b^14PRHmp* z=&5jSt6H}O2W%NGtB`#+omV22-y{K%7Z^U5L0kG4f|!kA_vWCDKChPkBlQDwZSZHt zRI;pgWaG_v#zHehngbb+B%h&n53&u%XB$DqjT3dUjp^D{pSFg!6g)rlXAV=ZFODJb zvVL$=SR3mYc1MPKBdcC)XCB>hZe(gwQ>v@gHWIlkZBhhd5RzEKJ`_MgAq|0J(0{Rl z+F4r9&ekv{OG6VyY6+@HO`A4(H@-w}c$;xOqmfMs(QL(%Ev!PP<z-80^d2u=CO;GY zQ^>=9wr7^DVNFXV|E?ez87qup)@_u$Mc@KEb?yzJU{jj22~NVb&VRwU0`pv1tX5J6 zWt&5s(r9EqbLi7Y+Vbv6T$XPc-JK?iC&p?yO=T!<yoduO<lO{?|Fr#HlkO?qj9Uyw zmL5N8v~9D0Iy7|ML0gU!l}H2ozbz*_YK}6aXL)NQ0nF0dI4FbxL)Kw^C}FC{Gy>lW zk2a&onB+7ip=LT86EhK^<Hq|pYylh7@+3GNJAuHqlTeG2?h9A0Ua_oub0qx(eXF|R z6m6xeCmSYF@3^c%GUPXvq{*Bp5hK||N@i@NGill!Gp~+csn20HXS30~YXWg54J$Or z(D3+*evl?$&(jV+3@5!VdO7bIVuz*ul&+0!J*8)(ch(@KIW4S{sk$*hB(ol%RhV}8 zkLe<WheJN;SVd<t<--ZvaxvTnhBieTUM@G>GHfj!X+1AHwPyZt<;MKMj-t0loLo?3 zbkv=>v|uy76`CChnwK+Jc1wb{PNVvpnP*rxbAgSlI?S0NhK`Nc2_0FWZ10s`AXp6- znwqr$KIJ0+*=H>px;f^{;R;KLV*3y);dM5F+MDaDX0_8=$L8(E<T~b)Yi^>nu{frZ zP{XE8m1ehB&g8bFL@2Yhf-g2bOC3@Tf^v<S0PX&VrdfScI;$gPl@<zLYC*IFCADkS zp{Oa)9i?Gt>`EqyGlGY)lF}Hs{0wKEZ(4^66ZFJV*_drBZ&BN<S`LLInLQ$|m`(d) z31)tQ`(|sT;KS;)!pUt~kJQ`@Bp<rCQeKp7v|W47Qia`n4NR4oY?;!1G!k!RwW71p z?LEWo=lgd_Z0tp4WPZo-9VZ^!wz6-a-M=j0Ye1|XD9$>B)IR_C_5~*;^A{{S;lyL+ zFPuLg!uC~M@}tw_O?1b#FPPt^qXq48y&xOo61LyQDyU_{#S$l&28CyiRmS;xk%NJV zqmI(#=|n4!)=}2m2a1L9|2C3N8#L;(pksd9Vy%116oBEi$d+84ti?)YKI(Gma$2cY z@lTZ(G>EmjVVkTyo<m)foXiK%-15cvF4rsTD|1S713!(H<RGY@7G{FvtD7-6iY|wJ zOOi}J5-Pm#)x;PYGE;@NYPf%_b(~U~bn6(kBIi|<MT3y!xRQ*)UJoBRWwHuo8!L_? z9~Fy38j|_d5=+yj5`_X4tJI?@`GgUyp&pCwgt8@L_@9<$p`?%C8ig~XtJRewNf@p+ zleRK3B2HiUm1c^Z<l5Re-hU+pp5(KG@ZmzVHPQo3H=318$t8SIP-33FvSN3d6*%+D zJi~Y+x+Xjg7g9qi>B_Q}*P5X%t9iKa%xDTF4mG8>jm4L7>Q9P@7?v1`)1Xq;hDsI* z8y3SN5<3PzaZ#g%GSuzPH)*7n^t5l5zkFw$`^~y_l%!lpbgrMfDy)iBqQr>-W|T2X z)s5NLS`@R+SWyJBYI7}_&acs#YMs;|%+iQ0^P~Xpb9;>pn!3O&QnI92Ul}U#bq&I( z1bf3wDQAfxvA1BqoUCL2D#eS>NROM(h*#7QlGwE}@X5y!IR;nJE5MZ>I9y<lmgw}# zdKe0^6~~|5dnTsj#PDRLaSIxEl7$gEBZVzwMHW(RWYfgtx{r(reL#~CTsf&NE@v6@ zUo0l#&Z;za1;K40SjZV?R0x++EY`G{r?Ts6G>%7+km{$C6eL|MjPYGCyf%d+6wXMs zm0KejrNW*+a(unaZ8}UXDT7p*NY4!DzN(g2rS+tRl@W_=E$w9M=$j1=+xVN!2b)86 zt7jX5&e?_JNm`&lM(Yc@5={b7XyT?|_Ha4%^+pj_8btpia%ew%$`;z<@-(haBRxsQ zDrdsSY>%b0yH?DP)=Rn0o^oX@j9IvnyUB{9YP`<=iM-m8>(Nx0B%h9V_bDX#m|jXU z%GbCPMD3C=K+Mz`C!TdaiUwVd7B5rd+?GbDgr)65g?rT?2_dw3J}5m6PhF7|H?QSO zcO!{p?8|F9@SD|)<CDAwI_2r5BFGTAIPEOEgYjBkR75x*?kO;=@`0<kS!#5&#PYhN zA(pwf%$aklN4U;|Y0wW`8&&7xLVkR(R7l2VN0pY|Wr*wUlc}UEvb>LA5EnG9GVY8A zOZb*Ij|{1oTb9o+AVX5vycpz`37}~ir&q9%A{;$6^NA9@pAQ1B@s{!tUZG`8qNz=3 z?08+6#9(L|dmYFZD3PV85cweq#U$YZHg06Idmv&OovHXtJJRn~>!Jh`aHLdp`jd`Y zt5&sKbR}COle~`q!trV7s_d<7i!}?UL93AvIF_OT1_-5>55pzTjFY{T%|z}<DbLZ8 z=s$g=gnQX+_+`dR!<%ZvQRANZE*pU+m14Siz6!1nr`cz^#L5<1+#Q-bs_=7^Y+C0y zJB4r^*A0blRJA{^;{`4nLP7c^Hf^%XMDNNoG%8%1C&nJ*OD|V&*adarqP7bXg|{wE z>7d=vW|uj-muR#^GI6hZ86oUscep8yW)IPiayp|`$g&cfUg#MX*e_vAbi>ep{=QV^ zI~zCpbcW(fYNnJ%;}f$@dHJSLPc9|a)g3O@?K-|*TL{xC5Tx%R?}poEGxR2t#c_3~ zNcqkN(M+;9lWr8t*=U=Ux0$%9=#75lj|An?H^i_DYMVQoDxz?LQHM;N27TMEd!0fz zO%lg!$i<l{s?0tQajjnEO1lgy+XCz9ocu)T*@Q3RjpwHZ2AxifXc9|`a8pS#;$Cc; zmG)wwMtbKLnK-y5E|vR@pfC)Z$eZqpQ`6-$x5degsLV?_46)b<F{<!|T~kkI21z4R zabZ5j_Q>uvjhljZWZOInrSWZG+o?$+N*Nc<-y@ZL4Yecke@oKVg&3&hHK)|V7;D7L z$62_!xuS2<TqUYbA2*YB;S?7$dn1SP6AEVij8Ad$Q5Qc!DIg%K2aUrC@+((NFONz| zjO0v7tf}IxN9y}}R_^QyG(OqzXq?fo#hapq*C<S)vpY{aNPlWjqz$4bsu%Op)v~>k zCe@P<D}kuoqZhD}V)>s<&ef7U*DBloTsA1q01a(3e%ahqAPI6*@RX`4iSt=QA`_9~ zru_xoFiVoH54xgh+%2n{XJ-a$;#7ispRGl+Nd~W}jTyZ?g6Sf<q)uFrHd-qhj8W{x zqxW9<oTRqaHGv;{uvLP!piVzm#vCr-GkLnK6`@~dSF&ofO3*tt+%DLZfb>pHt{Mhh zVW;Jw6&cgNy+=(pFXI}jJb?{DMv$xzO_4kKF3^|cl5{$ttIMoRt#=GPVSZe(%Yc9| zo!aAIim^Ha!TM4SeIey5l`*8i?Ig?>Qs_%!<`%xqIcDiMcLg3rmipRAywmR+s${Pp z3m4%{r}bO#DoMDNC0ujox95dx)22sStfp&uBVH?7zZS2lIN{Q?%~Chrj<;FL<|`ap zH!WZD4K)>k&-rGcOtq$#_vKA5Nkh%bL`bjA+dO^K?Rn2ZI`tC0>Ew&;COxWY_t?ct z@-{=4ek-;aTJP(ccDOlH#5No0H(jgOB7Kj8^c*%b5No?org*pBe;Frp!QS*39Oh{5 z(s0M#bjtL6NA{w<>11&%^bHM}{oIPJCi3ABF5H_Q&u`tsR>l`|Sev43YBj>c6?|Dv z^gH;F8yd%5zHpc(UCz(jN_;${P<!%c>3|g{xlq>3vXk<(2e7&~`KZY+lxIqS-O<Og zStp!)l{y2RUDlV8TvO9A-QR7Jru@&8%z$OH*&F<tmOx#;P|qz-%>`PJvn5s1VJaD) zWQ;L&;>q~+nz)oRsSR6IZO9h=tf-^SfhO~aXj0?Wf}SKspm-IZrRjz`Z6$|-H2JRP z03dUM7ZEMeE|Qmhoey?hlQBz5%r&Mli;MV}&}2wSUsxv+Bi!I7gSS~?+^`af<3?8_ zQkD$M2F9ckjWI0sg$*;($n`{PG?8o)?84-SMpfZ7RIvKQ6>5S3D4n`6`^fsZMjuer zxG_Z*yJ#WB8hU=cQqp%m!7>{{s$(V28OpXar2;yAiAlki@Bw@!A9X1X3n4HlGAk-n z>7Z^%>+D4xv&t~SXk#w$(yf4@-<a!J$8a}@uJ=>yp<pS+som}?gA>aVU8$8WY56sP zZuSfe)VLk661%QJ$<Z6BtkUtLvCp)9X?`VLAOHs~=~>!6FwocEmD9Qq`-$n0B4-=C zV&77Qza~L((Q1bahb1WT7!ugG;iRybCSD*oRX$9g(V5U!a!Q}GDl(j<_XwU{Nvc{N zp&E-Z;RYB;wsFRZ&a)KK`vk>l@|F3Klhu$9$rebBZ1W{^vtW;SvT6T_-hmm!?XXCR zk8}(1U?OV0<>jZgo}?#rw6V~UK%#@F8kYLr&vp^5Gs`T@bS_$JjbQAw6BXJ&wR0cO zMXhrc|245VClEhpF*3BzU1pstZ(Rx+V3GsnvO0xN`)scw73KE*V`vYWQ>O?_tPN`- z(XM7VLB*iZsfR{$FyV0C7Gj<1)DG{Mi|{NBXEGZEC0P{Hd>eNda*(8vDxJg-QW0ij z;4g3oK~r#nVMkyzp*5FiN}w%=jj<4CY|?8}%b64VaZ@Rq6KxgGm!$titY#7f^ROzT z?9;ikQCZvnm=bIpJUe`qGo3Uv_J7ruR%mrVt?rvC6t1gW=2Edjj?YhQ=Sru@Wg<lS zL75AeBt})Fg<7sl5`!#@dk8*}v8_;8FF`m>J=aBvE9;DZ47I^vN)j5G#$L3MRwg6J z111m3h(%7jLP!|@UK1m@Th$wriF*`VkOXs{5}Ce96#~tq)>wU0<UkxRPQ<1Lud;~M z84^TQiTr~6=E54=)M{pCDnCRT>;~G5DS<<6k%n=G%3P*s6u$T6)m_Vn0hR;X?nrV? zp6osj(HNS0(2A712`UN4hM<ZPB1}><6GrJ^ia~>?SVUncfj`D(QvluXgKorE7?tec zpd2=cYjvA1`BF&bp<XHr0(`w`hB|y;sZR-wyGv?9<zaI{R9H420YQ#zX|O=ha;8OM zY;h-}<i2&3-$bZp8Y^(rXBv5!b8O#96H`+j^r3IwOsi&E5p{FiL2s3~w}<8$%|tU( zWHqN&RB48^+;h=-o~gW)`nQ>Wz}T?a43UOmVsAy}d8N{98VTJIyMXb-hmZ`QX++sh zh*sWKM4nkK7=~u1u(g8)Yd1kEs5sOInrk2F5v`T=KcG+`dN>55;|gM5w29Huqp-{n zy>D#JsjLY;iD6YzH-&pGHaRgG12js6AYF$_4TU{yBx)j-QWBX!s--p<lV4-!&{b(% zI<S}{8oI7Ot7_@;$cA@%d*l=^T_4%-YBoMBk!eo<wJj;Mt%x7ZVNo_EEa~M_Y-y5h z=x*bc#0WHRr~Y=(1m)0X^VBzPWw&*;^(<*myPn%5;})c&AFuHpV^gAHc)I=w^r;qG z=_~~rWJ)x2PESns<dm*qT#l*n)j@?REjpVf+cdFs0#5Imv`t!#lcFEIFwHYNQO|Uc zBwQS6?8V)Qoaa-6sbihx(kmyO0n6x{C0~sp@5LBdV$K&Z8j!pE@kW!5)A`1}xMk;1 zAKq#MG3|kzZ>R)-e@ArlBo#ur(%(d6?>*c~$pn(l^78h(C}YG>9`<#ZvQQQ%kgkd; zvoo<~NrCm3YcPR(aB?h#k04a$N=zdwqc}A)$lpXM>0?1pZi>{1k=*ucBTU;KI!`mi z@X#E`u0gtYNzJJhX#{h;O+8H+(gPehNd-hRDGU*XjJhfk&ai|G2R|r;FRRbUZJw~8 zuU_CkT_(aOUDApxxn-qib7$EeTDtyC{N75tUef*x@+o8!Zmo>#yNZ!y28AZiup!;u zVuwC#&?_k3T`7TOvlTpJMj>M_`(n0gdHXQ;`z&dfdRZS)>gzl=NVr-zSg><YO#gPv zC4b(4<4zK=cC%$FVlzw`Dd3{PXddFiF+NH3QrNN>bxJEo8IEPu;}&QBB4viP%|;)u zyKG)o`l2z6l~$|Du<ksAg>-sENJkQEe5pxHcR}v6uO9EeM8~N<3Y++$Ex1kBl^73> zaLOQDe_8bV9%({YgWE``G+H70^(04<+@1q#hTA9`RB*Jma;C}`hM`z-vuPH&ERV&x zF?_HTY(9cnkwl)k7c*ND2IaJJ%uoVLih5<`X$Q9n%eoRy{iTv9U3Z5KWUYI`?U<aD zLlmi#LoK)fhm#rIrhEpl!(6%<GgvyVs2i~z7%L@FLW^G;2BI`7({fbQ!_ti}&rEyn zhV7W_V`)?Fc7sEa<QW=Ps@a^jWrqf7Wz#=`gpbi0*JK90*sf}6!6|n44?JRnFDlV9 z6Vsr^S(<vCyOtYwM$VL?+)&1uEZtrcFU(w-4$@GpTu(SF*L3O*6JW#p$z(m>z`>f) zZ;k9~emqaQPY2pUY863s(xRX-5p|@|G?#@~6=p6=RLgf{wQ8cvF*Dnm6x{@(&y<8| z&yyxbzx0bUvjHaKNyJBrdSE%M#^o#w#q0qtGLn%I9oMv&d76rbbr2#wQ0awFwe%n< zQVnpR&L^^14>{oJl!R~;C)7)ZHWm{cNry|}^xm`EnEtSWNCo8FTt{2KZyswF<d10Z zXPo9WvgS=26+=ZyhGNopE}CA{YnC?}R0AJtae4x@5N_3s2dijJ1SHE{6C4qnMk1e~ z>R_mU!{+aWgiA-zYWXvgQbF6$1o_8ZTv<gh=htgKNvp>1&h2(hCV>Cuc1^zPY-oUH zYFu9mV8{4M){Sl((#X=`mByIWV5I8WkcJcVo=(~SpQ30)N#l{4>j!2UdGdv+R?XHR zZYmwDbMjZF107G4l~UJ622t*(N^ND^I9004IGZ$ecJF%VU*x`Xu(fcLLXuVbQ1@LO z76)i0Z+FiZ!>3y+nZ7B4AJ{@+j>1mjMA$7^|I;wO`uAnja=Vw)zxr~MiENq->#X(C zG%60R2CY*CkTpaqBpf5}AoyrFja%I|sXsl88K}T(7@g`ZWTao#$@iemN0A_#>L=|= zXF20hr0}Pwdwdqgq9Sg9C&Z81MOlLoBI__qtG)f=PN!F=#v2wIREVV+M>Zofy9Xm9 z4k|^#KF*25o9k{()n@QN+E%O;bT)-nPp$Gk1JPjVX*`ufCH94+pT>%d6*XKuwU?m_ z6?J`WDovveJjI#PYN89eUnZ?g&g#M@rzY4&!KTzrlHKQE@vtuW9OBf^K#AQSyW=y= zH!w|hYdPNZne|KeZ*|vaHekwapIKo8i~M(&eKG_2Ri9I0Z|<hgo+Yg6OIV%R?_jru z;pVQz*_~-^Hm~OI=dc2f>kpY~VBYM-pR(VH{WZchkJ)JFh8A<1Hks=}J*Uy!(QkLR z@Zplw+EvT|I>OqYvpYc3w$1TZd%Tsk3=BG{On<JDN+D=0UC;rzkVSvgL`TrGIskne zKJjp+lN^^L#-blh?7F*zP?Hqs^|26lm`r%Z0iv6#k!aNd(`vB)ERq$C8abV5{Cowi ztM#I(w%?ANF|+GriH_52bkkTqHzAm)CJK`qdYwWi>eCxU*_bE2c!em$=`Kw#(je1C z)QNc%Q7Getli5B&+Z>ruxI<J~Gf`*9e<hh8ZxQA6j$~v*Uv+`&MK<x-I!Ilk$v8cj z_nfq<z8&FfMVSg@6Mx7dv(8&*QGB1Hnu}={k7oKX8!^}|f?AiUfJO4o54{raBc&b8 zI;CmAwCm}s0Y23jqIDq9>O{6gx+Obp*_Xu6HEY#~pUzy`)U%YRTbQOSk!k#?dDPVv z`a6DE<jZjLMwgL3VgFO8s9DJq6P|zMAV(opx-4i}2$30Sg+5Z4qwIA>m+siIS*Gdo zQn=a=)%9ws(9th(w|N<RTmMoZ{$W;`4ez^HK()2m8;zKVntWXT=t>sdZOYU|c5yl6 z%BM?WS4`9%K6DBpg$&0kFl20rw+c!JUgAoRS#m-vrBw*Go?0T9A6;be=L^}q!JM<g z^r&3lI)qHzh48yi8)b|&Kv`&rF=SViV|>`j-^@aD*OjQ=$xY&`3lp=MQ_T$7VBEBd z^t~~rR1%rLZ6Z&*Tg+QvXCPfqy4;fXp{0{e)YJADT1A*)cY#}F?7Gxqye~Cw;&*8Q zlW7;M7wn;MO%LZgm`b@IY(1ao+3D5nyQ-=wI;tT0i-p>|@q18bx;r&BI%s)oU;47a zp=eocPwvpdsch-UZ1!jFP-Q}r%_2K@AeeQds&t3+(7$PB!8<O%CUmK45c*nn(aJjF zqBpxxHGHK~8O3@Y%vn>zXo9kh(rkDQbyP-})?9=-OjtAj`2DIW(?y1(=L7ZBsZu*3 zmW*y$g>R=Cd2DMqs(02)jk{J60}SD4T+juy)`IeJD;bpxC!zHg`Y7{i7q7}-(m1}5 zv5)Aui;fW`jWhKy6o*u7*SKl1XL}WEQQK_d^`jNqYSpaYScZu4Gg3h<&Cv<1)45e! zr<k>9_SDT1XN!R`Q*;<gehI6uXO@P=uU(vDUfexLYsm1!O|4F(TUxUgyD(<?gvCDm z^3*dQ-r5k5${UO=*(H9^gqs)o5|&w>O4o|%=e%P!GiAQ+`Y%Y-$qZwojJpHrHmzDc z%uv3>(h>zjmhBK^wsZYlQX>G)3Z^R+DN5X#A~!P80>{#7B-K=wbOE#(qR#BOAa+!^ z_SHVqvpcjKrHbny6-qb1_N1)Bov$mVpRq#C(pDaeQ7$T#Rl9ke-*i-q^99~&5{^v! z_F*g6L0L5EYtvSR>0jR}XwN}{KivFoXXkQ$`)jqJmkN>-6FVDqNM)IfSug6`lh+dM zIjR8z6>Et`y>#v&^k%du>g13Wi_7dtfswEMhBS%zWduRa#lfhNIzv?&;WSb@fn|J6 zH3(`jHU_&amVDXjmu94<&0HPJu;nNS=fZs7){cc}a)VFOv`ta&MEgc<A%&DiQZ-}j z;MkcOC+h5W-(=I(v99vCzr+u{+mp7EdHaN&nNIrC@6EU-R-c|VmCIxpCDIOjJh$Rx z@hn!5dHzjN7ZVQ0B+@1iS|$fmrujE+l_mMGR1b50>@XQw?Pji3VZ{|N&Q|n@ABM9- zURvqr`dQwLvT5T1NHEnmXkEINHGGxbcuN**5s6_d24%Rp&OHr$THXkfkjpq@IWu0q z!K^_M>@Xa=X~d5TqyChwcXZ5EHTPlE=x&M79?c>Ce`Y2z-v;-D@W@RzOY2x&ZfTfN zj1^{>K=^||{|yz)Ys?kEbX~Qw&lXK8MidrqpR!NlIiIBg-n=v|p_inbVwLq6mL#)h zbEuD=z_?-j#Ipmmw-%1f#IX%D16T`ZBXB)ndbO?VyD7QVC+<jDn5^BHh18)kxb(;S zY-J0VM>q)8e0DwFYkTe>$51(MAY#*BEhQA1hIPx1IhrobC-i6^FtvU84v)wfCuYD% zvY7->vwbU1YO##nl8-?F<J5v5cVK0M+Gcrial%-gzqgVsN0YXlr;2ZtWbUp&R)pgi zsJQ-pUNhT-n{Bn)VJ<XFqp7W}{3UNP{>T+q#po&tW;7hO*ZneFwKF0aV`MyzkiK9P zbEUgsFXZn9jxXn8+(NatSY1}CoL?;W7Y4n<!u49^qA!I9bo|pS7bPwpLlpZuGS&N7 zFY~vAsJ35=i}{8-a;Mm&X1W^JzGI|TbgOAxTFRKd##*2Ah;=l2zaCer4n1l`(KeSB zZrVoRq_mFZE}wEhOWJNYw@V|#6k09W6}ea1tl<gyq0Feip3%0M`YoTLwS=XLZ4F5~ zZ&DsI+eT^_>$0hS(QxaE(v(p2QtIY+;@TG-2*bvmxKAdHdur`UTzbA6L82>h8+YQa ztW+fhXspyy;NzvNb3Kg|2wptxPTZod#^pxbo(!SI#tz5)iEdz{ou-?V0_!Vv%#mn$ zOdKdhb{(!uA+d~CNIi9)Ux(6=8gAC7pTkZ!N065@eQRQ<@RtDsJvoJqcNxb#c{TxU zQk4}_S5{mpa{?!lwC#jxo7<7GWi!6}yH{M?m7KS_Yx(LG=dJEemUVG0?!`S_r=a^N z5*L$kUdXr7bgEYSQ`*5F)v5X`NlH!B*Q@(+d;D_TuG#Fl_AKdJ(cLq^`^xTB$?6q- zN&n)$m3`rw+`i>qtGFN67#v<*?!2nIaoy0d%&sFtIO(ohaW{Xql5Jr2{^4#msE|aN z=E_z-UXv^HFFQJ?_-0+B)k{@IO|i4lqH_Dk0#irOX70&lM6%KirKO?$H2O?;ZE{nt zHb=&}$C4@?8%>%ej)^66q!P*^Ssa@z%r#2|tASwgtPkk~DR+mcvfcXYCnn}=EZbz? zoIwectdF0vxETyVDlJ!nBz!5;EOh75*FkY%fll-SvY))nhSrE|mpU{WJM154A}4FQ zh^Q-dm53>sQ&Qota0TlP675+EWD8K8mngHi<nOC%HlvJ9A7A;cx-Ek;x9Sepxhp5m z0Zj|rIaY7ZBKf_#;o}TltQ!v0>1y4k9XdY7S~2Zn-4(%vhQdadXD_UxC+u5ZZcnD( zR3Kag6Lo}^v=(SXjGKNq4wLJD))F?0As>rIjm?-QXo5PB%JBr7dUOx(#oWW&9WUaI zr;dXt2;E~vnzCiiUA_%71m$IHv5ZmKO_3u9JC?*{yljbtFL9R7PTx)E%~+LHBv}fw zw;kEdyj@I09C^&e1L3W|P2<zFE}E0Aja1`MG0-@ozqUGP2EP%cmm#4xViL4S!xiqP z2?=EE3%1OWF)bSUV6n_nKf8`^CWVEfjuNI){~jc+75YoC3mV3H4yPhb^^rnc6Y7si zQ7T<k5~6NivT;RSiM@VtzmGLFK@jDVzce(X%PfN0ODW8F7x(`UxB0qNm`UFIJKX83 z)y)KFUJ2Da1|Ol~*~AibEz>pPI)xj4{Y)V>ijrowq#UMFK9Zqjky|hdcl}DDHGR<G z>qaya!ln1Gw*@UE`jEZSxM2@9wDhPnq0BIA%V8Dr{T=olv>7g%xPWBZ!*XRcVJ8MQ zwOuJ{V;BCGI6ct_<1;pH_fbt*JnNGWt;m`P)VYL{i*LAO;)Wna4LoYQAk*mlgp7_@ zWFosKah0Pc)j>?_2&E}x;hMZ^Q=w>H{dIRQbt7vo)NN$oAJf1?gLN9YWr&@IgK_OF zsvYO-$RuE$qD;b7!i}V@q}C`+RSJ_xtP(O^Tg6Q|`!thM_|3Jb)>)zv9Vui2RR*#6 zen6#B0^0*qc*+LNJ#MzlDeaTZ!%Tur@#)}J1hJ@g`%adCwGyV3pzFo)VCrl3bBHFY z^~E8r*ArPbOkOnDrYU7+6GXFBKds)B;>D?!;-##YO(UJ&y$xgerZ!_(%c`O5ZsT~i zd9tKsOg6#IQTmO?jn2u?#^uq}j2YqFf$W8gi-khG1-X$@Z3a#Yhv{vm%*_0J+?R=K za{*bz&zV>+=_E_R*p1BX8>UiDDhW4F6mt?(nJ-oFM>TQ9%#FKo6O%dFZ3i<@H|=;D zu_c|k@Up?SG;>NZ!@=@MGD3klW#Q14lc_rwJJycY6%es@|8e64=P=u9Xj~d6O&^#} zBh-LXTiMZ6ANkTp;`pP&Q&OHGLemw?jdBEP7U#y=Y`@C5(nu9yX61yRnMr(?nH!fE zC5yXOEbd;ezu6x0pOLb+ySHyu&&3z_(O!*9m;Lh&@r$o$%%<a~H_5%>KSfyx2Rox( z5K5Q>L5)n)(ix>J+=;4#fBHPx89cptS!~Es&TRmi;aIY=hRNK#tQAvxI(9v}GRd@k zcJQZ6(g@Fv{m3KzO(`@Rdu`DYH#(VSS|piX&&+fi2&62A4?EKt7i|qQ=CF<p#tWM5 zq)KBF3lzxpcra1|RNAH@hSu@}EuLp4N#+#TE=q+b?N)I9WFZn$3a{OBV``IqY{&XS zAE^xM>x{OXWfHD!PCI2vI|XII6%TblTsHfStt6t`n{`udPUF8>XEE(37R|T9$<}Xd zY@9f;c2E6HCZ$paHj-(P?}bX0^h#&*^DCBhkbI&(R<q%tec~!RuB}w6vDqDs+nwX! zzz~t{EH;Kr*0;fFzTu})o^2s(M=y#L12i$6)d`D5{zyq`+=sBGs<+8hJu#w9Qd85n z6$gD|`Owd)1WUiUV4)H2gLWM_=qF}Ap-~H5hpgMi2Eu_>xI&|?xV|8bDBKEN$lMCe sv}^iRxD*;K8|}frW+l0X{WN|;*K{$oX2GzPZHl=|5v|yzsS*GG0eT!>=>Px# literal 0 HcmV?d00001 diff --git a/po/it.po b/po/it.po new file mode 100644 index 000000000..16fddd0c4 --- /dev/null +++ b/po/it.po @@ -0,0 +1,4547 @@ +# Italian translation of Sylpheed +# Copyright (C) 2001 Danilo Bodei +# Danilo Bodei <dbodei@lombardiacom.it>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: Sylpheed 0.4.62\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-03-10\n" +"Last-Translator: Danilo Bodei <dbodei@lombardiacom.it>\n" +"Language-Team: Danilo Bodei <dbodei@lombardiacom.it>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +# src/about.c:86 +#: src/about.c:86 +msgid "About" +msgstr "Informazioni" + +# src/about.c:188 +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"Il codice applicato da fetchmail è Copyright 1997 di Eric S. Raymond. " +"Porzioni di questo sono anche Copyright di Carl Harris, 1993 e 1995. I " +"Copyright sono mantenuti per proteggere la libera ridistribuzione del " +"codice.\n" +"\n" + +# src/about.c:194 +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"Il supporto MD5 è copyright di RSA Data Security, Inc. Vedi il commento in " +"testa a modulo md5.c per i termini della licenza.\n" +"\n" + +# src/about.c:198 +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc è copyright di Yasuhiro Tonooka <tonooka@msi.co.jp>, e libkcc è " +"copyright di takeshi@SoftAgency.co.jp.\n" +"\n" + +# src/about.c:203 +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"GPGME è copyright 2001 di Werner Koch <dd9jn@gnu.org>\n" +"\n" + +# src/about.c:207 +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Questo programma è software libero; puoi ridistribuirlo e/o modificarlo " +"sotto i termini della GNU General Public License come pubblicato dalla Free " +"Software Foundation; entrambe le 2 versioni, o (a tua scelta) una versione " +"successiva.\n" +"\n" + +# src/about.c:213 +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Questo programma è distribuito nella speranza che ti sia utile, ma SENZA " +"QUALUNQUE GARANZIA; senza addirittura l'implicita garanzia di " +"COMMERCIABILITA' o IDONEITA' PER UNO SCOPO PARTICOLARE. Vedi la Licenza " +"Pubblica Generale GNU per ulteriori dettagli.\n" +"\n" + +# src/about.c:219 +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Tu dovresti aver ricevuto una copia della Licenza Pubblica Generale GNU " +"insieme con questo programma; se no, scrivi alla Free Software Foundation, " +"Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +# src/about.c:226 src/addressbook.c:1289 src/alertpanel.c:209 +# src/compose.c:1400 src/compose.c:2991 src/foldersel.c:175 src/import.c:171 +# src/inputdialog.c:155 src/main.c:283 src/mainwindow.c:1598 +# src/mimeview.c:611 src/passphrase.c:114 src/prefs.c:463 +# src/prefs_common.c:1783 src/prefs_common.c:2234 src/summaryview.c:1768 +# src/summaryview.c:2225 +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "Ok" + +# src/account.c:97 +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Lettura della configurazione per ogni account...\n" + +# src/account.c:112 +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Trovata etichetta: %s\n" + +# src/account.c:202 +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"Alcune finestre di composizione sono aperte.\n" +"Per favore chiudi tutte le finestre di composizione prima di editare gli " +"account." + +# src/account.c:207 +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Sto aprendo la finestra di edit dell'account...\n" + +# src/account.c:347 +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Sto creando la finestra di edit dell'account...\n" + +# src/account.c:352 +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Editazione accounts" + +# src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +# src/compose.c:2112 src/mimeview.c:124 src/select-keys.c:272 +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Nome" + +# src/account.c:381 src/prefs_account.c:595 +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protocollo" + +# src/account.c:382 +#: src/account.c:382 +msgid "Server" +msgstr "Server" + +# src/account.c:401 src/addressbook.c:439 +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Aggiungi" + +# src/account.c:407 +#: src/account.c:407 +msgid "Edit" +msgstr "Edit" + +# src/account.c:413 +#: src/account.c:413 +msgid " Delete " +msgstr " Elimina " + +# src/account.c:419 src/prefs_common.c:1318 +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Giù" + +# src/account.c:425 src/prefs_common.c:1312 +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Sù" + +# src/account.c:439 +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Imposta come account usato abitualmente " + +# src/account.c:445 src/summary_search.c:192 +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Chiudi" + +# src/account.c:498 +#: src/account.c:498 +msgid "Delete account" +msgstr "Elimina account" + +# src/account.c:499 +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Vuoi realmente eliminare questo account?" + +# src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +# src/compose.c:3163 src/folderview.c:1183 src/folderview.c:1225 +# src/folderview.c:1314 src/folderview.c:1347 src/folderview.c:1446 +# src/folderview.c:1479 src/mainwindow.c:912 src/prefs_common.c:2044 +# src/summary_search.c:297 src/summaryview.c:548 src/summaryview.c:781 +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Si" + +# src/account.c:500 src/compose.c:3163 src/folderview.c:1183 +# src/folderview.c:1225 src/folderview.c:1314 src/folderview.c:1347 +# src/folderview.c:1446 src/folderview.c:1479 +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+No" + +# src/addressbook.c:229 src/compose.c:366 src/mainwindow.c:315 +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_File" + +# src/addressbook.c:230 +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_File/Nuovo _indirizzo" + +# src/addressbook.c:231 +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_File/Nuovo _gruppo" + +# src/addressbook.c:232 +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_File/Nuova _cartella" + +# src/addressbook.c:233 src/addressbook.c:236 src/compose.c:370 +# src/mainwindow.c:320 src/mainwindow.c:323 +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_File/---" + +# src/addressbook.c:234 +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_File/_Edit" + +# src/addressbook.c:235 +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_File/_Elimina" + +# src/addressbook.c:237 src/compose.c:371 src/mainwindow.c:324 +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_File/_Chiudi" + +# src/addressbook.c:238 src/compose.c:409 src/mainwindow.c:491 +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/_Aiuto" + +# src/addressbook.c:239 src/compose.c:410 src/mainwindow.c:496 +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/_Aiuto/_Informazioni" + +# src/addressbook.c:244 src/addressbook.c:254 +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Nuovo _indirizzo" + +# src/addressbook.c:245 src/addressbook.c:255 +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Nuovo _gruppo" + +# src/addressbook.c:246 src/addressbook.c:256 +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Nuova _cartella" + +# src/addressbook.c:247 src/addressbook.c:257 src/compose.c:360 +# src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +# src/folderview.c:213 src/folderview.c:221 src/folderview.c:223 +# src/summaryview.c:261 src/summaryview.c:267 src/summaryview.c:272 +# src/summaryview.c:275 +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +# src/addressbook.c:248 src/addressbook.c:258 src/compose.c:373 +# src/mainwindow.c:327 +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/_Edit" + +# src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:259 +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/_Elimina" + +# src/addressbook.c:318 +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "Indirizzo E-Mail" + +# src/addressbook.c:318 src/addressbook.c:1287 +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Commenti" + +# src/addressbook.c:325 src/compose.c:2665 +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Agenda" + +# src/addressbook.c:413 +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Nome:" + +# src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1365 +# src/prefs_common.c:1278 +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Elimina" + +# src/addressbook.c:442 +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Ricerca" + +# src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "A:" + +# src/addressbook.c:456 +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +# src/addressbook.c:460 +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +# src/addressbook.c:479 +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Indirizzo comune" + +# src/addressbook.c:486 +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Indirizzo personale" + +# src/addressbook.c:577 +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Elimina indirizzo/i" + +# src/addressbook.c:578 +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Elimino realmente il/gli indirizzo/i?" + +# src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:912 +# src/prefs_common.c:2044 src/summary_search.c:297 src/summaryview.c:548 +# src/summaryview.c:781 +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "No" + +# src/addressbook.c:996 src/folderview.c:1061 src/folderview.c:1254 +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Nuova cartella" + +# src/addressbook.c:997 src/folderview.c:1062 src/folderview.c:1255 +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Inserisci il nome della nuova cartella:" + +# src/addressbook.c:998 src/folderview.c:1063 src/folderview.c:1256 +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NuovaCartella" + +# src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +# src/addressbook.c:1183 +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Il nome esiste già." + +# src/addressbook.c:1041 +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Nuovo gruppo" + +# src/addressbook.c:1042 +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Inserisci il nome del nuovo gruppo:" + +# src/addressbook.c:1043 +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NuovoGruppo" + +# src/addressbook.c:1118 +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Edit gruppo" + +# src/addressbook.c:1119 +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Inserisci il nuovo nome del gruppo:" + +# src/addressbook.c:1169 +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Edit cartella" + +# src/addressbook.c:1170 +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Inserisci il nuovo nome della cartella:" + +# src/addressbook.c:1219 +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Elimino realmente `%s' ?" + +# src/addressbook.c:1267 +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Edit indirizzo" + +# src/addressbook.c:1286 src/compose.c:2664 src/select-keys.c:273 +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Indirizzo" + +# src/addressbook.c:1290 src/compose.c:1400 src/compose.c:2992 +# src/compose.c:3561 src/foldersel.c:176 src/import.c:172 +# src/inputdialog.c:156 src/main.c:283 src/mainwindow.c:1598 +# src/mimeview.c:611 src/passphrase.c:118 src/prefs.c:464 +# src/prefs_common.c:2235 src/progressdialog.c:70 src/select-keys.c:289 +# src/summaryview.c:548 src/summaryview.c:1768 src/summaryview.c:2225 +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Annulla" + +# src/addressbook.c:1520 +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Sto leggendo il file dell'agenda..." + +# src/addressbook.c:1524 +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s non esiste.\n" + +# src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:619 +# src/mainwindow.c:646 src/mainwindow.c:1248 src/mh.c:658 src/mh.c:665 +# src/news.c:483 src/procmsg.c:255 src/procmsg.c:315 src/summaryview.c:892 +# src/summaryview.c:1093 src/summaryview.c:1175 src/summaryview.c:1236 +# src/summaryview.c:1613 src/summaryview.c:1980 src/summaryview.c:2003 +# src/summaryview.c:2024 src/summaryview.c:2113 +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "fatto.\n" + +# src/addressbook.c:1817 +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Sto esportando l'agenda su file..." + +# src/addressbook.c:1835 +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "fallita scrittura dati agenda.\n" + +# src/alertpanel.c:98 src/compose.c:3163 src/main.c:281 +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Avviso" + +# src/alertpanel.c:111 +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Allarme" + +# src/alertpanel.c:124 +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Errore" + +# src/alertpanel.c:160 +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Sto creando il pannello di dialogo allarme...\n" + +# src/codeconv.c:76 src/codeconv.c:87 +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "non posso allocare memoria\n" + +# src/compose.c:358 +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Aggiungi..." + +# src/compose.c:359 +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Rimuovi" + +# src/folderview.c:224 +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Proprietà..." + +# src/compose.c:367 +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_File/_Allega file" + +# src/compose.c:368 +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_File/_Inserisci file" + +# src/compose.c:369 +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_File/Inserisci fi_rma" + +# src/compose.c:374 +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/_Edit/_Undo" + +# src/compose.c:375 +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/_Edit/_Redo" + +# src/compose.c:376 src/compose.c:381 src/mainwindow.c:330 +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/_Edit/---" + +# src/compose.c:377 +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/_Edit/T_aglia" + +# src/compose.c:378 src/mainwindow.c:328 +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/_Edit/_Copia" + +# src/compose.c:379 +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/_Edit/_Incolla" + +# src/compose.c:380 src/mainwindow.c:329 +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/_Edit/Seleziona _tutto" + +# src/compose.c:382 +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/_Edit/A capo _linee lunghe" + +# src/compose.c:383 +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/_Edit/Edit con un editor e_sterno" + +# src/compose.c:386 src/mainwindow.c:333 +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/_Messaggio" + +# src/compose.c:396 +# src/compose.c:387 +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/_Messaggio/_Invia" + +# src/compose.c:389 +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/_Messaggio/Invia _più tardi" + +# src/compose.c:391 +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/_Messaggio/Salva nella cartella _bozze" + +# src/compose.c:393 src/compose.c:398 src/compose.c:400 src/compose.c:403 +# src/mainwindow.c:337 src/mainwindow.c:340 src/mainwindow.c:347 +# src/mainwindow.c:357 src/mainwindow.c:362 +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/_Messaggio/---" + +# src/compose.c:394 +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/_Messaggio/_A" + +# src/compose.c:395 +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/_Messaggio/_Cc" + +# src/compose.c:396 +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/_Messaggio/_Bcc" + +# src/compose.c:397 +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/_Messaggio/_Rispondi a" + +# src/compose.c:399 +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +# src/compose.c:401 +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/_Messaggio/_Allega" + +# src/compose.c:396 +# src/compose.c:387 +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +# src/compose.c:404 +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/_Messsaggio/_Encrypt" + +# src/compose.c:406 src/mainwindow.c:474 +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/St_rumento" + +# src/compose.c:407 +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/_Strumento/Mostra _righello" + +# src/compose.c:408 src/mainwindow.c:475 +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/St_rumento/_Agenda" + +# src/compose.c:475 src/compose.c:542 src/compose.c:600 src/procmsg.c:634 +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "Non posso ricevere parte del testo\n" + +# src/compose.c:534 +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: il file non esiste\n" + +# src/compose.c:546 +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Inizio trasmissione messaggio:\n" +"\n" + +# src/compose.c:1164 +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Il file %s non esiste\n" + +# src/compose.c:1168 +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Non posso ottenere la dimensione file di %s\n" + +# src/compose.c:1172 +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Il file %s è vuoto\n" + +# src/compose.c:1193 +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Messaggio: %s" + +# src/compose.c:1299 +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [Editato]" + +# src/compose.c:1301 +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - Comporre messaggio%s" + +# src/compose.c:1304 +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Comporre messaggio%s" + +# src/compose.c:1326 src/compose.c:3453 +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Destinatario non specificato." + +# src/compose.c:1344 +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "non posso avere la lista destinatario." + +# src/compose.c:1362 +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"L'account per inviare la posta non è specificato.\n" +"Per favore scegli un account di posta prima di inviarla." + +# src/compose.c:1383 +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "Errore occorso inoltrando il messaggio a %s ." + +# src/compose.c:1397 +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Accodamento" + +# src/compose.c:1398 +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Errore occorso mentre inviavo il messaggio.\n" +"Metto questo messaggio nella cartella coda?" + +# src/compose.c:1404 src/compose.c:3465 +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Non posso accodare il messaggio" + +# src/compose.c:1407 +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Errore occorso inviando il messaggio " + +# src/compose.c:1414 src/compose.c:3472 +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Non posso salvare il messaggio nell'outbox" + +# src/compose.c:1440 src/compose.c:1548 src/compose.c:1634 src/utils.c:1266 +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "non posso cambiare il modo file\n" + +# src/compose.c:1466 +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "Non posso convertire il codeset del messaggio." + +# src/compose.c:1475 +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "non posso scrivere le intestazioni\n" + +# src/compose.c:1580 +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "Sto salvando il messaggio inviato...\n" + +# src/compose.c:1585 +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "non posso salvare il messaggio\n" + +# src/compose.c:1591 src/compose.c:1699 +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "non posso aprire il file traccia\n" + +# src/compose.c:1614 +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "sto accodando il messaggio...\n" + +# src/compose.c:1689 +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "non posso accodare il messaggio\n" + +# src/compose.c:1725 +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Non posso aprire il file %s\n" + +# src/compose.c:2038 +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "generato ID-messaggio: %s\n" + +# src/compose.c:2112 src/compose.c:2963 +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "tipo MIME" + +# src/compose.c:2112 src/mimeview.c:124 src/prefs_common.c:2229 +# src/select-keys.c:270 src/summaryview.c:332 +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Kb" + +# src/compose.c:2129 +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Sto creando la finestra composizione...\n" + +# src/compose.c:2175 src/headerview.c:54 src/summary_search.c:145 +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "Da:" + +# src/compose.c:2591 src/mainwindow.c:1319 src/prefs_account.c:458 +# src/prefs_common.c:574 +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Invia" + +# src/compose.c:2592 +#: src/compose.c:2669 +msgid "Send message" +msgstr "Invia messaggio" + +# src/compose.c:2599 +#: src/compose.c:2676 +msgid "Send later" +msgstr "Invia più tardi" + +# src/compose.c:2600 +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "Metti nella cartella coda e invia più tardi" + +# src/compose.c:2607 src/folderview.c:618 +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Bozze" + +# src/compose.c:2608 +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Salva nella cartella bozze" + +# src/compose.c:2617 +#: src/compose.c:2694 +msgid "Insert" +msgstr "Inserisci" + +# src/compose.c:2618 +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Inserisci file" + +# src/compose.c:2625 +#: src/compose.c:2702 +msgid "Attach" +msgstr "Allega" + +# src/compose.c:2626 +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Allega file" + +# src/compose.c:2635 src/prefs_common.c:983 +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Firma" + +# src/compose.c:2636 +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Inserisci firma" + +# src/compose.c:2644 +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editor" + +# src/compose.c:2645 +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Edit con un editor esterno" + +# src/compose.c:2653 +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "A capo linea" + +# src/compose.c:2654 +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "A capo linee lunghe" + +# src/compose.c:2859 +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Tipo MIME invalido." + +# src/compose.c:2877 +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Il file non esiste o è vuoto." + +# src/compose.c:2945 +#: src/compose.c:3022 +msgid "Property" +msgstr "Proprietà" + +# src/compose.c:2965 +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Codifica" + +# src/compose.c:2988 +#: src/compose.c:3065 +msgid "Path" +msgstr "Percorso" + +# src/compose.c:2989 +#: src/compose.c:3066 +msgid "File name" +msgstr "Nome file" + +# src/compose.c:3134 +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "Linea comando editor esterno invalida: `%s'\n" + +# src/compose.c:3160 +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"L'editor esterno sta ancora lavorando.\n" +"Forzo il termine del processo?\n" +"id del gruppo processo: %d" + +# src/compose.c:3173 +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "Terminato id del gruppo processo: %d" + +# src/compose.c:3174 +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "File temporaneo: %s" + +# src/compose.c:3198 +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Comporre: input da un processo di controllo\n" + +# src/compose.c:3231 +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "Non posso eseguire l'editor esterno\n" + +# src/compose.c:3235 +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Non posso scivere su file\n" + +# src/compose.c:3237 +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Lettura pipe fallita\n" + +# src/compose.c:3494 +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "Non posso rimuovere la vecchia bozza del messaggio\n" + +# src/compose.c:3523 src/compose.c:3535 +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Seleziona file" + +# src/compose.c:3559 +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Scarta messaggio" + +# src/compose.c:3560 +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Questo messaggio è stato modificato.Lo scarto ?" + +# src/compose.c:3561 +#: src/compose.c:3638 +msgid "Discard" +msgstr "Scarta" + +# src/compose.c:3561 +#: src/compose.c:3638 +msgid "to Draft" +msgstr "a Bozze" + +# src/foldersel.c:130 +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Seleziona cartella" + +# src/folderview.c:197 src/folderview.c:208 +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/Crea _nuova cartella..." + +# src/folderview.c:198 src/folderview.c:209 +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/_Rinomina cartella..." + +# src/folderview.c:199 src/folderview.c:210 +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/_Elimina cartella" + +# src/folderview.c:201 +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/Rimuovi la _mailbox" + +# src/folderview.c:212 +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/Rimuovi il server _IMAP4" + +# src/folderview.c:219 +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/_Iscriviti al newsgroup..." + +# src/folderview.c:220 +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/_Rimuovi newsgroup" + +# src/folderview.c:222 +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/Rimuovi _news server" + +# src/folderview.c:233 +#: src/folderview.c:234 +msgid "Folder" +msgstr "Cartella" + +# src/folderview.c:233 +#: src/folderview.c:234 +msgid "New" +msgstr "Nuovi" + +# src/folderview.c:234 src/prefs_common.c:2226 +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Non letti" + +# src/folderview.c:234 +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +# src/folderview.c:244 +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Sto creando la vista cartella...\n" + +# src/folderview.c:381 +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Impostazione info cartella...\n" + +# src/folderview.c:382 +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Impostazione info cartella..." + +# src/folderview.c:515 src/mainwindow.c:2006 src/setup.c:81 +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Analisi cartella %s%c%s ..." + +# src/folderview.c:520 src/mainwindow.c:2011 src/setup.c:86 +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Analisi cartella %s ..." + +# src/folderview.c:557 +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "Sto aggiornando tutte le cartelle..." + +# src/folderview.c:596 src/prefs_account.c:618 +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "In entrata" + +# src/folderview.c:601 +#: src/folderview.c:602 +msgid "Outbox" +msgstr "In uscita" + +# src/folderview.c:606 +#: src/folderview.c:607 +msgid "Queue" +msgstr "Coda" + +# src/folderview.c:611 +#: src/folderview.c:612 +msgid "Trash" +msgstr "Cestino" + +# src/folderview.c:977 +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "La cartella %s è selezionata\n" + +# src/folderview.c:1067 src/folderview.c:1125 src/folderview.c:1260 +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "`%c' non può essere incluso nel nome della cartella." + +# src/folderview.c:1075 src/folderview.c:1134 src/folderview.c:1268 +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "La cartella `%s' esiste già." + +# src/folderview.c:1117 +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Imetti un nuovo nome per `%s':" + +# src/folderview.c:1119 +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Rinomino cartella" + +# src/folderview.c:1179 +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"Tutte le cartelle e i messaggi sotto `%s' saranno eliminati.\n" +"Vuoi realmente eliminarli?" + +# src/folderview.c:1182 src/folderview.c:1313 +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Elimino cartella" + +# src/folderview.c:1188 +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "non posso rimuovere la cartella `%s'\n" + +# src/folderview.c:1221 +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"Rimuovo veramente la mailbox `%s' ?\n" +"(I messaggi NON saranno eliminati dal disco)" + +# src/folderview.c:1224 +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "Rimuovi cartella" + +# src/folderview.c:1311 +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "Elimino veramente la cartella `%s'?" + +# src/folderview.c:1344 +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "Elimino realmente il server IMAP4 `%s'?" + +# src/folderview.c:1346 +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "Elimino il server IMAP4" + +# src/folderview.c:1387 +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "Iscrivi newsgroup" + +# src/folderview.c:1388 +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "Imetti il newsgroup:" + +# src/folderview.c:1397 +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "Il newsgroup `%s' esiste già." + +# src/folderview.c:1443 +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Elimino realmente il newsgroup `%s'?" + +# src/folderview.c:1445 +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Elimino newsgroup" + +# src/folderview.c:1476 +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Elimino realmente il server news `%s'?" + +# src/folderview.c:1478 +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Elimino il server news" + +# src/gtkutils.c:47 src/gtkutils.c:63 +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +# src/headerview.c:56 +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Newsgroups:" + +# src/headerview.c:57 src/summary_search.c:159 +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Soggetto:" + +# src/headerview.c:87 +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Sto creando la vista intestazione...\n" + +# src/headerview.c:172 src/summaryview.c:1276 +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(Niente Da)" + +# src/headerview.c:187 src/summaryview.c:1292 +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Nessun Soggetto)" + +# src/headerwindow.c:55 +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Sto creando la finestra di intestazione...\n" + +# src/headerwindow.c:59 +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Tutto intestazione" + +# src/headerwindow.c:113 +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "Sto visualizzando lintestazione di %s ...\n" + +# src/headerwindow.c:115 +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Tutto intestazione" + +# src/imageview.c:48 +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Sto creando la vista immagine...\n" + +# src/imageview.c:80 src/imageview.c:115 +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Non posso caricare l'immagine." + +# src/imap.c:141 +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "La connessione IMAP4 a %s:%d è stata disconnessa. Mi riconnetto...\n" + +# src/imap.c:164 +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "sto creando la connessione IMAP4 a %s:%d ...\n" + +# src/imap.c:231 src/imap.c:420 src/imap.c:456 +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "non posso selezionare la cartella: %s\n" + +# src/imap.c:304 +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "il messaggio %d è già stato messo nella cache.\n" + +# src/imap.c:313 +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "sto ricevendo il messaggio %d...\n" + +# src/imap.c:319 src/procmsg.c:534 +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "non posso prendere il messaggio %d\n" + +# src/imap.c:340 src/imap.c:382 src/mh.c:169 src/mh.c:243 +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "la cartella sorgente è identica alla destinazione.\n" + +# src/imap.c:350 src/imap.c:391 src/mh.c:182 src/mh.c:246 +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Sto spostando il messaggio %s%c%d to %s ...\n" + +# src/imap.c:427 +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "non posso impostare i flag eliminati: %d\n" + +# src/imap.c:433 src/imap.c:469 +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "non posso cancellare\n" + +# src/imap.c:463 +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "non posso impostare i flag eliminati: 1:%d\n" + +# src/imap.c:522 +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "non posso avere la busta\n" + +# src/imap.c:528 +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "errore occorso mentre stavo ricevendo la busta.\n" + +# src/imap.c:536 +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "non posso frammentare la busta: %s\n" + +# src/imap.c:566 +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "sto eliminando il messaggio %d...\n" + +# src/imap.c:601 +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tSto cancellando tutti i messaggi nella cache... " + +# src/imap.c:629 +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Non posso connettermi al server IMAP4: %s:%d\n" + +# src/imap.c:654 +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "Login IMAP4 fallito.\n" + +# src/imap.c:795 +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "non posso copiare %d a %s\n" + +# src/imap.c:1102 +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "errore derante il comando imap: MEMORIZZO %d:%d %s\n" + +# src/imap.c:1150 +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "errore derante il comando imap: CANCELLO\n" + +# src/import.c:116 +#: src/import.c:116 +msgid "Import" +msgstr "Importa" + +# src/import.c:140 +#: src/import.c:140 +msgid "Importing file:" +msgstr "Sto importando il file:" + +# src/import.c:145 +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Dir di destinazione:" + +# src/import.c:158 src/import.c:164 src/prefs_common.c:1229 +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr " Seleziona... " + +# src/import.c:201 +#: src/import.c:201 +msgid "Select importing file" +msgstr "Seleziona i file da importare" + +# src/inc.c:199 +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Sto salvando nuovi messaggi" + +# src/inc.c:316 +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +# src/inc.c:319 +#: src/inc.c:336 +msgid "Input password" +msgstr "Immetti password" + +# src/inc.c:340 +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +# src/inc.c:401 +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "Sto ricevendo nuovi messaggi dall'account %s...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: Sto salvando nuovi messaggi" + +# src/inc.c:430 +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Mi sto connettendo al server POP3: %s..." + +# src/inc.c:441 src/inc.c:560 +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Non posso connettermi al server POP3: %s:%d\n" + +# src/inc.c:444 src/inc.c:563 +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Non posso connettermi al server POP3: %s:%d" + +# src/inc.c:594 +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Autorizzazione" + +# src/inc.c:603 +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Sto ricevendo il numero dei nuovi messaggi" + +# src/inc.c:608 +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Sto salvando il messaggio (%d / %d)" + +# src/inc.c:616 +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Sto eliminando il messaggio" + +# src/inc.c:620 +#: src/inc.c:648 +msgid "Quitting" +msgstr "Sto lasciando" + +# src/inc.c:648 +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "un messaggio non è stato ricevuto\n" + +# src/inc.c:675 +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Errore occorso mentre stavo elaborando la posta." + +# src/inc.c:678 +#: src/inc.c:706 +msgid "No disk space left." +msgstr "Non c'e spazio su disco." + +# src/inc.c:729 +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "nessun messaggio nella mailbox locale.\n" + +# src/inc.c:740 +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Sto ricevendo nuovi messaggi da %s dentro a %s...\n" + +# src/logwindow.c:50 +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Sto creando la finestra di log...\n" + +# src/logwindow.c:54 +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Protocollo log" + +# src/main.c:99 +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Il file `%s' esiste già.\n" +"Non posso creare la cartella." + +# src/main.c:138 +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread non è supportato da glib.\n" + +# src/main.c:262 +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "Uso: %s [OPZIONE]...\n" + +# src/main.c:264 +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr " --componi [indirizzo] apri finestra composizione" + +# src/main.c:265 +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr " --ricevi ricevi nuovi messaggi" + +# src/main.c:266 +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr " --ricevi-tutti ricevi nuovi messaggi da tutti gli accounts" + +# src/main.c:267 +#: src/main.c:270 +msgid " --debug debug mode" +msgstr " --debug modo debug" + +# src/main.c:268 +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr " --aiuto mostra questo aiuto e esci" + +# src/main.c:282 +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "Esiste un messaggio in compisizione. Lascio realmente?" + +# src/main.c:351 +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "un altro Sylpheed e già in esecuzione.\n" + +# src/mainwindow.c:316 +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "" + +# src/mainwindow.c:317 +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_File/A_ggiorna l'albero delle cartelle" + +# src/addressbook.c:232 +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "" + +# src/folderview.c:197 src/folderview.c:208 +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +# src/folderview.c:198 src/folderview.c:209 +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +# src/folderview.c:199 src/folderview.c:210 +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +# src/mainwindow.c:318 +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_File/_Importa il file mbox..." + +# src/mainwindow.c:319 +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "" + +# src/mainwindow.c:321 +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_File/_Salva come..." + +# src/mainwindow.c:322 +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_File/S_tampa..." + +# src/mainwindow.c:325 +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_File/Es_ci" + +# src/mainwindow.c:331 +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/_Edit/_Cerca" + +# src/mainwindow.c:461 +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/_Vista" + +# src/mainwindow.c:462 +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/_vista/_Albero cartella" + +# src/mainwindow.c:463 +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/_Vista/V_ista messaggio" + +# src/mainwindow.c:464 +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/_Vista/_Barra strumenti" + +# src/mainwindow.c:465 +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/_Vista/_Barra strumenti/Icone _e testo" + +# src/mainwindow.c:466 +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/_Vista/_Barra strumenti/_Icone" + +# src/mainwindow.c:467 +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/_Vista/_Barra strumenti/_Testo" + +# src/mainwindow.c:468 +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/_Vista/_Barra strumenti/_Non mostrare" + +# src/mainwindow.c:469 +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/_Vista/Barra di _stato" + +# src/mainwindow.c:470 +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/_Vista/---" + +# src/mainwindow.c:471 +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/_Vista/_Dividi l'albero cartella" + +# src/mainwindow.c:472 +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/_Vista/Dividi vis_ta messaggio" + +# src/mainwindow.c:363 +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/_Vista/_Codice serie" + +# src/mainwindow.c:364 +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/_Vista/_Codice serie/_Auto riconoscimento" + +# src/mainwindow.c:372 +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/_Vista/_Codice serie/---" + +# src/mainwindow.c:373 +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/_Vista/_Codice serie/7bit ascii (US-ASC_II)" + +# src/mainwindow.c:377 +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/_Vista/_Codice serie/Unicode (_UTF-8)" + +# src/mainwindow.c:381 +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/_Vista/_Codice serie/Europeo Occidentale (ISO-8859-_1)" + +# src/mainwindow.c:385 +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/_Vista/_Codice serie/Europeo Centrale (ISO-8859-_2)" + +# src/mainwindow.c:388 +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/_Vista/_Codice serie/_Baltico (ISO-8859-13)" + +# src/mainwindow.c:390 +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/_Vista/_Codice serie/Baltico (ISO-8859-_4)" + +# src/mainwindow.c:393 +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/_Vista/_Codice serie/Greco (ISO-8859-_7)" + +# src/mainwindow.c:396 +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/_Vista/_Codice serie/Turco (ISO-8859-_9)" + +# src/mainwindow.c:399 +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/_Vista/_Codice serie/Cirillico (ISO-8859-_5)" + +# src/mainwindow.c:401 +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/_Vista/_Codice serie/Cirillico (KOI8-_R)" + +# src/mainwindow.c:403 +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/_Vista/_Codice serie/Cirillico (Windows-1251)" + +# src/mainwindow.c:407 +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/_Vista/_Codice serie/Giapponese (ISO-2022-_JP)" + +# src/mainwindow.c:410 +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/_Vista/_Codice serie/Giapponese (ISO-2022-JP-2)" + +# src/mainwindow.c:413 +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/_Vista/_Codice serie/Giapponese (_EUC-JP)" + +# src/mainwindow.c:415 +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/_Vista/_Codice serie/Giapponese (_Shift__JIS)" + +# src/mainwindow.c:419 +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/_Vista/_Codice serie/Cinese semplificato (_GB2312)" + +# src/mainwindow.c:421 +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/_Vista/_Codice serie/Cinese tradizionale (_Big5)" + +# src/mainwindow.c:423 +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/_Vista/_Codice serie/Cinese tradizionale (EUC-_TW)" + +# src/mainwindow.c:425 +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/_Vista/_Codice serie/Cinese (ISO-2022-_CN)" + +# src/mainwindow.c:428 +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/_Vista/_Codice serie/Coreano (EUC-_KR)" + +# src/mainwindow.c:430 +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/_Vista/_Codice serie/Coreano (ISO-2022-KR)" + +# src/mainwindow.c:334 +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/_Messagggio/Rice_vi nuova posta" + +# src/mainwindow.c:335 +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/_Messaggio/Ricevi da _tutti gli acount" + +# src/mainwindow.c:338 +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/_Messaggio/Invia i messa_ggi accodati" + +# src/mainwindow.c:341 +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/_Messaggio/Componi _nuovo messaggio" + +# src/mainwindow.c:342 +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/_Messaggio/_Rispondi" + +# src/mainwindow.c:343 +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/_Messaggio/Rispondi a t_utti" + +# src/mainwindow.c:344 +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "_/Messaggio/_Inoltra" + +# src/mainwindow.c:345 +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "_/Messaggio/Inoltra come a_llegato" + +# src/mainwindow.c:348 +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/_Messaggio/Sp_osta" + +# src/mainwindow.c:348 +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +# src/mainwindow.c:349 +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/_Messaggio/Eli_mina" + +# src/mainwindow.c:350 +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/_Messaggio/Segn_a" + +# src/mainwindow.c:351 +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/_Messaggio/Segn_a/Segn_a" + +# src/mainwindow.c:352 +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/_Messaggio/Segn_a/To_gli segna" + +# src/mainwindow.c:353 +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/_Messaggio/Segn_a/---" + +# src/mainwindow.c:354 +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/_Messaggio/Segn_a/Segna co_me non letto" + +# src/mainwindow.c:355 +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/_Messaggio/Segn_a/Segna come fo_sse letto" + +# src/mainwindow.c:358 +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "_/Messaggio/Apri in una nuova _finestra" + +# src/mainwindow.c:359 +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/_Messaggio/Vedi _sorgente" + +# src/mainwindow.c:360 +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/_Messaggio/Mostra tutta l'intesta_zione" + +# src/mainwindow.c:361 +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/_Messaggio/Re_edit" + +# src/mainwindow.c:434 +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/_Sommario" + +# src/mainwindow.c:435 +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/_Sommario/_Elimina messaggi duplicati" + +# src/mainwindow.c:437 +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/_Sommario/_Filtro messaggi" + +# src/mainwindow.c:438 +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/_Sommario/E_segui" + +# src/mainwindow.c:439 +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/_Sommario/_Aggiorna" + +# src/mainwindow.c:441 src/mainwindow.c:445 src/mainwindow.c:447 +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/_Sommario/---" + +# src/mainwindow.c:442 +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/_Sommario/Messaggio _precedente" + +# src/mainwindow.c:443 +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/_Sommario/Messaggio se_guente" + +# src/mainwindow.c:444 +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/_Sommario/Messaggio segue_nte non letto" + +# src/mainwindow.c:446 +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/_Sommario/_Vai all'altra cartella" + +# src/mainwindow.c:448 +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/_Sommario/_Ordina" + +# src/mainwindow.c:449 +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/_Sommario/_Ordina/Ordina per _numero" + +# src/mainwindow.c:450 +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/_Sommario/_Ordina/Ordina per _grandezza" + +# src/mainwindow.c:451 +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/_Sommario/_Ordina/Ordina per _data" + +# src/mainwindow.c:452 +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/_Sommario/_Ordina/Ordina per _provenienza" + +# src/mainwindow.c:453 +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/_Sommario/_Ordina/Ordina per _soggetto" + +# src/mainwindow.c:454 +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/_Sommario/_Ordina/---" + +# src/mainwindow.c:455 +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/_Sommario/_Ordina/_Attrai per soggetto" + +# src/mainwindow.c:457 +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/_Sommario/Vista t_hread" + +# src/mainwindow.c:458 +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/_Sommario/Vista _unthread" + +# src/mainwindow.c:459 +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/_Sommario/I_mposta voci visualizzate" + +# src/mainwindow.c:476 +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/St_rumento/Finestra di _log" + +# src/mainwindow.c:478 +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/_Configurazione" + +# src/mainwindow.c:479 +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/_Configurazione/Preferenze _comuni..." + +# src/mainwindow.c:481 +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/_Configurazione/_Preferenze per account..." + +# src/mainwindow.c:483 +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/_Configurazione/---" + +# src/mainwindow.c:484 +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/_Configurazione/Crea _nuovo account..." + +# src/mainwindow.c:486 +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/_Configurazione/_Edit degli accounts... " + +# src/mainwindow.c:488 +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/_Configurazione/Ca_mbia l'account attuale" + +# src/mainwindow.c:492 +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/_Aiuto/_Manuale" + +# src/mainwindow.c:493 +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/_Aiuto/_Manuale/_Inglese" + +# src/mainwindow.c:494 +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/_Aiuto/_Manuale/_Giapponese" + +# src/mainwindow.c:495 +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/_Help/---" + +# src/mainwindow.c:524 +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Sto creando la finestra principale...\n" + +# src/mainwindow.c:643 +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "FinestraPrincipale: allocazione colore %d fallita.\n" + +# src/mainwindow.c:784 src/mainwindow.c:801 +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Senza titolo" + +# src/mainwindow.c:802 +#: src/mainwindow.c:816 +msgid "none" +msgstr "niente" + +# src/mainwindow.c:811 +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Account attuale: %s" + +# src/mainwindow.c:902 +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "posizione finestra: x = %d, y =%d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "" + +# src/mainwindow.c:911 +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "" + +# src/mainwindow.c:938 +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "Aggiungi mailbox" + +# src/mainwindow.c:939 +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"Immetti la posizione della mailbox.\n" +"Se è specificata una mailbox esistene, essa sarà\n" +"esaminata automaticamente." + +# src/mainwindow.c:945 +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "La mailbox `%s' esiste già." + +# src/mainwindow.c:950 src/setup.c:57 +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Mailbox" + +# src/mainwindow.c:956 src/setup.c:63 +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"Fallita creazione della mailbox.\n" +"Può darsi che esistano già alcuni file, oppure tu non hai il permesso di " +"scriverci." + +# src/mainwindow.c:1101 +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "Sto impostando i widgets..." + +# src/mainwindow.c:1302 +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Ricevi" + +# src/mainwindow.c:1303 +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Includi nuova posta" + +# src/mainwindow.c:1308 +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Ricevi tutti" + +# src/mainwindow.c:1309 +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Includi nuova posta di tutti gli accounts" + +# src/mainwindow.c:1320 +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Invia messaggi accodati" + +# src/mainwindow.c:1330 src/prefs_account.c:460 src/prefs_common.c:576 +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Componi" + +# src/mainwindow.c:1331 +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Componi nuovo messaggio" + +# src/mainwindow.c:1338 +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Rispondi" + +# src/mainwindow.c:1339 +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Rispondi al messaggio" + +# src/mainwindow.c:1346 +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "Rispondi tutti" + +# src/mainwindow.c:1347 +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "Rispondi a tutti" + +# src/mainwindow.c:1354 +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Inoltra" + +# src/mainwindow.c:1355 +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Inoltra il messaggio" + +# src/mainwindow.c:1366 +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Elimina il messaggio" + +# src/mainwindow.c:1374 +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Esegui" + +# src/mainwindow.c:1375 +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Esegui il processo segnato" + +# src/mainwindow.c:1385 +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "Seguente" + +# src/mainwindow.c:1386 +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Messaggio seguente non letto" + +# src/mainwindow.c:1396 +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Prefs" + +# src/mainwindow.c:1397 +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Preferenze comuni" + +# src/mainwindow.c:1404 +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Account" + +# src/mainwindow.c:1405 +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Impostazioni account" + +# src/mainwindow.c:1597 src/summaryview.c:2224 +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Uscita" + +# src/mainwindow.c:1597 src/summaryview.c:2224 +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "Esco da questo programma?" + +# src/mainwindow.c:1731 +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Fallito invio del messaggio accodato." + +# src/mainwindow.c:1841 +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "charset forzato: %s\n" + +# src/mbox.c:63 +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Sto ricevendo nuovi messaggi da %s dentro a %s...\n" + +# src/mbox.c:73 +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "non posso leggere il file mbox.\n" + +# src/mbox.c:80 +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "formato mbox invalido: %s\n" + +# src/mbox.c:87 +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "mbox malformato: %s\n" + +# src/mbox.c:104 +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "non posso aprire il file temporaneo\n" + +# src/mbox.c:154 +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"Trovato da non evadere:\n" +"%s" + +# src/mbox.c:189 +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "non posso scrivere sul file temporaneo\n" + +# src/mbox.c:221 +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d messaggi trovati.\n" + +# src/mbox.c:238 +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "non posso creare il file di blocco %s\n" + +# src/mbox.c:239 +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "usa 'flock' invece di 'file' se possibile.\n" + +# src/mbox.c:251 +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "non posso creare %s\n" + +# src/mbox.c:257 +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "la mailbox è occupata da un'altro processo, attendi...\n" + +# src/mbox.c:286 +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "non posso bloccare %s\n" + +# src/mbox.c:293 src/mbox.c:340 +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "tipo di blocco invalido\n" + +# src/mbox.c:326 +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "non posso sbloccare %s\n" + +# src/mbox.c:357 +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "non posso troncare la mailbox a zero.\n" + +# src/messageview.c:67 +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Sto creando la vista messaggio...\n" + +# src/mh.c:148 +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "non posso copiare il messaggio %s a %s\n" + +# src/mh.c:180 src/mh.c:237 +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Non posso aprire il file segnato.\n" + +# src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +# src/addressbook.c:1183 +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "" + +# src/imap.c:350 src/imap.c:391 src/mh.c:182 src/mh.c:246 +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +# src/mh.c:402 +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Ultimo numero nella dir %s = %d\n" + +# src/mh.c:601 +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tSto cercando i messaggi non in cache..." + +# src/mh.c:656 +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d trovati messaggi non in cache.\n" + +# src/mh.c:662 +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tSto ordinando i messaggi non in cache in ordine numerico... " + +# src/mimeview.c:103 +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/_Apri" + +# src/mimeview.c:104 +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/_Mostra come testo" + +# src/mimeview.c:105 src/summaryview.c:273 +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/_Salva come..." + +# src/compose.c:2636 +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +# src/mimeview.c:124 +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "Tipo MIME" + +# src/mimeview.c:128 +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Sto creando la vista MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +# src/mimeview.c:340 +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Non posso avere parte di un messaggio multiparte." + +# src/mimeview.c:569 src/mimeview.c:617 src/mimeview.c:636 +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Non posso salvare parte di un messaggio multiparte." + +# src/mimeview.c:603 src/summaryview.c:1761 +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Salva come" + +# src/mimeview.c:609 src/summaryview.c:1766 +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Sovrascrivi" + +# src/mimeview.c:610 src/summaryview.c:1767 +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "Sovrascrivi il file esistente?" + +# src/mimeview.c:679 +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "La linea di comando del visualizzatore MIME è invalida: `%s'" + +# src/news.c:75 +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "Sto creando la connessione NNTP a %s:%d ...\n" + +# src/news.c:111 +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "" +"La connessione NNTP a %s:%d è stata disconnessa. Mi sto riconnettendo...\n" + +# src/news.c:182 +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "l'articolo %d è già nella cache.\n" + +# src/news.c:191 +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "sto ricevendo l'articolo %d...\n" + +# src/news.c:196 +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "non posso leggere l'articolo %d\n" + +# src/news.c:228 +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "non posso postare l'articolo.\n" + +# src/news.c:252 +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "non posso recuperare l'articolo %d\n" + +# src/news.c:291 +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "non posso impostare il gruppo: %s\n" + +# src/news.c:297 +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "estensione articolo invalida: %d - %d\n" + +# src/news.c:306 +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "niente articoli nuovi.\n" + +# src/news.c:316 +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "sto ricevendo xover %d in %s...\n" + +# src/news.c:319 +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "non posso ricevere xover\n" + +# src/news.c:325 +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "errore occorso mentre stavo ricevendo xover.\n" + +# src/news.c:333 +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "linea xover invalida: %s\n" + +# src/news.c:434 +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "sto cancellando l'articolo %d...\n" + +# src/news.c:465 +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tSto cancellando tutti gli articoli nella cache... " + +# src/nntp.c:44 +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "Non posso connettermi al server NNTP: %s:%d\n" + +# src/nntp.c:73 src/nntp.c:135 +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "errore di protocollo: %s\n" + +# src/nntp.c:95 src/nntp.c:141 +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "errore di protocollo\n" + +# src/nntp.c:174 src/nntp.c:180 +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "Errore occorso mentre stavo postando\n" + +# src/passphrase.c:72 +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "Passphrase" + +# src/passphrase.c:224 +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[nessun id utente]" + +# src/passphrase.c:228 +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%sPer favore immetti la passphrase per:\n" +"\n" +" %.*s \n" +"(%.*s)\n" + +# src/passphrase.c:232 +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" +"Passphrase invalida! Prova ancora...\n" +"\n" + +# src/pop.c:98 src/pop.c:144 +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "errore occorso durante l'autorizzazione\n" + +# src/pop.c:116 +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "Non trovato l'APOP richiesto dal timestamp nel saluto\n" + +# src/pop.c:122 +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "Errore di sintassi timestamp nel saluto\n" + +# src/pop.c:169 src/pop.c:206 +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "Errore protocollo POP3\n" + +# src/prefs.c:56 +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Sto leggendo la configurazione...\n" + +# src/prefs.c:76 src/prefs.c:179 +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "Trovato %s\n" + +# src/prefs.c:90 +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Lettura configurazione finita.\n" + +# src/prefs.c:164 src/prefs.c:209 src/prefs_account.c:324 +# src/prefs_account.c:338 src/prefs_common.c:1841 src/prefs_common.c:1865 +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "scrittura configurazione su file fallita\n" + +# src/prefs.c:212 +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Configurazione salvata.\n" + +# src/prefs.c:465 +#: src/prefs.c:469 +msgid "Apply" +msgstr "Applica" + +# src/prefs_account.c:369 +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Sto aprendo la finestra preferenze account...\n" + +# src/prefs_account.c:394 +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Account%d" + +# src/prefs_account.c:407 +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Preferenze per il nuovo account" + +# src/prefs_account.c:412 +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Preferenze per ogni account" + +# src/prefs_account.c:434 +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Sto creando la finestra delle preferenze account...\n" + +# src/prefs_account.c:454 +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Principale" + +# src/prefs_account.c:456 src/prefs_common.c:572 +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Ricevi" + +# src/prefs_account.c:462 +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Avanzato" + +# src/prefs_account.c:527 +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Nome di questo account" + +# src/prefs_account.c:535 +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Usato abitualmente" + +# src/prefs_account.c:539 +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Informazione personale" + +# src/prefs_account.c:548 +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Nome completo" + +# src/prefs_account.c:554 +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "Indirizzo postale" + +# src/prefs_account.c:560 +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organizzazione" + +# src/prefs_account.c:584 +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Informazione server" + +# src/prefs_account.c:605 +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normale)" + +# src/prefs_account.c:607 +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOP auth)" + +# src/prefs_account.c:609 +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +# src/prefs_account.c:611 +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "News (NNTP)" + +# src/prefs_account.c:613 +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Nessuno (locale)" + +# src/prefs_account.c:664 +#: src/prefs_account.c:657 +msgid "News server" +msgstr "Server news" + +# src/prefs_account.c:670 +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Server per ricezione" + +# src/prefs_account.c:676 +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "Server SMTP (invio)" + +# src/prefs_account.c:683 +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "ID utente" + +# src/prefs_account.c:689 +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Password" + +# src/prefs_account.c:732 +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +# src/prefs_account.c:740 +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Togli i messaggi sul server quando sono ricevuti" + +# src/prefs_account.c:742 +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Ricevi tutti i messaggi sul server" + +# src/prefs_account.c:744 +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "In ricezione ricevi da tutti gli account" + +# src/prefs_account.c:746 +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Filro messaggi in ricezione" + +# src/prefs_account.c:783 src/prefs_common.c:1125 +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Intestazione" + +# src/prefs_account.c:790 +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Aggiungi campo data in intestazione" + +# src/prefs_account.c:791 +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Genera ID-messaggio" + +# src/prefs_account.c:800 +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Aggiungi intestazione definita dall'utente" + +# src/prefs_account.c:802 src/prefs_common.c:1423 +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr " Edit... " + +# src/prefs_account.c:809 +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Imposta automaticamente gli indirizzi seguenti" + +# src/prefs_account.c:818 +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +# src/prefs_account.c:831 +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +# src/prefs_account.c:844 +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Rispondi a" + +# src/prefs_account.c:857 +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "Autenticazione" + +# src/prefs_account.c:865 +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "Autenticazione SMTP (SMTP AUTH)" + +# src/prefs_account.c:867 +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "Mi autentico con POP3 prima dell'invio" + +# src/prefs_account.c:901 +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "File di firma" + +# src/prefs_account.c:939 +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Specifica la porta SMTP" + +# src/prefs_account.c:951 +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Specifica la porta POP3" + +# src/prefs_account.c:963 +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Specifica il nome di dominio" + +# src/prefs_account.c:1003 +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "L'indirizzo di posta non è impostato." + +# src/prefs_account.c:1008 +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "Il server SMTP non è impostato." + +# src/prefs_account.c:1013 +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "L'ID utente non è impostato." + +# src/prefs_account.c:1018 +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "Il server POP3 non è impostato." + +# src/prefs_account.c:1023 +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "Il server IMAP4 non è impostato." + +# src/prefs_account.c:1028 +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "Il server NNTP non è impostato." + +# src/prefs_common.c:549 +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Sto creando la finestra delle preferenze comuni...\n" + +# src/prefs_common.c:553 +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Preferenze comuni" + +# src/prefs_common.c:578 +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Mostra" + +# src/prefs_common.c:580 +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filtro" + +# src/prefs_common.c:583 +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "Privacy" + +# src/prefs_common.c:586 +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Interfaccia" + +# src/prefs_common.c:588 +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Altro" + +# src/prefs_common.c:640 src/prefs_common.c:800 +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Programma esterno" + +# src/prefs_common.c:649 +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Usa un programma esterno per incorporazione" + +# src/prefs_common.c:656 src/prefs_common.c:817 +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "Percorso programma" + +# src/prefs_common.c:668 +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Spool locale" + +# src/prefs_common.c:679 +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "Incorpora da spool" + +# src/prefs_common.c:681 +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Filtro su incorporazione" + +# src/prefs_common.c:689 +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Directory di spool" + +# src/prefs_common.c:709 +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Controllo automatico nuova posta" + +# src/prefs_common.c:711 +#: src/prefs_common.c:755 +msgid "each" +msgstr "ogni" + +# src/prefs_common.c:723 +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "minuto(i)" + +# src/prefs_common.c:732 +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "Controlla nuova posta in avvio" + +# src/prefs_common.c:734 +#: src/prefs_common.c:778 +msgid "News" +msgstr "News" + +# src/prefs_common.c:742 +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"Massimo numero di articoli da scaricare\n" +"(illimitato se è specificato 0)" + +# src/prefs_common.c:810 +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "Usa programma esterno per invio" + +# src/prefs_common.c:834 +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "Salva il messaggio inviato nell'outbox" + +# src/prefs_common.c:836 +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "Accoda il messaggio che ha fallito l'invio" + +# src/prefs_common.c:842 +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Codeset uscente" + +# src/prefs_common.c:857 +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Automatico" + +# src/prefs_common.c:858 +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7bit ascii (US-ASCII)" + +# src/prefs_common.c:860 +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +# src/prefs_common.c:862 +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Europeo Occidentale (ISO-8859-1)" + +# src/prefs_common.c:864 +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "Europeo Centrale (ISO-8859-2)" + +# src/prefs_common.c:865 +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltico (ISO-8859-13)" + +# src/prefs_common.c:866 +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltico (ISO-8859-4)" + +# src/prefs_common.c:867 +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "Greco (ISO-8859-7)" + +# src/prefs_common.c:868 +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +# src/prefs_common.c:869 +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirillico (ISO-8859-5)" + +# src/prefs_common.c:870 +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirillico (KOI8-R)" + +# src/prefs_common.c:871 +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirillico (Windows-1251)" + +# src/prefs_common.c:872 +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "Cirillico (KOI8-U)" + +# src/prefs_common.c:874 +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "Giapponese (ISO-2022-JP)" + +# src/prefs_common.c:875 +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "Giapponese (EUC-JP)" + +# src/prefs_common.c:876 +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "Giapponese (Shift_JIS)" + +# src/prefs_common.c:878 +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "Cinese semplificato (GB2312)" + +# src/prefs_common.c:879 +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "Cinese tradizionale (Big5)" + +# src/prefs_common.c:880 +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "Cinese tradizionale (EUC-TW)" + +# src/prefs_common.c:881 +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "Cinese (ISO-2022-CN)" + +# src/prefs_common.c:882 +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +# src/prefs_common.c:932 +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Quotazione" + +# src/prefs_common.c:940 +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "Quota messaggio quando rispondi" + +# src/prefs_common.c:946 +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "Segno quotazione" + +# src/prefs_common.c:959 +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Formato quotazione:" + +# src/prefs_common.c:964 +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr "Descrizione dei simboli" + +# src/prefs_common.c:991 +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Inserisci automaticamente la firma" + +# src/prefs_common.c:997 +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Separatore firma" + +# src/prefs_common.c:1015 +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "Messaggi a capo dopo" + +# src/prefs_common.c:1027 +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "caratteri" + +# src/prefs_common.c:1035 +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "A capo quotazione" + +# src/prefs_common.c:1037 +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "A capo prima di inviare" + +# src/prefs_common.c:1095 +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "Regole registrate" + +# src/prefs_common.c:1108 +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "Operatore" + +# src/prefs_common.c:1148 src/prefs_common.c:1949 src/prefs_common.c:2088 +# src/prefs_common.c:2100 +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(niente)" + +# src/prefs_common.c:1154 +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Parola chiave" + +# src/prefs_common.c:1173 +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Predicato" + +# src/prefs_common.c:1186 src/prefs_common.c:1197 src/prefs_common.c:1958 +# src/prefs_common.c:1961 src/prefs_common.c:2105 src/prefs_common.c:2108 +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "contiene" + +# src/prefs_common.c:1186 src/prefs_common.c:1197 src/prefs_common.c:2105 +# src/prefs_common.c:2108 +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "non contiene" + +# src/prefs_common.c:1213 +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Destinazione" + +# src/prefs_common.c:1236 +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Usa regex" + +# src/prefs_common.c:1240 +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "Non ricevo" + +# src/prefs_common.c:1265 +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "Registra" + +# src/prefs_common.c:1271 +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " Sostituisci " + +# src/prefs_common.c:1379 +# src/prefs_common.c:1379 +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "Font" + +# src/prefs_common.c:1388 +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Messaggio" + +# src/prefs_common.c:1408 +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "Mostra numero non letti vicino al nome cartella" + +# src/prefs_common.c:1421 +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Abilita colorazione del messaggio" + +# src/prefs_common.c:1432 +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Mostra alfabeto e mumeri a 2-byte con caratteri a 1-byte" + +# src/prefs_common.c:1434 +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "Mostra intestazione abbreviata sulla vista messaggio" + +# src/prefs_common.c:1444 +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Spazio linea" + +# src/prefs_common.c:1458 +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "pixel(s)" + +# src/prefs_common.c:1463 +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "Lascia spazio in testa" + +# src/prefs_common.c:1473 +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Traduci il nome intestazione (come `Da:', `Soggetto:')" + +# src/prefs_common.c:1476 +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Mostra destinatario sulla colonna `Da' se il mittente sei tu stesso" + +# src/prefs_common.c:1478 +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "Abilita la barra di scorrimento orizzontale" + +# src/prefs_common.c:1485 +# src/prefs_common.c:1485 +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr " Imposta le voci visibili del sommario..." + +# src/prefs_common.c:1528 +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "Cripta messaggio per default" + +# src/prefs_common.c:1531 +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "Firma messaggio per default" + +# src/prefs_account.c:809 +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +# src/prefs_common.c:1534 +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "Prendi l'input mentre immetto la passphrase" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +# src/prefs_common.c:1569 +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" +"Emula il comportamento delle operazioni del mouse di un\n" +"programma di posta basato su Emacs" + +# src/prefs_common.c:1576 +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Apri il primo messaggio non letto quando entri in una cartella" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +# src/prefs_common.c:1584 +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "Esegui immediatamente quando sposti o elimini dei messaggi" + +# src/prefs_common.c:1591 +# src/prefs_common.c:1591 +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"(I messaggi veranno segnati fino all'esecuzione\n" +" se questa è inattiva)" + +# src/prefs_common.c:1421 +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +# src/prefs_common.c:1596 +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "In uscita" + +# src/prefs_common.c:1604 +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Chiedi conferma all' uscita" + +# src/prefs_common.c:1611 +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +# src/prefs_common.c:1613 +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +# src/prefs_common.c:1649 +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Web browser esterno (%s verrà sostituito con URI)" + +# src/prefs_common.c:1656 src/prefs_common.c:1680 src/prefs_common.c:1696 +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "Comando" + +# src/prefs_common.c:1673 +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Stampa (%s verrà sostituito con il nome del file)" + +# src/prefs_common.c:1689 +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Editor esterno (%s verrà sostituito con il nome del file)" + +# src/compose.c:2592 +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +# src/account.c:445 src/summary_search.c:192 +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +# src/prefs_common.c:1741 +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "Descrizione dei simboli" + +# src/prefs_common.c:1769 +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"Data\n" +"Da\n" +"Nome completo del Mittente\n" +"Primo Nome del Mittente\n" +"Iniziali del Mittente\n" +"Soggetto\n" +"A\n" +"ID-messaggio\n" +"%" + +# src/prefs_common.c:1801 +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Sto leggendo la configurazione filtro...\n" + +# src/prefs_common.c:1837 +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "Sto scrivendo la configurazione filtro...\n" + +# src/prefs_common.c:1880 +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(Nuovo)" + +# src/prefs_common.c:1931 +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Destinazione non impostata." + +# src/prefs_common.c:1936 +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Nome intestazione non impostato." + +# src/prefs_common.c:2042 +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "Elimina regola" + +# src/prefs_common.c:2043 +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "Vuoi realmente eliminare questa regola?" + +# src/prefs_common.c:2208 +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Imposta voce mostra" + +# src/prefs_common.c:2225 +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Segna" + +# src/prefs_common.c:2227 +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +# src/prefs_common.c:2228 +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Numero" + +# src/prefs_common.c:2230 src/summaryview.c:323 +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Data" + +# src/prefs_common.c:2231 src/summaryview.c:324 +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "Da" + +# src/prefs_common.c:2232 src/summaryview.c:325 +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Soggetto" + +# src/prefs_common.c:2285 +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "Selezione font" + +# src/procheader.c:525 +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "DomLunMarMerGioVenSab" + +# src/procmime.c:683 +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Conversione codice fallita.\n" + +# src/procmsg.c:138 +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "I dati nella cache sono corrotti\n" + +# src/procmsg.c:201 +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tNessun file nella cache\n" + +# src/procmsg.c:207 +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tSto leggendo il sommario della cache..." + +# src/procmsg.c:212 +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "La versione nella cache è diversa. La scarto.\n" + +# src/procmsg.c:276 +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tSto segnando i messaggi..." + +# src/procmsg.c:317 +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d nuovo(i) messaggio(i)\n" + +# src/procmsg.c:439 +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "File segnato non trovato.\n" + +# src/procmsg.c:441 +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "La versione segnata è differente (%d != %d). La scarto.\n" + +# src/procmsg.c:457 +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "Non posso aprire il file segnato con il modo aggiungi.\n" + +# src/procmsg.c:462 +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "Non posso aprire il file segnato con il modo scrivi.\n" + +# src/procmsg.c:610 +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "Fallito invio del messaggio accodato.\n" + +# src/procmsg.c:667 +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "La linea comando di stampa è invalida: `%s'\n" + +# src/progressdialog.c:48 +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "Sto creando il dialogo progresso...\n" + +# src/recv.c:107 +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "errore occorso mentre recuperavo dati.\n" + +# src/recv.c:128 src/recv.c:169 src/recv.c:181 +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "Non posso scrivere sul file.\n" + +# src/rfc2015.c:152 +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "Oops: Firma non verificata" + +# src/rfc2015.c:156 +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "Firma non trovata" + +# src/rfc2015.c:160 +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "Firma buona" + +# src/rfc2015.c:164 +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "Firma DIFETTOSA" + +# src/rfc2015.c:168 +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "Nessuna chiave pubblica per verificare la firma" + +# src/rfc2015.c:172 +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "Errore verificando la firma" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +# src/rfc2015.c:160 +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +# src/rfc2015.c:164 +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +# src/prefs_account.c:901 +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +# src/select-keys.c:241 +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "Seleziona Chiavi" + +# src/select-keys.c:253 +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "Seleziona chiave per: " + +# src/select-keys.c:271 +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "ID chiave" + +# src/select-keys.c:274 +#: src/select-keys.c:274 +msgid "Val" +msgstr "Val" + +# src/select-keys.c:288 +#: src/select-keys.c:288 +msgid "Select" +msgstr "Seleziona" + +# src/send.c:146 +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "L'intestazione del messaggio accodato è spezzata.\n" + +# src/send.c:155 +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "Account non trovato.Uso l'account corrente...\n" + +# src/send.c:166 +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "Account non trovato.\n" + +# src/send.c:197 +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Mi sto connettendo al server SMTP: %s...\n" + +# src/send.c:239 +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "Non posso connettermi al server SMTP: %s:%d\n" + +# src/send.c:252 +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "Errore occorso mentre stavo inviando HELO\n" + +# src/setup.c:43 +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "Impostazione mailbox" + +# src/setup.c:44 +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"Primo, tu devi selezionare la posizione della mailbox.\n" +"Tu puoi usare la maibox esistente nel formato MH\n" +"se ne hai una.\n" +"Se non sei sicuro, seleziona semplicemente OK." + +# src/sourcewindow.c:76 +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "Sto creando la finestra sorgente...\n" + +# src/sourcewindow.c:80 +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "Sorgente del messaggio" + +# src/sourcewindow.c:140 +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "Sto visualizzando il sorgente di %s ...\n" + +# src/sourcewindow.c:142 +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - Sorgente" + +# src/summary_search.c:99 src/summary_search.c:190 +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "Ricerca" + +# src/summary_search.c:172 +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Sensibile al carattere" + +# src/summary_search.c:178 +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "Ricerca all'indietro" + +# src/summary_search.c:184 +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "Seleziona tutti gli uguali" + +# src/summary_search.c:191 +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Pulisci" + +# src/summary_search.c:286 +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "Ricerca fallita" + +# src/summary_search.c:287 +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "Sringa ricercata non trovata." + +# src/summary_search.c:292 +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Ho raggiunto l'inizio della lista; continuo dalla fine?" + +# src/summary_search.c:294 +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Ho raggiunto la fine della lista; continuo dall'inizio?" + +# src/summary_search.c:296 +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Ricerca terminata" + +# src/summaryview.c:257 +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/Sp_osta" + +# src/summaryview.c:258 +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/_Copia" + +# src/summaryview.c:260 +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/Ese_gui" + +# src/summaryview.c:276 +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/_Segna" + +# src/summaryview.c:277 +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/_Segna/_Segna" + +# src/summaryview.c:278 +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/_Segna/_Non segnare" + +# src/summaryview.c:279 +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/_Segna/---" + +# src/summaryview.c:280 +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/_Segna/Segna come non l_etto" + +# src/summaryview.c:283 +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/_Segna/Fallo _come sia letto" + +# src/summaryview.c:262 +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/_Rispondi" + +# src/summaryview.c:263 +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/Rispondi a t_utti" + +# src/summaryview.c:264 +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/_Inoltra" + +# src/summaryview.c:265 +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Inoltra come a_llegato" + +# src/summaryview.c:268 +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/Apri in una nuova _finestra" + +# src/summaryview.c:269 +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/Vista so_rgente" + +# src/summaryview.c:270 +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Mostra tutte le intesta_zioni" + +# src/summaryview.c:271 +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/Re_edit" + +# src/summaryview.c:274 +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/Stam_pa" + +# src/summaryview.c:285 +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/Seleziona _tutto" + +# src/summaryview.c:291 +#: src/summaryview.c:320 +msgid "M" +msgstr "S" + +# src/summaryview.c:291 +#: src/summaryview.c:320 +msgid "U" +msgstr "N" + +# src/summaryview.c:307 +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Sto creando la vista sommario...\n" + +# src/summaryview.c:322 +#: src/summaryview.c:350 +msgid "No." +msgstr "No." + +# src/summaryview.c:546 +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Segna processo" + +# src/summaryview.c:547 +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Alcuni segni sono esclusi. Li elaboro?" + +# src/summaryview.c:571 +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"cartella vuota\n" +"\n" + +# src/summaryview.c:582 +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Sto esaminando la cartella (%s)..." + +# src/summaryview.c:647 +#: src/summaryview.c:673 +msgid "done." +msgstr "fatto." + +# src/summaryview.c:779 +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "Nessun messaggio non letto" + +# src/summaryview.c:780 +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "Nessun messaggio non letto trovato. Vado alla cartella seguente?" + +# src/summaryview.c:846 src/summaryview.c:848 +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Messaggi attraenti di soggetto..." + +# src/summaryview.c:993 +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d eliminato" + +# src/summaryview.c:997 +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d spostato" + +# src/summaryview.c:1005 +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +# src/summaryview.c:997 +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +# src/summaryview.c:1015 +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " voce(i) selezionate" + +# src/summaryview.c:1024 +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d nuovo, %d non letto, %d totale (%s)" + +# src/summaryview.c:1030 +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d nuovo, %d non letto, %d totale" + +# src/summaryview.c:1071 src/summaryview.c:1072 +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Sto ordinando il sommario" + +# src/summaryview.c:1110 +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tSto impostando il sommario dai dati messaggio..." + +# src/summaryview.c:1112 +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "Sto impostando il sommario dai dati messaggio..." + +# src/summaryview.c:1221 +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "Sto scrivendo il sommario della cache (%s)..." + +# src/summaryview.c:1273 +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(Nessuna Data)" + +# src/summaryview.c:1468 +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Il messaggio %d è segnato\n" + +# src/summaryview.c:1501 +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Il messaggio %d è segnato come fosse letto\n" + +# src/summaryview.c:1532 +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Il messaggio %d è segnato come non letto\n" + +# src/summaryview.c:1564 +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Il messaggio %s/%d è impostato per essere eliminato\n" + +# src/summaryview.c:1578 +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "La cartella attuale é Cestino." + +# src/summaryview.c:1600 src/summaryview.c:1602 +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Elimino i messaggi duplicati..." + +# src/summaryview.c:1652 +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Il messaggio %s/%d non è segnato\n" + +# src/summaryview.c:1691 +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Il messaggio %d è impostato per essere spostato a %s\n" + +# src/summaryview.c:1703 +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "La destinazione è la stessa della cartella attuale." + +# src/summaryview.c:1691 +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +# src/summaryview.c:1703 +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +# src/summaryview.c:1734 +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "Sto selezionando tutti i messaggi..." + +# src/summaryview.c:1788 +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Stampa" + +# src/summaryview.c:1789 +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Immetti la linea del comando stampa:\n" +"(`%s' verrà sostituito col nome file)" + +# src/summaryview.c:1795 +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"La linea del comando stampa non è valida:\n" +"`%s'" + +# src/summaryview.c:1967 src/summaryview.c:1968 +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "Sto costruendo i threads..." + +# src/summaryview.c:1990 src/summaryview.c:1991 +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "Sto cancellando i threads..." + +# src/summaryview.c:2013 +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "Sto cancellando i threads per esecuzione..." + +# src/summaryview.c:2099 +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "sto filtrando..." + +# src/summaryview.c:2100 +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "Sto filtrando..." + +# src/summaryview.c:2201 +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "Vado a %s\n" + +# src/textview.c:128 +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Sto creando la vista testo...\n" + +# src/textview.c:361 +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "Per salvare questa parte, apri il menù contesto con\n" + +# src/textview.c:364 +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"click destro e seleziona `Salva come...', o premi il tasto `y'.\n" +"\n" + +# src/textview.c:368 +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "Per mostrare questa parte come testo del messaggio, seleziona\n" + +# src/textview.c:371 +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`Mostra come testo', o premi il tasto `t'.\n" +"\n" + +# src/textview.c:375 +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "Per aprire questa parte con un programma esterno, seleziona `Apri',\n" + +# src/textview.c:378 +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" +"o fai doppio-click, o fai click col pulsante centrale, o premi il tasto `l'." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +# src/textview.c:361 +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +# src/textview.c:364 +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +# src/utils.c:1271 +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "fallita scrittura verso %s.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +# src/utils.c:1423 +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "La linea del comando apertura URI non è valida: `%s'" + +# src/mainwindow.c:440 +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/_Sommario/Seleziona t_utto" + +# src/mainwindow.c:910 +#~ msgid "Clean trash" +#~ msgstr "Pulisci il cestino" + +# src/summaryview.c:281 +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/_Segna/Segna come _importante" + +# src/textview.c:220 +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "VistaTesto: allocazione colore fallita\n" + +# src/main.c:215 +#~ msgid "Usage: sylpheed [--debug]\n" +#~ msgstr "Uso: sylpheed [--debug]\n" + +# src/textview.c:413 +#~ msgid "*** Warning: code conversion failed ***\n" +#~ msgstr "*** Allarme: conversione codice fallita ***\n" diff --git a/po/ja.gmo b/po/ja.gmo new file mode 100644 index 0000000000000000000000000000000000000000..dab08782605908f54c1c6c995a37fa9ff7cbefd7 GIT binary patch literal 62521 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 NrPg_Rtu;p+_dh}-hG75z literal 0 HcmV?d00001 diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 000000000..28492075b --- /dev/null +++ b/po/ja.po @@ -0,0 +1,3706 @@ +# Japanese translation of Sylpheed +# Copyright (C) 1999 Free Software Foundation, Inc. +# Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>, 1999,2000,2001. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-19 14:23+0900\n" +"PO-Revision-Date: 1999-10-12\n" +"Last-Translator: Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>\n" +"Language-Team: Japanese <ja@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=EUC-JP\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "¤³¤Î¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"fetchmail ¤«¤éŬÍѤµ¤ì¤¿Éôʬ¤ÎÃøºî¸¢¤Ï Eric S. Raymond »á (1997) " +"¤Ëµ¢Â°¤·¤Þ¤¹¡£¤Þ¤¿¡¢¤½¤Î°ìÉô¤ÎÃøºî¸¢¤Ï Carl Harris »á (1993, 1995) " +"¤Ëµ¢Â°¤·¤Þ¤¹¡£Ãøºî¸¢¤Ï¥½¡¼¥¹¤Î¼«Í³¤ÊºÆÇÛÉÛ¤òÊݸ¤ëÌÜŪ¤Ç°Ý»ý¤µ¤ì¤Æ¤¤¤Þ¤¹¡£" +"\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"MD5 ¥µ¥Ý¡¼¥È¤ÎÃøºî¸¢¤Ï RSA Data Security, Inc. " +"¼Ò¤Ëµ¢Â°¤·¤Þ¤¹¡£»ÈÍѾò·ï¤Ë´Ø¤·¤Æ¤Ï md5.c " +"¥â¥¸¥å¡¼¥ë¤Î¥Ø¥Ã¥À¤Î¥³¥á¥ó¥È¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc ¤ÎÃøºî¸¢¤Ï Yasuhiro Tonooka <tonooka@msi.co.jp> »á¤Ëµ¢Â°¤·¤Þ¤¹¡£\n" +"libkcc ¤ÎÃøºî¸¢¤Ï takeshi@SoftAgency.co.jp »á¤Ëµ¢Â°¤·¤Þ¤¹¡£\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"GPGME ¤ÎÃøºî¸¢¤Ï Werner Koch <dd9jn@gnu.org> »á (2001) ¤Ëµ¢Â°¤·¤Þ¤¹¡£\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"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.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"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.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"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." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:293 src/mainwindow.c:1642 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1699 src/prefs_common.c:1918 src/prefs_common.c:2034 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "OK" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Á´¤Æ¤Î¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "¥é¥Ù¥ëȯ¸«: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤¬³«¤¤¤Æ¤¤¤Þ¤¹¡£\n" +"¥¢¥«¥¦¥ó¥È¤òÊÔ½¸¤¹¤ëÁ°¤ËÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤òÊĤ¸¤Æ¤¯¤À¤µ¤¤¡£" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "¥¢¥«¥¦¥ó¥ÈÊÔ½¸¥¦¥£¥ó¥É¥¦¤ò³«¤¤¤Æ¤¤¤Þ¤¹...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "¥¢¥«¥¦¥ó¥ÈÊÔ½¸¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "̾Á°" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "¥×¥í¥È¥³¥ë" + +#: src/account.c:382 +msgid "Server" +msgstr "¥µ¡¼¥Ð" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "ÄɲÃ" + +#: src/account.c:407 +msgid "Edit" +msgstr "ÊÔ½¸" + +#: src/account.c:413 +msgid " Delete " +msgstr " ºï½ü " + +#: src/account.c:419 src/prefs_filter.c:432 +msgid "Down" +msgstr " ¢­ " + +#: src/account.c:425 src/prefs_filter.c:426 +msgid "Up" +msgstr " ¢¬ " + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Ä̾ï»ÈÍѤ¹¤ë¥¢¥«¥¦¥ó¥È¤Ë»ØÄê " + +#: src/account.c:445 src/prefs_filter.c:192 src/summary_search.c:192 +msgid "Close" +msgstr "ÊĤ¸¤ë" + +#: src/account.c:498 +msgid "Delete account" +msgstr "¥¢¥«¥¦¥ó¥È¤Îºï½ü" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "ËÜÅö¤Ë¤³¤Î¥¢¥«¥¦¥ó¥È¤òºï½ü¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤«?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:938 src/prefs_filter.c:715 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "¤Ï¤¤" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+¤¤¤¤¤¨" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:329 +msgid "/_File" +msgstr "/¥Õ¥¡¥¤¥ë(_F)" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¿·µ¬¥¢¥É¥ì¥¹(_A)" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¿·µ¬¥°¥ë¡¼¥×(_G)" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¿·µ¬¥Õ¥©¥ë¥À(_F)" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:339 src/mainwindow.c:342 +msgid "/_File/---" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/ÊÔ½¸(_E)" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/ºï½ü(_D)" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:343 +msgid "/_File/_Close" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/ÊĤ¸¤ë(_C)" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:515 +msgid "/_Help" +msgstr "/¥Ø¥ë¥×(_H)" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:520 +msgid "/_Help/_About" +msgstr "/¥Ø¥ë¥×(_H)/¤³¤Î¥×¥í¥°¥é¥à¤Ë¤Ä¤¤¤Æ(_A)" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/¿·µ¬¥¢¥É¥ì¥¹(_A)" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/¿·µ¬¥°¥ë¡¼¥×(_G)" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/¿·µ¬¥Õ¥©¥ë¥À(_F)" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:346 +msgid "/_Edit" +msgstr "/ÊÔ½¸(_E)" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/ºï½ü(_D)" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "ÅŻҥ᡼¥ë ¥¢¥É¥ì¥¹" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "È÷¹Í" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "¥¢¥É¥ì¥¹Ä¢" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "̾Á°:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1391 +#: src/prefs_filter.c:392 +msgid "Delete" +msgstr "ºï½ü" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "¸¡º÷" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "°¸Àè:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "¶¦Í­¥¢¥É¥ì¥¹" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "¸Ä¿ÍÍÑ¥¢¥É¥ì¥¹" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "¥¢¥É¥ì¥¹¤Îºï½ü" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "ËÜÅö¤Ë¤³¤Î¥¢¥É¥ì¥¹¤òºï½ü¤·¤Þ¤¹¤«?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:938 +#: src/prefs_filter.c:715 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "¤¤¤¤¤¨" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "¿·µ¬¥Õ¥©¥ë¥À" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "¿·µ¬¥Õ¥©¥ë¥À¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NewFolder" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "¤½¤Î̾Á°¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "¿·µ¬¥°¥ë¡¼¥×" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "¿·µ¬¥°¥ë¡¼¥×¤Î̾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NewGroup" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "¥°¥ë¡¼¥×¤ÎÊÔ½¸" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "¥°¥ë¡¼¥×¤Î¿·¤·¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "¥Õ¥©¥ë¥À¤ÎÊÔ½¸" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "¥Õ¥©¥ë¥À¤Î¿·¤·¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "ËÜÅö¤Ë `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "¥¢¥É¥ì¥¹¤ÎÊÔ½¸" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "¥¢¥É¥ì¥¹" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:293 src/mainwindow.c:1642 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2035 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "¥­¥ã¥ó¥»¥ë" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "¥¢¥É¥ì¥¹Ä¢¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤ßÃæ..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s ¤Ï¸ºß¤·¤Þ¤»¤ó¡£\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:670 src/mainwindow.c:1274 src/mh.c:842 src/mh.c:849 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "´°Î»¡£\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "¥¢¥É¥ì¥¹Ä¢¤ò¥Õ¥¡¥¤¥ë¤Ë½ñ¤­½Ð¤·¤Æ¤¤¤Þ¤¹..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "¥¢¥É¥ì¥¹Ä¢¤Î¥Ç¡¼¥¿¤Î½ñ¤­¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:291 +msgid "Notice" +msgstr "Ãí°Õ" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "·Ù¹ð" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "¥¨¥é¡¼" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "·Ù¹ð¥Ñ¥Í¥ë¥À¥¤¥¢¥í¥°¤òºîÀ®Ãæ...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "¥á¥â¥ê¤ò³ÎÊݤǤ­¤Þ¤»¤ó\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/ÄɲÃ(_A)..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/ºï½ü(_R)" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/¥×¥í¥Ñ¥Æ¥£(_P)..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥¡¥¤¥ë¤òźÉÕ(_A)" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥¡¥¤¥ë¤òÁÞÆþ(_I)" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/½ð̾¤òÁÞÆþ(_G)" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/ÊÔ½¸(_E)/¸µ¤ËÌ᤹(_U)" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/ÊÔ½¸(_E)/¤ä¤êľ¤·(_R)" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:349 +msgid "/_Edit/---" +msgstr "/ÊÔ½¸(_E)/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/ÊÔ½¸(_E)/¥«¥Ã¥È(_T)" + +#: src/compose.c:385 src/mainwindow.c:347 +msgid "/_Edit/_Copy" +msgstr "/ÊÔ½¸(_E)/¥³¥Ô¡¼(_C)" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/ÊÔ½¸(_E)/¥Ú¡¼¥¹¥È(_E)" + +#: src/compose.c:387 src/mainwindow.c:348 +msgid "/_Edit/Select _all" +msgstr "/ÊÔ½¸(_E)/Á´¤ÆÁªÂò(_A)" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/ÊÔ½¸(_E)/Ť¤¹Ô¤òÀÞ¤êÊÖ¤¹(_L)" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/ÊÔ½¸(_E)/³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸(_X)" + +#: src/compose.c:393 src/mainwindow.c:439 +msgid "/_Message" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á÷¿®(_S)" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¸å¤ÇÁ÷¿®(_L)" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Áð¹Æ¥Õ¥©¥ë¥À¤ËÊݸ(_D)" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:443 src/mainwindow.c:446 src/mainwindow.c:453 +#: src/mainwindow.c:464 +msgid "/_Message/---" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/°¸Àè(_T)" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/_Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/_Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ÊÖ¿®Àè¤ò»ØÄê(_R)" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Õ¥©¥í¡¼Àè¤ò»ØÄê(_F)" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/źÉÕ(_A)" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/½ð̾(_G)" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/°Å¹æ²½(_E)" + +#: src/compose.c:414 src/mainwindow.c:496 +msgid "/_Tool" +msgstr "/¥Ä¡¼¥ë(_T)" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/¥Ä¡¼¥ë(_T)/¥ë¡¼¥é¤òɽ¼¨(_R)" + +#: src/compose.c:416 src/mainwindow.c:497 +msgid "/_Tool/_Address book" +msgstr "/¥Ä¡¼¥ë(_T)/¥¢¥É¥ì¥¹Ä¢(_A)" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "¥Æ¥­¥¹¥È¥Ñ¡¼¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: ¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "¥Õ¥¡¥¤¥ë %s ¤Ï¸ºß¤·¤Þ¤»¤ó\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "¥Õ¥¡¥¤¥ë %s ¤Î¥µ¥¤¥º¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "¥Õ¥¡¥¤¥ë %s ¤Ï¶õ¤Ç¤¹\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "¥á¥Ã¥»¡¼¥¸: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [¹¹¿·]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - ¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "°¸À褬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "Á÷¿®Àè¤Î¥ê¥¹¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"¥á¡¼¥ë¤òÁ÷¿®¤¹¤ë¤¿¤á¤Î¥¢¥«¥¦¥ó¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" +"Á÷¿®¤¹¤ëÁ°¤Ë¥á¡¼¥ë¥¢¥«¥¦¥ó¥È¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤Ë¥Ý¥¹¥È¤¹¤ëÅÓÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Á÷¿®ÂÔµ¡" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" +"¤³¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ËÆþ¤ì¤Þ¤¹¤«?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔµ¡¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£" + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "¥Õ¥¡¥¤¥ë¥â¡¼¥É¤òÊѹ¹¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "¥á¥Ã¥»¡¼¥¸¤Îʸ»ú¥³¡¼¥É¥»¥Ã¥È¤òÊÑ´¹¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "¥Ø¥Ã¥À¤ò½ñ¤­¹þ¤á¤Þ¤»¤ó¡£\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÊݸ¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÊݸ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤Æ¤¤¤Þ¤¹...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔµ¡¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "À¸À®¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸ID: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME ¥¿¥¤¥×" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2029 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "¥µ¥¤¥º" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "º¹½Ð¿Í:" + +#: src/compose.c:2668 src/mainwindow.c:1345 src/prefs_account.c:459 +#: src/prefs_common.c:595 +msgid "Send" +msgstr "Á÷¿®" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "¸å¤ÇÁ÷¿®" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "Á÷¿®ÂÔ¤Á¥Õ¥©¥ë¥À¤ËÆþ¤ì¤Æ¸å¤ÇÁ÷¿®" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Áð¹Æ" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Áð¹Æ¥Õ¥©¥ë¥À¤ËÊݸ" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "ÁÞÆþ" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "¥Õ¥¡¥¤¥ë¤òÁÞÆþ" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "źÉÕ" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "¥Õ¥¡¥¤¥ë¤òźÉÕ" + +#: src/compose.c:2712 src/prefs_common.c:996 +msgid "Signature" +msgstr "½ð̾" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "½ð̾¤òÁÞÆþ" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "¥¨¥Ç¥£¥¿" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "³°Éô¥¨¥Ç¥£¥¿¤ÇÊÔ½¸" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "¼«Æ°²þ¹Ô" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "Ť¤¹Ô¤òÀÞ¤êÊÖ¤¹" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "̵¸ú¤Ê MIME ¥¿¥¤¥×¤Ç¤¹¡£" + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Ê¤¤¤«¤Þ¤¿¤Ï¶õ¤Ç¤¹¡£" + +#: src/compose.c:3022 +msgid "Property" +msgstr "¥×¥í¥Ñ¥Æ¥£" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°" + +#: src/compose.c:3065 +msgid "Path" +msgstr "¥Ñ¥¹" + +#: src/compose.c:3066 +msgid "File name" +msgstr "¥Õ¥¡¥¤¥ë̾" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "³°Éô¥¨¥Ç¥£¥¿¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"³°Éô¥¨¥Ç¥£¥¿¤¬Æ°ºîÃæ¤Ç¤¹¡£\n" +"¥×¥í¥»¥¹¤ò¶¯À©½ªÎ»¤·¤Þ¤¹¤«?\n" +"¥×¥í¥»¥¹¥°¥ë¡¼¥×ID: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "½ªÎ»¤·¤¿¥×¥í¥»¥¹¥°¥ë¡¼¥×ID: %d" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Compose: ´Æ»ë¥×¥í¥»¥¹¤«¤é¤ÎÆþÎÏ\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "³°Éô¥¨¥Ç¥£¥¿¤ò¼Â¹Ô¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "¥Ñ¥¤¥×¤ÎÆɤ߹þ¤ß¤Ë¼ºÇÔ\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "¸Å¤¤Áð¹Æ¥á¥Ã¥»¡¼¥¸¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "¥Õ¥¡¥¤¥ë¤ÎÁªÂò" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "¥á¥Ã¥»¡¼¥¸¤ÎÇË´þ" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "¤³¤Î¥á¥Ã¥»¡¼¥¸¤ÏÊѹ¹¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÇË´þ¤·¤Þ¤¹¤«?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "ÇË´þ" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "Áð¹Æ¤Ø" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "¥Õ¥©¥ë¥À¤ÎÁªÂò" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/¿·µ¬¥Õ¥©¥ë¥À¤òºîÀ®(_N)..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/¥Õ¥©¥ë¥À̾¤òÊѹ¹(_R)..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/¥Õ¥©¥ë¥À¤òºï½ü(_D)" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òºï½ü(_M)" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/IMAP4¥µ¡¼¥Ð¤òºï½ü(_I)" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤ò¹ØÆÉ(_S)..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤òºï½ü(_R)" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤òºï½ü(_N)" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "¥Õ¥©¥ë¥À" + +#: src/folderview.c:234 +msgid "New" +msgstr "¿·Ãå" + +#: src/folderview.c:235 src/prefs_common.c:2026 +msgid "Unread" +msgstr "̤ÆÉ" + +#: src/folderview.c:235 +msgid "#" +msgstr "Áí¿ô" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "¥Õ¥©¥ë¥À¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "¥Õ¥©¥ë¥À¾ðÊó¤òÀßÄêÃæ...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "¥Õ¥©¥ë¥À¾ðÊó¤òÀßÄêÃæ..." + +#: src/folderview.c:516 src/mainwindow.c:2060 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥óÃæ (%s%c%s) ..." + +#: src/folderview.c:521 src/mainwindow.c:2065 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥óÃæ (%s)..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "Á´¥Õ¥©¥ë¥À¤ò¹¹¿·Ãæ..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "¼õ¿®È¢" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Á÷¿®¹µ" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "Á÷¿®ÂÔ¤Á" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "¤´¤ßÈ¢" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "¥Õ¥©¥ë¥À %s ¤¬ÁªÂò¤µ¤ì¤Þ¤·¤¿\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "¥Õ¥©¥ë¥À̾¤Ë `%c' ¤ò´Þ¤à¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "¥Õ¥©¥ë¥À `%s' ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "`%s' ¤Î¿·¤·¤¤Ì¾Á°¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "¥Õ¥©¥ë¥À̾¤ÎÊѹ¹" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"`%s' °Ê²¼¤Î¥Õ¥©¥ë¥À¤È¥á¥Ã¥»¡¼¥¸¤ÏÁ´¤Æºï½ü¤µ¤ì¤Þ¤¹¡£\n" +"ËÜÅö¤Ëºï½ü¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤«?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "¥Õ¥©¥ë¥À¤Îºï½ü" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "¥Õ¥©¥ë¥À `%s' ¤òºï½ü¤Ç¤­¤Þ¤»¤ó\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"ËÜÅö¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ `%s' ¤òºï½ü¤·¤Þ¤¹¤«?\n" +"(¥á¥Ã¥»¡¼¥¸¤Ï¥Ç¥£¥¹¥¯¤«¤é¤Ïºï½ü¤µ¤ì¤Þ¤»¤ó)" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "¥Õ¥©¥ë¥À¤Îºï½ü" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "ËÜÅö¤Ë¥Õ¥©¥ë¥À `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "ËÜÅö¤ËIMAP4¥µ¡¼¥Ð `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "IMAP4¥µ¡¼¥Ð¤Îºï½ü" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Î¹ØÆÉ" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "¹ØÆɤ¹¤ë¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥× `%s' ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "ËÜÅö¤Ë¥Ë¥å¡¼¥¹¥°¥ë¡¼¥× `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×¤Îºï½ü" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "ËÜÅö¤Ë¥Ë¥å¡¼¥¹¥µ¡¼¥Ð `%s' ¤òºï½ü¤·¤Þ¤¹¤«?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "¥Ë¥å¡¼¥¹¥µ¡¼¥Ð¤Îºï½ü" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "ÆüËܸìAbc" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "¥Ë¥å¡¼¥¹¥°¥ë¡¼¥×:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "·ï̾:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "¥Ø¥Ã¥À¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/headerview.c:173 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(º¹½Ð¿ÍÉÔÌÀ)" + +#: src/headerview.c:188 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(·ï̾¤Ê¤·)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "¥Ø¥Ã¥À¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Á´¥Ø¥Ã¥À" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "%s ¤Î¥Ø¥Ã¥À¤òɽ¼¨¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Á´¥Ø¥Ã¥À" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "¥¤¥á¡¼¥¸¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "²èÁü¤òÆɤ߹þ¤á¤Þ¤»¤ó¡£" + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "%s:%d ¤Ø¤ÎIMAP4¤ÎÀܳ¤¬ÀÚ¤ì¤Æ¤¤¤Þ¤¹¡£ºÆÀܳ¤·¤Þ¤¹...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "%s:%d ¤Ø¤ÎIMAP4¤ÎÀܳ¤ò³ÎΩÃæ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "¥Õ¥©¥ë¥À %s ¤òÁªÂò¤Ç¤­¤Þ¤»¤ó\n" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "%d È֤Υá¥Ã¥»¡¼¥¸¤Ï¤¹¤Ç¤Ë¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "%d È֤Υá¥Ã¥»¡¼¥¸¤ò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò¼è¤ê¹þ¤á¤Þ¤»¤ó\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:264 src/mh.c:335 +#: src/mh.c:419 +msgid "the src folder is identical to the dest.\n" +msgstr "°ÜÆ°¸µ¥Õ¥©¥ë¥À¤¬°ÜÆ°Àè¤ÈƱ°ì¤Ç¤¹¡£\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:267 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %s%c%d ¤ò %s ¤Ë°ÜÆ°¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "deleted ¥Õ¥é¥°¤ò¥»¥Ã¥È¤Ç¤­¤Þ¤»¤ó: %d\n" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "expunge ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "deleted ¥Õ¥é¥°¤ò¥»¥Ã¥È¤Ç¤­¤Þ¤»¤ó: 1:%d\n" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "¥¨¥ó¥Ù¥í¡¼¥×¤ò²òÀϤǤ­¤Þ¤»¤ó: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "%d È֤Υá¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tÁ´¤Æ¤Î¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Æ¤¤¤Þ¤¹... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "IMAP4¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "IMAP4¤Î¥í¥°¥¤¥ó¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë¥³¥Ô¡¼¤Ç¤­¤Þ¤»¤ó\n" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "imap ¥³¥Þ¥ó¥ÉÃæ¤Î¥¨¥é¡¼: STORE %d:%d %s\n" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "imap ¥³¥Þ¥ó¥ÉÃæ¤Î¥¨¥é¡¼: EXPUNGE\n" + +#: src/import.c:116 +msgid "Import" +msgstr "¥¤¥ó¥Ý¡¼¥È" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "¥¤¥ó¥Ý¡¼¥È¥Õ¥¡¥¤¥ë:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "¥¤¥ó¥Ý¡¼¥ÈÀè:" + +#: src/import.c:158 src/import.c:164 src/prefs_filter.c:343 +msgid " Select... " +msgstr " ÁªÂò... " + +#: src/import.c:201 +msgid "Select importing file" +msgstr "¥¤¥ó¥Ý¡¼¥È¤¹¤ë¥Õ¥¡¥¤¥ë¤òÁªÂò" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®Ãæ" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "%s (%s) ¤Î¥Ñ¥¹¥ï¡¼¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:" + +#: src/inc.c:336 +msgid "Input password" +msgstr "¥Ñ¥¹¥ï¡¼¥É¤ÎÆþÎÏ" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "%s (%s) ¤Îǧ¾Ú¤Ë¼ºÇÔ¤·¤Þ¤·¤¿" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "¥¢¥«¥¦¥ó¥È %s ¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼è¤ê¹þ¤ó¤Ç¤¤¤Þ¤¹...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: ¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®Ãæ" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "POP3¥µ¡¼¥Ð: %s ¤ËÀܳÃæ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "POP3¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "POP3¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "ǧ¾ÚÃæ" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "¿·Ãå¥á¥Ã¥»¡¼¥¸¤Î¿ô¤ò¼èÆÀÃæ" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®Ãæ (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òºï½üÃæ" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "ÀÚÃÇÃæ" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "¥á¥Ã¥»¡¼¥¸¤Ï¼õ¿®¤µ¤ì¤Þ¤»¤ó\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "¥á¡¼¥ë¤Î½èÍýÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£" + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "¥Ç¥£¥¹¥¯¤Î¶õ¤­ÍÆÎ̤¬¤¢¤ê¤Þ¤»¤ó¡£" + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "¥í¡¼¥«¥ë¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Ë¤Ï¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "¿·¤·¤¤¥á¥Ã¥»¡¼¥¸¤ò %s ¤«¤é %s ¤Ë¼è¤ê¹þ¤ó¤Ç¤¤¤Þ¤¹...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "¥í¥°¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "¥×¥í¥È¥³¥ë¥í¥°" + +#. for gettext +#: src/main.c:101 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"¥Õ¥¡¥¤¥ë `%s' ¤¬¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£\n" +"¥Õ¥©¥ë¥À¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/main.c:140 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread ¤Ï glib ¤Ë¤è¤Ã¤Æ¥µ¥Ý¡¼¥È¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" + +#: src/main.c:271 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "»ÈÍÑË¡: %s [¥ª¥×¥·¥ç¥ó]...\n" + +#: src/main.c:273 +msgid " --compose [address] open composition window" +msgstr " --compose [address] ¥á¥Ã¥»¡¼¥¸ºîÀ®¥¦¥£¥ó¥É¥¦¤ò³«¤¯" + +#: src/main.c:274 +msgid " --receive receive new messages" +msgstr " --receive ¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë" + +#: src/main.c:275 +msgid " --receive-all receive new messages of all accounts" +msgstr " --receive-all Á´¥¢¥«¥¦¥ó¥È¤Î¿·Ãå¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë" + +#: src/main.c:276 +msgid " --debug debug mode" +msgstr " --debug ¥Ç¥Ð¥Ã¥°¥â¡¼¥É" + +#: src/main.c:277 +msgid " --help display this help and exit" +msgstr " --help ¤³¤Î¥Ø¥ë¥×¤òɽ¼¨¤·¤Æ½ªÎ»¤¹¤ë" + +#: src/main.c:278 +msgid " --version output version information and exit" +msgstr " --version ¥Ð¡¼¥¸¥ç¥ó¾ðÊó¤ò½ÐÎϤ·¤Æ½ªÎ»¤¹¤ë" + +#: src/main.c:292 +msgid "Composing message exists. Really quit?" +msgstr "ºîÀ®Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤¬Â¸ºß¤·¤Þ¤¹¡£ËÜÅö¤Ë½ªÎ»¤·¤Þ¤¹¤«?" + +#. remote command mode +#: src/main.c:362 +msgid "another Sylpheed is already running.\n" +msgstr "Ê̤ΠSylpheed ¤¬¤¹¤Ç¤Ëµ¯Æ°¤·¤Æ¤¤¤Þ¤¹¡£\n" + +#: src/mainwindow.c:330 +msgid "/_File/_Add mailbox..." +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÄɲÃ(_A)..." + +#: src/mainwindow.c:331 +msgid "/_File/_Update folder tree" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤ò¹¹¿·(_U)" + +#: src/mainwindow.c:332 +msgid "/_File/_Folder" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)" + +#: src/mainwindow.c:333 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)/¿·µ¬¥Õ¥©¥ë¥À¤òºîÀ®(_N)..." + +#: src/mainwindow.c:335 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)/¥Õ¥©¥ë¥À̾¤òÊѹ¹(_R)..." + +#: src/mainwindow.c:336 +msgid "/_File/_Folder/_Delete folder" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¥Õ¥©¥ë¥À(_F)/¥Õ¥©¥ë¥À¤òºï½ü(_D)" + +#: src/mainwindow.c:337 +msgid "/_File/_Import mbox file..." +msgstr "/¥Õ¥¡¥¤¥ë(_F)/mbox¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥Ý¡¼¥È(_I)..." + +#: src/mainwindow.c:338 +msgid "/_File/Empty _trash" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë(_T)" + +#: src/mainwindow.c:340 +msgid "/_File/_Save as..." +msgstr "/¥Õ¥¡¥¤¥ë(_F)/̾Á°¤òÉÕ¤±¤ÆÊݸ(_S)..." + +#: src/mainwindow.c:341 +msgid "/_File/_Print..." +msgstr "/¥Õ¥¡¥¤¥ë(_F)/°õºþ(_P)..." + +#: src/mainwindow.c:344 +msgid "/_File/E_xit" +msgstr "/¥Õ¥¡¥¤¥ë(_F)/½ªÎ»(_X)" + +#: src/mainwindow.c:350 +msgid "/_Edit/_Search" +msgstr "/ÊÔ½¸(_E)/¸¡º÷(_S)" + +#: src/mainwindow.c:352 +msgid "/_View" +msgstr "/ɽ¼¨(_V)" + +#: src/mainwindow.c:353 +msgid "/_View/_Folder tree" +msgstr "/ɽ¼¨(_V)/¥Õ¥©¥ë¥À¥Ä¥ê¡¼(_F)" + +#: src/mainwindow.c:354 +msgid "/_View/_Message view" +msgstr "/ɽ¼¨(_V)/¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼(_M)" + +#: src/mainwindow.c:355 +msgid "/_View/_Toolbar" +msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)" + +#: src/mainwindow.c:356 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/¥¢¥¤¥³¥ó¤Èʸ»ú(_A)" + +#: src/mainwindow.c:357 +msgid "/_View/_Toolbar/_Icon" +msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/¥¢¥¤¥³¥ó(_I)" + +#: src/mainwindow.c:358 +msgid "/_View/_Toolbar/_Text" +msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/ʸ»ú(_T)" + +#: src/mainwindow.c:359 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/ɽ¼¨(_V)/¥Ä¡¼¥ë¥Ð¡¼(_T)/Èóɽ¼¨(_N)" + +#: src/mainwindow.c:360 +msgid "/_View/_Status bar" +msgstr "/ɽ¼¨(_V)/¥¹¥Æ¡¼¥¿¥¹¥Ð¡¼(_S)" + +#: src/mainwindow.c:361 src/mainwindow.c:364 +msgid "/_View/---" +msgstr "/ɽ¼¨(_V)/---" + +#: src/mainwindow.c:362 +msgid "/_View/Separate f_older tree" +msgstr "/ɽ¼¨(_V)/¥Õ¥©¥ë¥À¥Ä¥ê¡¼¤òʬΥ(_O)" + +#: src/mainwindow.c:363 +msgid "/_View/Separate m_essage view" +msgstr "/ɽ¼¨(_V)/¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤òʬΥ(_E)" + +#: src/mainwindow.c:365 +msgid "/_View/_Code set" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)" + +#: src/mainwindow.c:366 +msgid "/_View/_Code set/_Auto detect" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¼«Æ°¸¡½Ð(_A)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/---" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/---" + +#: src/mainwindow.c:375 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/7bit ascii (US-ASC_II)" + +#: src/mainwindow.c:379 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/Unicode (_UTF-8)" + +#: src/mainwindow.c:383 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/²¤ÊÆ (ISO-8859-_1)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/Ã沤 (ISO-8859-_2)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥Ð¥ë¥È½ô¹ñ (ISO-8859-13)" + +#: src/mainwindow.c:392 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥Ð¥ë¥È½ô¹ñ (ISO-8859-_4)" + +#: src/mainwindow.c:395 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥®¥ê¥·¥ã¸ì (ISO-8859-_7)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥È¥ë¥³¸ì (ISO-8859-_9)" + +#: src/mainwindow.c:401 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥­¥ê¥ëʸ»ú (ISO-8859-_5)" + +#: src/mainwindow.c:403 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥­¥ê¥ëʸ»ú (KOI8-_R)" + +#: src/mainwindow.c:405 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/¥­¥ê¥ëʸ»ú (Windows-1251)" + +#: src/mainwindow.c:409 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (ISO-2022-_JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (ISO-2022-JP-2)" + +#: src/mainwindow.c:415 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (_EUC-JP)" + +#: src/mainwindow.c:417 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÆüËܸì (_Shift__JIS)" + +#: src/mainwindow.c:421 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/´ÊÂλúÃæ¹ñ¸ì (_GB2312)" + +#: src/mainwindow.c:423 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÈËÂλúÃæ¹ñ¸ì (_Big5)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/ÈËÂλúÃæ¹ñ¸ì (EUC-_TW)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/Ãæ¹ñ¸ì (ISO-2022-_CN)" + +#: src/mainwindow.c:430 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/´Ú¹ñ¸ì (EUC-_KR)" + +#: src/mainwindow.c:432 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/ɽ¼¨(_V)/ʸ»ú¥³¡¼¥É¥»¥Ã¥È(_C)/´Ú¹ñ¸ì (ISO-2022-KR)" + +#: src/mainwindow.c:440 +msgid "/_Message/Rece_ive new mail" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¿·Ãå¥á¡¼¥ë¤Î¼õ¿®(_I)" + +#: src/mainwindow.c:441 +msgid "/_Message/Receive from _all accounts" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®(_A)" + +#: src/mainwindow.c:444 +msgid "/_Message/Send queued messa_ges" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®(_G)" + +#: src/mainwindow.c:447 +msgid "/_Message/Compose _new message" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¿·µ¬¥á¥Ã¥»¡¼¥¸¤òºîÀ®(_N)" + +#: src/mainwindow.c:448 +msgid "/_Message/_Reply" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ÊÖ¿®(_R)" + +#: src/mainwindow.c:449 +msgid "/_Message/Reply to a_ll" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á´°÷¤ËÊÖ¿®(_L)" + +#: src/mainwindow.c:450 +msgid "/_Message/_Forward" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/žÁ÷(_F)" + +#: src/mainwindow.c:451 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/źÉդȤ·¤ÆžÁ÷(_T)" + +#: src/mainwindow.c:454 +msgid "/_Message/M_ove..." +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/°ÜÆ°(_O)..." + +#: src/mainwindow.c:455 +msgid "/_Message/_Copy..." +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥³¥Ô¡¼(_C)..." + +#: src/mainwindow.c:456 +msgid "/_Message/_Delete" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ºï½ü(_D)" + +#: src/mainwindow.c:457 +msgid "/_Message/_Mark" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)" + +#: src/mainwindow.c:458 +msgid "/_Message/_Mark/_Mark" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯(_M)" + +#: src/mainwindow.c:459 +msgid "/_Message/_Mark/_Unmark" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯²ò½ü(_U)" + +#: src/mainwindow.c:460 +msgid "/_Message/_Mark/---" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/---" + +#: src/mainwindow.c:461 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/̤ÆɤȤ·¤Æ¥Þ¡¼¥¯(_E)" + +#: src/mainwindow.c:462 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥Þ¡¼¥¯(_M)/Æɤó¤À¤³¤È¤Ë¤¹¤ë(_B)" + +#: src/mainwindow.c:465 +msgid "/_Message/Open in new _window" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç³«¤¯(_W)" + +#: src/mainwindow.c:466 +msgid "/_Message/View _source" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/¥½¡¼¥¹¤òɽ¼¨(_S)" + +#: src/mainwindow.c:467 +msgid "/_Message/Show all _header" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/Á´¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨(_H)" + +#: src/mainwindow.c:468 +msgid "/_Message/Re_edit" +msgstr "/¥á¥Ã¥»¡¼¥¸(_M)/ºÆÊÔ½¸(_E)" + +#: src/mainwindow.c:470 +msgid "/_Summary" +msgstr "/¥µ¥Þ¥ê(_S)" + +#: src/mainwindow.c:471 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/¥µ¥Þ¥ê(_S)/½ÅÊ£¥á¥Ã¥»¡¼¥¸¤òºï½ü(_D)" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Filter messages" +msgstr "/¥µ¥Þ¥ê(_S)/¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë(_F)" + +#: src/mainwindow.c:474 +msgid "/_Summary/E_xecute" +msgstr "/¥µ¥Þ¥ê(_S)/¼Â¹Ô(_X)" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Update" +msgstr "/¥µ¥Þ¥ê(_S)/ºÇ¿·¤Î¾õÂ֤˹¹¿·(_U)" + +#: src/mainwindow.c:476 src/mainwindow.c:480 src/mainwindow.c:482 +msgid "/_Summary/---" +msgstr "/¥µ¥Þ¥ê(_S)/---" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Prev message" +msgstr "/¥µ¥Þ¥ê(_S)/Á°¤Î¥á¥Ã¥»¡¼¥¸(_P)" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Next message" +msgstr "/¥µ¥Þ¥ê(_S)/¼¡¤Î¥á¥Ã¥»¡¼¥¸(_N)" + +#: src/mainwindow.c:479 +msgid "/_Summary/N_ext unread message" +msgstr "/¥µ¥Þ¥ê(_S)/¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸(_E)" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Go to other folder" +msgstr "/¥µ¥Þ¥ê(_S)/Ê̤Υե©¥ë¥À¤Ë°ÜÆ°(_G)" + +#: src/mainwindow.c:483 +msgid "/_Summary/_Sort" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/ÈÖ¹æ¤Ç¥½¡¼¥È(_N)" + +#: src/mainwindow.c:485 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/¥µ¥¤¥º¤Ç¥½¡¼¥È(_I)" + +#: src/mainwindow.c:486 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/ÆüÉդǥ½¡¼¥È(_D)" + +#: src/mainwindow.c:487 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/º¹½Ð¿Í¤Ç¥½¡¼¥È(_F)" + +#: src/mainwindow.c:488 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/·ï̾¤Ç¥½¡¼¥È(_S)" + +#: src/mainwindow.c:489 +msgid "/_Summary/_Sort/---" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/---" + +#: src/mainwindow.c:490 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/¥µ¥Þ¥ê(_S)/¥½¡¼¥È(_S)/·ï̾¤Ç´ó¤»¤ë(_A)" + +#: src/mainwindow.c:492 +msgid "/_Summary/_Thread view" +msgstr "/¥µ¥Þ¥ê(_S)/¥¹¥ì¥Ã¥Éɽ¼¨(_T)" + +#: src/mainwindow.c:493 +msgid "/_Summary/Unt_hread view" +msgstr "/¥µ¥Þ¥ê(_S)/¥¹¥ì¥Ã¥É²ò½ü(_H)" + +#: src/mainwindow.c:494 +msgid "/_Summary/Set display _item..." +msgstr "/¥µ¥Þ¥ê(_S)/ɽ¼¨¹àÌܤÎÀßÄê(_I)..." + +#: src/mainwindow.c:498 +msgid "/_Tool/_Log window" +msgstr "/¥Ä¡¼¥ë(_T)/¥í¥°¥¦¥£¥ó¥É¥¦(_L)" + +#: src/mainwindow.c:500 +msgid "/_Configuration" +msgstr "/ÀßÄê(_C)" + +#: src/mainwindow.c:501 +msgid "/_Configuration/_Common preferences..." +msgstr "/ÀßÄê(_C)/Á´È̤ÎÀßÄê(_C)..." + +#: src/mainwindow.c:503 +msgid "/_Configuration/_Filter setting..." +msgstr "/ÀßÄê(_C)/¿¶¤êʬ¤±¤ÎÀßÄê(_F)..." + +#: src/mainwindow.c:505 +msgid "/_Configuration/_Preferences per account..." +msgstr "/ÀßÄê(_C)/¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê(_P)..." + +#: src/mainwindow.c:507 +msgid "/_Configuration/---" +msgstr "/ÀßÄê(_C)/---" + +#: src/mainwindow.c:508 +msgid "/_Configuration/Create _new account..." +msgstr "/ÀßÄê(_C)/¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎºîÀ®(_N)..." + +#: src/mainwindow.c:510 +msgid "/_Configuration/_Edit accounts..." +msgstr "/ÀßÄê(_C)/¥¢¥«¥¦¥ó¥È¤ÎÊÔ½¸(_E)..." + +#: src/mainwindow.c:512 +msgid "/_Configuration/C_hange current account" +msgstr "/ÀßÄê(_C)/¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤òÊѹ¹(_H)" + +#: src/mainwindow.c:516 +msgid "/_Help/_Manual" +msgstr "/¥Ø¥ë¥×(_H)/¥Þ¥Ë¥å¥¢¥ë(_M)" + +#: src/mainwindow.c:517 +msgid "/_Help/_Manual/_English" +msgstr "/¥Ø¥ë¥×(_H)/¥Þ¥Ë¥å¥¢¥ë(_M)/±Ñ¸ì(_E)" + +#: src/mainwindow.c:518 +msgid "/_Help/_Manual/_Japanese" +msgstr "/¥Ø¥ë¥×(_H)/¥Þ¥Ë¥å¥¢¥ë(_M)/ÆüËܸì(_J)" + +#: src/mainwindow.c:519 +msgid "/_Help/---" +msgstr "/¥Ø¥ë¥×(_H)/---" + +#: src/mainwindow.c:548 +msgid "Creating main window...\n" +msgstr "¥á¥¤¥ó¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/mainwindow.c:667 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "MainWindow: ¿§¤Î³ä¤êÅö¤Æ %d ¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n" + +#: src/mainwindow.c:810 src/mainwindow.c:827 +msgid "Untitled" +msgstr "̾¾Î̤ÀßÄê" + +#: src/mainwindow.c:828 +msgid "none" +msgstr "¤Ê¤·" + +#: src/mainwindow.c:837 +#, c-format +msgid "Current account: %s" +msgstr "¸½ºß¤Î¥¢¥«¥¦¥ó¥È: %s" + +#: src/mainwindow.c:928 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "¥¦¥£¥ó¥É¥¦¤Î°ÌÃÖ: x = %d, y = %d\n" + +#: src/mainwindow.c:936 +msgid "Empty trash" +msgstr "¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë" + +#: src/mainwindow.c:937 +msgid "Empty all messages in trash?" +msgstr "¤´¤ßÈ¢¤ÎÃæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ´¤Æºï½ü¤·¤Þ¤¹¤«?" + +#: src/mainwindow.c:964 +msgid "Add mailbox" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤òÄɲÃ" + +#: src/mainwindow.c:965 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î°ÌÃÖ¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤¡£\n" +"¸ºß¤¹¤ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò»ØÄꤹ¤ë¤È¼«Æ°Åª¤Ë¥¹¥­¥ã¥ó¤·¤Þ¤¹¡£" + +#: src/mainwindow.c:971 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹ `%s' ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" + +#: src/mainwindow.c:976 src/setup.c:57 +msgid "Mailbox" +msgstr "¥á¡¼¥ëÈ¢" + +#: src/mainwindow.c:982 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" +"¤¤¤¯¤Ä¤«¤Î¥Õ¥¡¥¤¥ë¤¬¤¹¤Ç¤Ë¸ºß¤¹¤ë¤«¡¢¤¢¤ë¤¤¤Ï½ñ¤­¹þ¤à¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó¡£" + +#: src/mainwindow.c:1127 +msgid "Setting widgets..." +msgstr "¥¦¥£¥¸¥§¥Ã¥È¤ò¥»¥Ã¥È¤·¤Æ¤¤¤Þ¤¹..." + +#: src/mainwindow.c:1328 +msgid "Get" +msgstr "¼õ¿®" + +#: src/mainwindow.c:1329 +msgid "Incorporate new mail" +msgstr "¿·Ãå¥á¡¼¥ë¤Î¼è¹þ" + +#: src/mainwindow.c:1334 +msgid "Get all" +msgstr "Á´¼õ¿®" + +#: src/mainwindow.c:1335 +msgid "Incorporate new mail of all accounts" +msgstr "Á´¥¢¥«¥¦¥ó¥È¤Î¿·Ãå¥á¡¼¥ë¤Î¼è¹þ" + +#: src/mainwindow.c:1346 +msgid "Send queued message(s)" +msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¤¹¤ë" + +#: src/mainwindow.c:1356 src/prefs_account.c:461 src/prefs_common.c:597 +msgid "Compose" +msgstr "ºîÀ®" + +#: src/mainwindow.c:1357 +msgid "Compose new message" +msgstr "¿·µ¬¥á¥Ã¥»¡¼¥¸¤ÎºîÀ®" + +#: src/mainwindow.c:1364 +msgid "Reply" +msgstr "ÊÖ¿®" + +#: src/mainwindow.c:1365 +msgid "Reply to the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤ËÊÖ¿®¤¹¤ë" + +#: src/mainwindow.c:1372 +msgid "Reply all" +msgstr "Á´°÷¤ËÊÖ¿®" + +#: src/mainwindow.c:1373 +msgid "Reply to all" +msgstr "Á´°÷¤ËÊÖ¿®" + +#: src/mainwindow.c:1380 +msgid "Forward" +msgstr "žÁ÷" + +#: src/mainwindow.c:1381 +msgid "Forward the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òžÁ÷¤¹¤ë" + +#: src/mainwindow.c:1392 +msgid "Delete the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë" + +#: src/mainwindow.c:1400 +msgid "Execute" +msgstr "¼Â¹Ô" + +#: src/mainwindow.c:1401 +msgid "Execute marked process" +msgstr "¥Þ¡¼¥¯¤µ¤ì¤¿½èÍý¤ò¼Â¹Ô" + +#: src/mainwindow.c:1411 +msgid "Next" +msgstr "¼¡" + +#: src/mainwindow.c:1412 +msgid "Next unread message" +msgstr "¼¡¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸" + +#: src/mainwindow.c:1422 +msgid "Prefs" +msgstr "ÀßÄê" + +#: src/mainwindow.c:1423 +msgid "Common preference" +msgstr "Á´È̤ÎÀßÄê" + +#: src/mainwindow.c:1430 +msgid "Account" +msgstr "¥¢¥«¥¦¥ó¥È" + +#: src/mainwindow.c:1431 +msgid "Account setting" +msgstr "¥¢¥«¥¦¥ó¥È¤ÎÀßÄê" + +#: src/mainwindow.c:1641 src/summaryview.c:2517 +msgid "Exit" +msgstr "½ªÎ»" + +#: src/mainwindow.c:1641 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "¤³¤Î¥×¥í¥°¥é¥à¤ò½ªÎ»¤·¤Þ¤¹¤«?" + +#: src/mainwindow.c:1775 +msgid "Sending queued message failed." +msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£" + +#: src/mainwindow.c:1892 +#, c-format +msgid "forced charset: %s\n" +msgstr "¶¯À©»ØÄꥭ¥ã¥é¥¯¥¿¥»¥Ã¥È: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò %s ¤«¤é %s ¤Ë¼è¤ê¹þ¤ó¤Ç¤¤¤Þ¤¹...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¥Õ¥¡¥¤¥ë¤òÆɤ߹þ¤á¤Þ¤»¤ó¡£\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "̵¸ú¤Ê¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î·Á¼°: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬°Û¾ï¤Ç¤¹: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"¥¨¥¹¥±¡¼¥×¤µ¤ì¤Æ¤¤¤Ê¤¤ From ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "°ì»þ¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d Ä̤Υá¥Ã¥»¡¼¥¸¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "¥í¥Ã¥¯¥Õ¥¡¥¤¥ë %s ¤ò³«¤±¤Þ¤»¤ó\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "²Äǽ¤Ç¤¢¤ì¤Ð 'file' ¤ÎÂå¤ï¤ê¤Ë 'flock' ¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "%s ¤òºîÀ®¤Ç¤­¤Þ¤»¤ó¡£\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÏÊÌ¤Î¥×¥í¥»¥¹¤Ë¤è¤Ã¤Æ½êÍ­¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ÂÔµ¡Ãæ...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "%s ¤ò¥í¥Ã¥¯¤Ç¤­¤Þ¤»¤ó\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "̵¸ú¤Ê¥í¥Ã¥¯¥¿¥¤¥×¤Ç¤¹\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "%s ¤ò¥í¥Ã¥¯²ò½ü¤Ç¤­¤Þ¤»¤ó\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ò¥¼¥í¤ËÀÚ¤êµÍ¤á¤é¤ì¤Þ¤»¤ó¡£\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %s ¤ò %s ¤Ë¥³¥Ô¡¼¤Ç¤­¤Þ¤»¤ó\n" + +#: src/mh.c:181 src/mh.c:258 src/mh.c:346 src/mh.c:413 +msgid "Can't open mark file.\n" +msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò³«¤±¤Þ¤»¤ó¡£\n" + +#: src/mh.c:192 src/mh.c:276 src/mh.c:357 src/mh.c:431 +#, c-format +msgid "%s already exists." +msgstr "%s ¤Ï¤¹¤Ç¤Ë¸ºß¤·¤Þ¤¹¡£" + +#: src/mh.c:348 src/mh.c:422 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %s%c%d ¤ò %s ¤Ë¥³¥Ô¡¼¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/mh.c:586 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "¥Ç¥£¥ì¥¯¥È¥ê %s Æâ¤ÎºÇ¸å¤ÎÈÖ¹æ = %d\n" + +#: src/mh.c:785 +msgid "\tSearching uncached messages... " +msgstr "\t¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤ò¸¡º÷Ãæ... " + +#: src/mh.c:840 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d Ä̤Υ­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿¡£\n" + +#: src/mh.c:846 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\t¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Ê¤¤¥á¥Ã¥»¡¼¥¸¤òÈÖ¹æ½ç¤Ë¥½¡¼¥È¤·¤Æ¤¤¤Þ¤¹... " + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/³«¤¯(_O)" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨(_D)" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/̾Á°¤òÉÕ¤±¤ÆÊݸ(_S)..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "/½ð̾¤ò¸¡¾Ú(_C)" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME ¥¿¥¤¥×" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "MIME ¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "¸¡¾Ú¤¹¤ë¤Ë¤Ï¡¢ \"½ð̾¤ò¸¡¾Ú\" ¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥È¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "¥Þ¥ë¥Á¥Ñ¡¼¥È¥á¥Ã¥»¡¼¥¸¤Î¥Ñ¡¼¥È¤òÊݸ¤Ç¤­¤Þ¤»¤ó¡£" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "̾Á°¤òÉÕ¤±¤ÆÊݸ" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "¾å½ñ¤­" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "´û¸¤Î¥Õ¥¡¥¤¥ë¤ò¾å½ñ¤­¤·¤Þ¤¹¤«?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "MIME ¥Ó¥å¡¼¥¢¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "%s:%d ¤Ø¤Î NNTP ¤ÎÀܳ¤ò³ÎΩÃæ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "%s:%d ¤Ø¤Î NNTP ¤ÎÀܳ¤¬ÀÚ¤ì¤Æ¤¤¤Þ¤¹¡£ºÆÀܳ¤·¤Þ¤¹...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "%d È֤ε­»ö¤Ï¤¹¤Ç¤Ë¥­¥ã¥Ã¥·¥å¤µ¤ì¤Æ¤¤¤Þ¤¹¡£\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "%d È֤ε­»ö¤ò¼èÆÀ¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "%d È֤ε­»ö¤òÆɤá¤Þ¤»¤ó\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "µ­»ö¤ò¥Ý¥¹¥È¤Ç¤­¤Þ¤»¤ó¡£\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "%d È֤ε­»ö¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "¥°¥ë¡¼¥×¤ò %s ¤Ë¥»¥Ã¥È¤Ç¤­¤Þ¤»¤ó\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "̵¸ú¤Êµ­»ö¤ÎÈϰϤǤ¹: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "¿·Ãåµ­»ö¤Ï¤¢¤ê¤Þ¤»¤ó¡£\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "xover %d - %d ¤ò¼èÆÀÃæ (%s)...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "xover ¾ðÊó¤ò¼èÆÀ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "xover ¾ðÊó¤ò¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "̵¸ú¤Ê xover ¹Ô¤Ç¤¹: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "%d È֤ε­»ö¤òºï½ü¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tÁ´¤Æ¤Î¥­¥ã¥Ã¥·¥å¤µ¤ì¤¿µ­»ö¤òºï½ü¤·¤Æ¤¤¤Þ¤¹... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "NNTP¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "¥×¥í¥È¥³¥ë¥¨¥é¡¼: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "¥×¥í¥È¥³¥ë¥¨¥é¡¼\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "¥Ý¥¹¥ÈÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[¥æ¡¼¥¶ID¤Ê¤·]" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%s¥Ñ¥¹¥Õ¥ì¡¼¥º¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n" +"\n" +" %.*s \n" +"(%.*s)\n" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" +"ÉÔÀµ¤Ê¥Ñ¥¹¥Õ¥ì¡¼¥º¤Ç¤¹! ºÆÆþÎϤ·¤Æ²¼¤µ¤¤...\n" +"\n" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "ǧ¾ÚÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "ɬÍפÊAPOP¥¿¥¤¥à¥¹¥¿¥ó¥×¤¬±þÅú¥á¥Ã¥»¡¼¥¸¤Ë¤¢¤ê¤Þ¤»¤ó\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "±þÅú¥á¥Ã¥»¡¼¥¸¤Î¥¿¥¤¥à¥¹¥¿¥ó¥×¤Îʸˡ¥¨¥é¡¼\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "POP3 ¥×¥í¥È¥³¥ë¥¨¥é¡¼\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "ÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "%s ¤¬¸«¤Ä¤«¤ê¤Þ¤·¤¿\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "ÀßÄê¤ÎÆɤ߹þ¤ß¤ò´°Î»¤·¤Þ¤·¤¿¡£\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_filter.c:512 src/prefs_filter.c:536 +msgid "failed to write configuration to file\n" +msgstr "ÀßÄê¤Î¥Õ¥¡¥¤¥ë¤Ø¤Î½ñ¤­¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "ÀßÄê¤òÊݸ¤·¤Þ¤·¤¿¡£\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "ŬÍÑ" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "¥¢¥«¥¦¥ó¥È¥×¥ê¥Õ¥¡¥ì¥ó¥¹¥¦¥£¥ó¥É¥¦¤ò³«¤¤¤Æ¤¤¤Þ¤¹...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Account%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "¿·µ¬¥¢¥«¥¦¥ó¥È¤ÎÀßÄê" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "¥¢¥«¥¦¥ó¥ÈËè¤ÎÀßÄê" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "¥¢¥«¥¦¥ó¥È¥×¥ê¥Õ¥¡¥ì¥ó¥¹¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "´ðËÜ" + +#: src/prefs_account.c:457 src/prefs_common.c:593 +msgid "Receive" +msgstr "¼õ¿®" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "¹âÅÙ¤ÊÀßÄê" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "¤³¤Î¥¢¥«¥¦¥ó¥È¤Î̾¾Î" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Ä̾ï»ÈÍÑ" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "¸Ä¿Í¾ðÊó" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "̾Á°" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "¥á¡¼¥ë¥¢¥É¥ì¥¹" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "ÁÈ¿¥" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "¥µ¡¼¥Ð¾ðÊó" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (ɸ½à)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOPǧ¾Ú)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "¥Ë¥å¡¼¥¹ (NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "¤Ê¤· (¥í¡¼¥«¥ë)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "¥Ë¥å¡¼¥¹¥µ¡¼¥Ð" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "¼õ¿®ÍÑ¥µ¡¼¥Ð" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "SMTP¥µ¡¼¥Ð (Á÷¿®)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "¥æ¡¼¥¶ID" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "¥Ñ¥¹¥ï¡¼¥É" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "¼õ¿®»þ¤Ë¥µ¡¼¥Ð¾å¤Î¥á¥Ã¥»¡¼¥¸¤òºï½ü¤¹¤ë" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "¥µ¡¼¥Ð¾å¤ÎÁ´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤ò¼õ¿®¤¹¤ë" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "¡ÖÁ´¥¢¥«¥¦¥ó¥È¤«¤é¼õ¿®¡×¤Ç¼õ¿®¤¹¤ë" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "¼õ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò¿¶¤êʬ¤±¤ë" + +#: src/prefs_account.c:777 src/prefs_filter.c:238 +msgid "Header" +msgstr "¥Ø¥Ã¥À" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Date¥Ø¥Ã¥À¥Õ¥£¡¼¥ë¥É¤òÉÕ¤±¤ë" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "¥á¥Ã¥»¡¼¥¸ID¤òÀ¸À®¤¹¤ë" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "¥æ¡¼¥¶ÄêµÁ¤Î¥Ø¥Ã¥À¤òÄɲ乤ë" + +#: src/prefs_account.c:796 src/prefs_common.c:1200 +msgid " Edit... " +msgstr " ÊÔ½¸... " + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "°Ê²¼¤Î¥¢¥É¥ì¥¹¤ò¼«Æ°»ØÄê" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Reply-To" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "ǧ¾Ú" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "SMTPǧ¾Ú (SMTP AUTH)" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "Á÷¿®Á°¤ËPOP3ǧ¾Ú¤ò¹Ô¤¦" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "½ð̾¥Õ¥¡¥¤¥ë" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "SMTP¥Ý¡¼¥È¤ò»ØÄê" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "POP3¥Ý¡¼¥È¤ò»ØÄê" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "¥É¥á¥¤¥ó̾¤ò»ØÄê" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "¥á¡¼¥ë¥¢¥É¥ì¥¹¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "SMTP¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "¥æ¡¼¥¶ID¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "POP3¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "IMAP4¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "NNTP¥µ¡¼¥Ð¤¬ÆþÎϤµ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_common.c:570 +msgid "Creating common preferences window...\n" +msgstr "Á´ÈÌ¥×¥ê¥Õ¥¡¥ì¥ó¥¹¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/prefs_common.c:574 +msgid "Common Preferences" +msgstr "Á´È̤ÎÀßÄê" + +#: src/prefs_common.c:599 +msgid "Display" +msgstr "ɽ¼¨" + +#: src/prefs_common.c:601 +msgid "Message" +msgstr "¥á¥Ã¥»¡¼¥¸" + +#: src/prefs_common.c:604 +msgid "Privacy" +msgstr "µ¡Ì©" + +#: src/prefs_common.c:607 +msgid "Interface" +msgstr "¥¤¥ó¥¿¥Õ¥§¡¼¥¹" + +#: src/prefs_common.c:609 +msgid "Other" +msgstr "¤½¤Î¾" + +#: src/prefs_common.c:649 src/prefs_common.c:809 +msgid "External program" +msgstr "³°Éô¥×¥í¥°¥é¥à" + +#: src/prefs_common.c:658 +msgid "Use external program for incorporation" +msgstr "¥á¡¼¥ë¤Î¼õ¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë" + +#: src/prefs_common.c:665 src/prefs_common.c:826 +msgid "Program path" +msgstr "¥×¥í¥°¥é¥à¤Î¥Ñ¥¹" + +#: src/prefs_common.c:677 +msgid "Local spool" +msgstr "¥í¡¼¥«¥ë¥¹¥×¡¼¥ë" + +#: src/prefs_common.c:688 +msgid "Incorporate from spool" +msgstr "¥¹¥×¡¼¥ë¤«¤é¼è¤ê¹þ¤à" + +#: src/prefs_common.c:690 +msgid "Filter on incorporation" +msgstr "¼è¹þ»þ¤Ë¿¶¤êʬ¤±¤ë" + +#: src/prefs_common.c:698 +msgid "Spool directory" +msgstr "¥¹¥×¡¼¥ë¥Ç¥£¥ì¥¯¥È¥ê" + +#: src/prefs_common.c:718 +msgid "Auto-check new mail" +msgstr "¿·Ãå¥á¡¼¥ë¤ò¼«Æ°¥Á¥§¥Ã¥¯¤¹¤ë" + +#: src/prefs_common.c:720 +msgid "each" +msgstr " " + +#: src/prefs_common.c:732 +msgid "minute(s)" +msgstr "ʬ¤´¤È" + +#: src/prefs_common.c:741 +msgid "Check new mail on startup" +msgstr "µ¯Æ°»þ¤Ë¿·Ãå¥á¡¼¥ë¤ò¥Á¥§¥Ã¥¯¤¹¤ë" + +#: src/prefs_common.c:743 +msgid "News" +msgstr "¥Ë¥å¡¼¥¹" + +#: src/prefs_common.c:751 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"¥À¥¦¥ó¥í¡¼¥É¤¹¤ëµ­»ö¿ô¤Î¾å¸Â\n" +"(0¤Ç̵À©¸Â)" + +#: src/prefs_common.c:819 +msgid "Use external program for sending" +msgstr "¥á¡¼¥ë¤ÎÁ÷¿®¤Ë³°Éô¥×¥í¥°¥é¥à¤ò»ÈÍѤ¹¤ë" + +#: src/prefs_common.c:843 +msgid "Save sent message to outbox" +msgstr "Á÷¿®¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®¹µ¤ËÊݸ¤¹¤ë" + +#: src/prefs_common.c:845 +msgid "Queue message that failed to send" +msgstr "Á÷¿®¤Ë¼ºÇÔ¤·¤¿¥á¥Ã¥»¡¼¥¸¤òÁ÷¿®ÂÔ¤Á¤ËÆþ¤ì¤ë" + +#: src/prefs_common.c:851 +msgid "Outgoing codeset" +msgstr "Á÷¿®¥³¡¼¥É¥»¥Ã¥È" + +#: src/prefs_common.c:866 +msgid "Automatic" +msgstr "¼«Æ°ÀßÄê" + +#: src/prefs_common.c:867 +msgid "7bit ascii (US-ASCII)" +msgstr "7bit ascii (US-ASCII)" + +#: src/prefs_common.c:869 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:871 +msgid "Western European (ISO-8859-1)" +msgstr "²¤ÊÆ (ISO-8859-1)" + +#: src/prefs_common.c:873 +msgid "Central European (ISO-8859-2)" +msgstr "Ã沤 (ISO-8859-2)" + +#: src/prefs_common.c:874 +msgid "Baltic (ISO-8859-13)" +msgstr "¥Ð¥ë¥È½ô¹ñ (ISO-8859-13)" + +#: src/prefs_common.c:875 +msgid "Baltic (ISO-8859-4)" +msgstr "¥Ð¥ë¥È½ô¹ñ (ISO-8859-4)" + +#: src/prefs_common.c:876 +msgid "Greek (ISO-8859-7)" +msgstr "¥®¥ê¥·¥ã¸ì (ISO-8859-7)" + +#: src/prefs_common.c:877 +msgid "Turkish (ISO-8859-9)" +msgstr "¥È¥ë¥³¸ì (ISO-8859-9)" + +#: src/prefs_common.c:878 +msgid "Cyrillic (ISO-8859-5)" +msgstr "¥­¥ê¥ëʸ»ú (ISO-8859-5)" + +#: src/prefs_common.c:879 +msgid "Cyrillic (KOI8-R)" +msgstr "¥­¥ê¥ëʸ»ú (KOI8-R)" + +#: src/prefs_common.c:880 +msgid "Cyrillic (Windows-1251)" +msgstr "¥­¥ê¥ëʸ»ú (Windows-1251)" + +#: src/prefs_common.c:881 +msgid "Cyrillic (KOI8-U)" +msgstr "¥­¥ê¥ëʸ»ú (KOI8-U)" + +#: src/prefs_common.c:883 +msgid "Japanese (ISO-2022-JP)" +msgstr "ÆüËܸì (ISO-2022-JP)" + +#: src/prefs_common.c:885 +msgid "Japanese (EUC-JP)" +msgstr "ÆüËܸì (EUC-JP)" + +#: src/prefs_common.c:886 +msgid "Japanese (Shift_JIS)" +msgstr "ÆüËܸì (Shift_JIS)" + +#: src/prefs_common.c:889 +msgid "Simplified Chinese (GB2312)" +msgstr "´ÊÂλúÃæ¹ñ¸ì (GB2312)" + +#: src/prefs_common.c:890 +msgid "Traditional Chinese (Big5)" +msgstr "ÈËÂλúÃæ¹ñ¸ì (Big5)" + +#: src/prefs_common.c:892 +msgid "Traditional Chinese (EUC-TW)" +msgstr "ÈËÂλúÃæ¹ñ¸ì (EUC-TW)" + +#: src/prefs_common.c:893 +msgid "Chinese (ISO-2022-CN)" +msgstr "Ãæ¹ñ¸ì (ISO-2022-CN)" + +#: src/prefs_common.c:895 +msgid "Korean (EUC-KR)" +msgstr "´Ú¹ñ¸ì (EUC-KR)" + +#: src/prefs_common.c:945 +msgid "Quotation" +msgstr "°úÍÑ" + +#: src/prefs_common.c:953 +msgid "Quote message when replying" +msgstr "ÊÖ¿®»þ¤Ë¥á¥Ã¥»¡¼¥¸¤ò°úÍѤ¹¤ë" + +#: src/prefs_common.c:959 +msgid "Quotation mark" +msgstr "°úÍÑÉä" + +#: src/prefs_common.c:972 +msgid "Quotation format:" +msgstr "°úÍѤηÁ¼°:" + +#: src/prefs_common.c:977 +msgid " Description of symbols " +msgstr " µ­¹æ¤ÎÀâÌÀ " + +#: src/prefs_common.c:1004 +msgid "Insert signature automatically" +msgstr "¼«Æ°Åª¤Ë½ð̾¤òÁÞÆþ¤¹¤ë" + +#: src/prefs_common.c:1010 +msgid "Signature separator" +msgstr "½ð̾¤Î¶èÀÚ¤ê" + +#: src/prefs_common.c:1028 +msgid "Wrap messages at" +msgstr "¥á¥Ã¥»¡¼¥¸¤òȾ³Ñ" + +#: src/prefs_common.c:1040 +msgid "characters" +msgstr "ʸ»ú¤Ç²þ¹Ô" + +#: src/prefs_common.c:1048 +msgid "Wrap quotation" +msgstr "°úÍÑÉô¤ò¼«Æ°²þ¹Ô¤¹¤ë" + +#: src/prefs_common.c:1050 +msgid "Wrap before sending" +msgstr "Á÷¿®»þ¤Ë¼«Æ°²þ¹Ô¤¹¤ë" + +#: src/prefs_common.c:1086 +msgid "Font" +msgstr "¥Õ¥©¥ó¥È" + +#: src/prefs_common.c:1095 +msgid "Text" +msgstr "¥Æ¥­¥¹¥È" + +#: src/prefs_common.c:1118 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "¥Ø¥Ã¥À¤Î¹àÌܤòËÝÌõ¤¹¤ë (Î㤨¤Ð `From:', `Subject:' Åù)" + +#: src/prefs_common.c:1121 +msgid "Display unread number next to folder name" +msgstr "¥Õ¥©¥ë¥À̾¤Î²£¤Ë̤ÆÉ¿ô¤òɽ¼¨¤¹¤ë" + +#. ---- Summary ---- +#: src/prefs_common.c:1125 +msgid "Summary View" +msgstr "¥µ¥Þ¥ê¥Ó¥å¡¼" + +#: src/prefs_common.c:1134 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "º¹½Ð¿Í¤¬¼«Ê¬¤Î¾ì¹ç¤Ï `º¹½Ð¿Í' ¥«¥é¥à¤Ë°¸Àè¤òɽ¼¨¤¹¤ë" + +#: src/prefs_common.c:1136 +msgid "Enable horizontal scroll bar" +msgstr "¿åÊ¿¥¹¥¯¥í¡¼¥ë¥Ð¡¼¤òÍ­¸ú¤Ë¤¹¤ë" + +#: src/prefs_common.c:1143 +msgid " Set display item of summary... " +msgstr " ¥µ¥Þ¥ê¤Îɽ¼¨¹àÌܤòÀßÄê... " + +#: src/prefs_common.c:1195 +msgid "Enable coloration of message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¿§¤òÍ­¸ú¤Ë¤¹¤ë" + +#: src/prefs_common.c:1214 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "2¥Ð¥¤¥È±Ñ¿ô»ú¤ò1¥Ð¥¤¥Èʸ»ú¤Çɽ¼¨¤¹¤ë" + +#: src/prefs_common.c:1216 +msgid "Display header pane above message view" +msgstr "¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Î¾åÉô¤Ë¥Ø¥Ã¥À¥Ú¥¤¥ó¤òɽ¼¨¤¹¤ë" + +#: src/prefs_common.c:1218 +msgid "Display short headers on message view" +msgstr "¥á¥Ã¥»¡¼¥¸¥Ó¥å¡¼¤Ë´Êά¥Ø¥Ã¥À¤òɽ¼¨¤¹¤ë" + +#: src/prefs_common.c:1228 +msgid "Line space" +msgstr "¹Ô´Ö¤ò¶õ¤±¤ë" + +#: src/prefs_common.c:1242 src/prefs_common.c:1282 +msgid "pixel(s)" +msgstr "¥Ô¥¯¥»¥ë" + +#: src/prefs_common.c:1247 +msgid "Leave space on head" +msgstr "¹ÔƬ¤ò¶õ¤±¤ë" + +#: src/prefs_common.c:1249 +msgid "Scroll" +msgstr "¥¹¥¯¥í¡¼¥ë" + +#: src/prefs_common.c:1256 +msgid "Half page" +msgstr "Ⱦ²èÌÌñ°Ì" + +#: src/prefs_common.c:1262 +msgid "Smooth scroll" +msgstr "¥¹¥à¡¼¥º¥¹¥¯¥í¡¼¥ë" + +#: src/prefs_common.c:1268 +msgid "Step" +msgstr "´Ö³Ö" + +#: src/prefs_common.c:1327 +msgid "Encrypt message by default" +msgstr "ɸ½à¤Ç¥á¥Ã¥»¡¼¥¸¤ò°Å¹æ²½¤¹¤ë" + +#: src/prefs_common.c:1330 +msgid "Sign message by default" +msgstr "ɸ½à¤Ç¥á¥Ã¥»¡¼¥¸¤Ë½ð̾¤¹¤ë" + +#: src/prefs_common.c:1333 +msgid "Automatically check signatures" +msgstr "½ð̾¤ò¼«Æ°Åª¤Ë¸¡¾Ú" + +#: src/prefs_common.c:1336 +msgid "Grab input while entering a passphrase" +msgstr "¥Ñ¥¹¥Õ¥ì¡¼¥º¤ÎÆþÎÏ»þ¤ËÆþÎϤòÊ᪤¹¤ë" + +#. create default signkey box +#: src/prefs_common.c:1343 +msgid "Default Sign Key" +msgstr "ɸ½à¤Î½ð̾¸°" + +#: src/prefs_common.c:1440 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" +"Emacs¾å¤Î¥á¡¼¥é¤Î¥Þ¥¦¥¹Áàºî»þ¤ÎµóÆ°¤ò\n" +"¥¨¥ß¥å¥ì¡¼¥È¤¹¤ë" + +#: src/prefs_common.c:1447 +msgid "Open first unread message when entering a folder" +msgstr "¥Õ¥©¥ë¥À¤ËÆþ¤Ã¤¿¤È¤­¤ËºÇ½é¤Î̤ÆÉ¥á¥Ã¥»¡¼¥¸¤ò³«¤¯" + +#: src/prefs_common.c:1451 +msgid "Go to inbox after receiving new mail" +msgstr "¿·Ãå¥á¡¼¥ë¤ò¼õ¿®¤·¤¿¸å¼õ¿®È¢¤Ë°ÜÆ°¤¹¤ë" + +#: src/prefs_common.c:1459 +msgid "Execute immediately when moving or deleting messages" +msgstr "¥á¥Ã¥»¡¼¥¸¤ò°ÜÆ°¤Þ¤¿¤Ïºï½ü¤·¤¿¤é¨ºÂ¤Ë¼Â¹Ô¤¹¤ë" + +#: src/prefs_common.c:1466 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"(¤³¤ì¤ò̵¸ú¤Ë¤¹¤ë¤È¡¢¥á¥Ã¥»¡¼¥¸¤Ï¼Â¹Ô¤µ¤ì¤ë¤Þ¤Ç\n" +" ¥Þ¡¼¥¯¤µ¤ì¤¿¾õÂ֤ˤʤê¤Þ¤¹)" + +#: src/prefs_common.c:1471 +msgid "On exit" +msgstr "½ªÎ»»þ" + +#: src/prefs_common.c:1479 +msgid "Confirm on exit" +msgstr "½ªÎ»»þ¤Ë³Îǧ¤¹¤ë" + +#: src/prefs_common.c:1486 +msgid "Empty trash on exit" +msgstr "½ªÎ»»þ¤Ë¤´¤ßÈ¢¤ò¶õ¤Ë¤¹¤ë" + +#: src/prefs_common.c:1488 +msgid "Ask before emptying" +msgstr "¶õ¤Ë¤¹¤ëÁ°¤Ë¿Ò¤Í¤ë" + +#: src/prefs_common.c:1525 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "³°ÉôWeb¥Ö¥é¥¦¥¶ (%s ¤ÏURI¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" + +#: src/prefs_common.c:1532 src/prefs_common.c:1556 src/prefs_common.c:1572 +msgid "Command" +msgstr "¥³¥Þ¥ó¥É" + +#: src/prefs_common.c:1549 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "°õºþ (%s ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" + +#: src/prefs_common.c:1565 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "³°Éô¥¨¥Ç¥£¥¿ (%s ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" + +#: src/prefs_common.c:1626 +msgid "Set message colors" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¿§¤ò»ØÄê" + +#: src/prefs_common.c:1634 +msgid "Colors" +msgstr "¿§" + +#: src/prefs_common.c:1672 +msgid "Quoted Text - First Level" +msgstr "°úÍÑʸ - 1Ãʳ¬" + +#: src/prefs_common.c:1678 +msgid "Quoted Text - Second Level" +msgstr "°úÍÑʸ - 2Ãʳ¬" + +#: src/prefs_common.c:1684 +msgid "Quoted Text - Third Level" +msgstr "°úÍÑʸ - 3Ãʳ¬" + +#: src/prefs_common.c:1690 +msgid "URI link" +msgstr "URI ¥ê¥ó¥¯" + +#: src/prefs_common.c:1697 +msgid "Recycle quote colors" +msgstr "°úÍÑ¿§¤ò½Û´Ä" + +#: src/prefs_common.c:1745 +msgid "Pick color for quotation level 1" +msgstr "°úÍÑ¥ì¥Ù¥ë1¤Î¿§¤òÁªÂò" + +#: src/prefs_common.c:1748 +msgid "Pick color for quotation level 2" +msgstr "°úÍÑ¥ì¥Ù¥ë2¤Î¿§¤òÁªÂò" + +#: src/prefs_common.c:1751 +msgid "Pick color for quotation level 3" +msgstr "°úÍÑ¥ì¥Ù¥ë3¤Î¿§¤òÁªÂò" + +#: src/prefs_common.c:1754 +msgid "Pick color for URI" +msgstr "URI ¤Î¿§¤òÁªÂò" + +#: src/prefs_common.c:1878 +msgid "Description of symbols" +msgstr "µ­¹æ¤ÎÀâÌÀ" + +#: src/prefs_common.c:1905 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"ÆüÉÕ\n" +"º¹½Ð¿Í\n" +"º¹½Ð¿Í¤Î»á̾\n" +"º¹½Ð¿Í¤Î̾Á°\n" +"º¹½Ð¿Í¤Î¥¤¥Ë¥·¥ã¥ë\n" +"·ï̾\n" +"°¸Àè\n" +"¥á¥Ã¥»¡¼¥¸ID\n" +"%" + +#: src/prefs_common.c:2008 +msgid "Set display item" +msgstr "ɽ¼¨¹àÌܤÎÀßÄê" + +#: src/prefs_common.c:2025 +msgid "Mark" +msgstr "¥Þ¡¼¥¯" + +#: src/prefs_common.c:2027 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2028 +msgid "Number" +msgstr "ÈÖ¹æ" + +#: src/prefs_common.c:2030 src/summaryview.c:351 +msgid "Date" +msgstr "ÆüÉÕ" + +#: src/prefs_common.c:2031 src/summaryview.c:352 +msgid "From" +msgstr "º¹½Ð¿Í" + +#: src/prefs_common.c:2032 src/summaryview.c:353 +msgid "Subject" +msgstr "·ï̾" + +#: src/prefs_common.c:2085 +msgid "Font selection" +msgstr "¥Õ¥©¥ó¥È¤ÎÁªÂò" + +#: src/prefs_filter.c:178 +msgid "Registered rules" +msgstr "ÅÐÏ¿ºÑ¤ß¥ë¡¼¥ë" + +#: src/prefs_filter.c:180 +msgid "Creating filter setting window...\n" +msgstr "¿¶¤êʬ¤±ÀßÄꥦ¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/prefs_filter.c:199 +msgid "Filter setting" +msgstr "¿¶¤êʬ¤±¤ÎÀßÄê" + +#: src/prefs_filter.c:222 +msgid "Operator" +msgstr "±é»»»Ò" + +#: src/prefs_filter.c:260 src/prefs_filter.c:620 src/prefs_filter.c:759 +#: src/prefs_filter.c:771 +msgid "(none)" +msgstr "(¤Ê¤·)" + +#: src/prefs_filter.c:266 +msgid "Keyword" +msgstr "¥­¡¼¥ï¡¼¥É" + +#: src/prefs_filter.c:287 +msgid "Predicate" +msgstr "½Ò¸ì" + +#: src/prefs_filter.c:299 src/prefs_filter.c:310 src/prefs_filter.c:629 +#: src/prefs_filter.c:632 src/prefs_filter.c:776 src/prefs_filter.c:779 +msgid "contains" +msgstr "´Þ¤à" + +#: src/prefs_filter.c:299 src/prefs_filter.c:310 src/prefs_filter.c:776 +#: src/prefs_filter.c:779 +msgid "not contain" +msgstr "´Þ¤Þ¤Ê¤¤" + +#: src/prefs_filter.c:326 +msgid "Destination" +msgstr "¿¶¤êʬ¤±Àè" + +#: src/prefs_filter.c:350 +msgid "Use regex" +msgstr "Àµµ¬É½¸½¤ò»ÈÍÑ" + +#: src/prefs_filter.c:354 +msgid "Don't receive" +msgstr "¼õ¿®¤·¤Ê¤¤" + +#: src/prefs_filter.c:379 +msgid "Register" +msgstr "ÅÐÏ¿" + +#: src/prefs_filter.c:385 +msgid " Substitute " +msgstr " ÃÖ´¹ " + +#: src/prefs_filter.c:472 +msgid "Reading filter configuration...\n" +msgstr "¿¶¤êʬ¤±¤ÎÀßÄê¤òÆɤ߹þ¤ßÃæ...\n" + +#: src/prefs_filter.c:508 +msgid "Writing filter configuration...\n" +msgstr "¿¶¤êʬ¤±¤ÎÀßÄê¤ò½ñ¤­½Ð¤·Ãæ...\n" + +#: src/prefs_filter.c:551 +msgid "(New)" +msgstr "(¿·µ¬)" + +#: src/prefs_filter.c:602 +msgid "Destination is not set." +msgstr "¿¶¤êʬ¤±À褬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_filter.c:607 +msgid "Header name is not set." +msgstr "¥Ø¥Ã¥À̾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£" + +#: src/prefs_filter.c:713 +msgid "Delete rule" +msgstr "¥ë¡¼¥ë¤Îºï½ü" + +#: src/prefs_filter.c:714 +msgid "Do you really want to delete this rule?" +msgstr "ËÜÅö¤Ë¤³¤Î¥ë¡¼¥ë¤òºï½ü¤·¤Æ¤â¤¤¤¤¤Ç¤¹¤«?" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "Æü·î²Ð¿åÌÚ¶âÅÚ" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "¥³¡¼¥ÉÊÑ´¹¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "¥­¥ã¥Ã¥·¥å¥Ç¡¼¥¿¤¬²õ¤ì¤Æ¤¤¤Þ¤¹\n" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\t¥­¥ã¥Ã¥·¥å¥Õ¥¡¥¤¥ë¤¬Â¸ºß¤·¤Þ¤»¤ó\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\t¥µ¥Þ¥ê¥­¥ã¥Ã¥·¥å¤òÆɤ߹þ¤ßÃæ..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "¥­¥ã¥Ã¥·¥å¤Î¥Ð¡¼¥¸¥ç¥ó¤¬°Û¤Ê¤ê¤Þ¤¹¡£ÇË´þ¤·¤Þ¤¹¡£\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\t¥á¥Ã¥»¡¼¥¸¤ò¥Þ¡¼¥¯¤·¤Æ¤¤¤Þ¤¹..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d Ä̤ο·Ãå¥á¥Ã¥»¡¼¥¸\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤Î¥Ð¡¼¥¸¥ç¥ó¤¬°Û¤Ê¤ê¤Þ¤¹ (%d != %d)¡£ÇË´þ¤·¤Þ¤¹¡£\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤òÄɲå⡼¥É¤Ç³«¤±¤Þ¤»¤ó¡£\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "¥Þ¡¼¥¯¥Õ¥¡¥¤¥ë¤ò½ñ¤­¹þ¤ß¥â¡¼¥É¤Ç³«¤±¤Þ¤»¤ó¡£\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤ÎÁ÷¿®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "°õºþ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "¿Ê¹Ô¾õ¶·¥À¥¤¥¢¥í¥°¤òºîÀ®Ãæ...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "¥Ç¡¼¥¿¤Î¼èÆÀÃæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿¡£\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "¥Õ¥¡¥¤¥ë¤Ë½ñ¤­¹þ¤á¤Þ¤»¤ó¡£\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "Oops: ½ð̾¤Ï¸¡¾Ú¤µ¤ì¤Æ¤¤¤Þ¤»¤ó" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "½ð̾¤¬¤¢¤ê¤Þ¤»¤ó" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "ÀµÅö¤Ê½ð̾" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "ÉÔÀµ¤Ê½ð̾" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "½ð̾¤ò¸¡¾Ú¤¹¤ë¤¿¤á¤Î¸ø³«¸°¤¬¤¢¤ê¤Þ¤»¤ó" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "½ð̾¸¡¾Ú¥¨¥é¡¼" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "½ð̾¤ËÂФ·¤ÆÊ£¿ô¤Î°Û¤Ê¤Ã¤¿·ë²Ì" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "¥¨¥é¡¼: ÉÔÌÀ¤Ê¾õÂÖ" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "\"%s\" ¤«¤é¤ÎÀµÅö¤Ê½ð̾" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "\"%s\" ¤«¤é¤ÎÉÔÀµ¤Ê½ð̾" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "¤³¤Î¸°¤Î¤¿¤á¤Î¥æ¡¼¥¶ID¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr " ¤Þ¤¿¤Ï \"%s\"\n" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "Signature made %s\n" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "Key fingerprint: %s\n" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "¸°¤ÎÁªÂò" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "¸°¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤: " + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "¸°ID" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "ÀµÅöÀ­" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "ÁªÂò" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "Á÷¿®ÂÔµ¡Ãæ¤Î¥á¥Ã¥»¡¼¥¸¤Î¥Ø¥Ã¥À¤¬²õ¤ì¤Æ¤¤¤Þ¤¹¡£\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "¥¢¥«¥¦¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£¸½ºß¤Î¥¢¥«¥¦¥ó¥È¤ò»ÈÍѤ·¤Þ¤¹...\n" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "¥¢¥«¥¦¥ó¥È¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¡£\n" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "SMTP¥µ¡¼¥Ð: %s ¤ËÀܳÃæ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "SMTP¥µ¡¼¥Ð: %s:%d ¤ËÀܳ¤Ç¤­¤Þ¤»¤ó\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "HELO ¤òÁ÷¿®Ãæ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤Þ¤·¤¿\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤ÎÀßÄê" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"ºÇ½é¤Ë¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤Î°ÌÃÖ¤ò»ØÄꤹ¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£\n" +"MH¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥á¡¼¥ë¥Ü¥Ã¥¯¥¹¤¬´û¤Ë¤¢¤ë¾ì¹ç¤Ï¡¢\n" +"¤½¤ì¤ò»ÈÍѤ¹¤ë¤³¤È¤¬½ÐÍè¤Þ¤¹¡£\n" +"¤è¤¯Ê¬¤«¤é¤Ê¤¤¾ì¹ç¤Ï¡¢¤½¤Î¤Þ¤ÞOK¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "¥½¡¼¥¹¥¦¥£¥ó¥É¥¦¤òºîÀ®Ãæ...\n" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "¥á¥Ã¥»¡¼¥¸¤Î¥½¡¼¥¹" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "%s ¤Î¥½¡¼¥¹¤òɽ¼¨¤·¤Æ¤¤¤Þ¤¹...\n" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - ¥½¡¼¥¹" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "¸¡º÷" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Âçʸ»ú/¾®Ê¸»ú¤ò¶èÊÌ" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "¸åÊý¸¡º÷" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "°ì³ç¸¡º÷" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "¥¯¥ê¥¢" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "¸¡º÷¼ºÇÔ" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "¸¡º÷ʸ»úÎ󤬸«¤Ä¤«¤ê¤Þ¤»¤ó¡£" + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "¥ê¥¹¥È¤ÎÀèƬ¤Þ¤Ç¸¡º÷¤·¤Þ¤·¤¿¡£ºÇ¸å¤«¤é¸¡º÷¤·¤Þ¤¹¤«?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "¥ê¥¹¥È¤Î½ª¤ï¤ê¤Þ¤Ç¸¡º÷¤·¤Þ¤·¤¿¡£»Ï¤á¤«¤é¸¡º÷¤·¤Þ¤¹¤«?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "¸¡º÷´°Î»" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/°ÜÆ°(_O)..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/¥³¥Ô¡¼(_C)..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/¼Â¹Ô(_X)" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/¥Þ¡¼¥¯(_M)" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯(_M)" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/¥Þ¡¼¥¯(_M)/¥Þ¡¼¥¯²ò½ü(_U)" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/¥Þ¡¼¥¯(_M)/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/¥Þ¡¼¥¯(_M)/̤ÆɤȤ·¤Æ¥Þ¡¼¥¯(_E)" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/¥Þ¡¼¥¯(_M)/Æɤó¤À¤³¤È¤Ë¤¹¤ë(_B)" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/ÊÖ¿®(_R)" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/Á´°÷¤ËÊÖ¿®(_L)" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/žÁ÷(_F)" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/źÉդȤ·¤ÆžÁ÷(_T)" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/¿·¤·¤¤¥¦¥£¥ó¥É¥¦¤Ç³«¤¯(_W)" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/¥½¡¼¥¹¤òɽ¼¨(_U)" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Á´¤Æ¤Î¥Ø¥Ã¥À¤òɽ¼¨(_H)" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/ºÆÊÔ½¸(_E)" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/°õºþ(_P)..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/Á´¤ÆÁªÂò(_A)" + +#: src/summaryview.c:320 +msgid "M" +msgstr "M" + +#: src/summaryview.c:320 +msgid "U" +msgstr "U" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "¥µ¥Þ¥ê¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "ÈÖ¹æ" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "¥Þ¡¼¥¯¤Î½èÍý" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "¥Þ¡¼¥¯¤¬»Ä¤Ã¤Æ¤¤¤Þ¤¹¡£½èÍý¤·¤Þ¤¹¤«?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"¶õ¥Õ¥©¥ë¥À\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "¥Õ¥©¥ë¥À¤ò¥¹¥­¥ã¥óÃæ (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "´°Î»." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "̤ÆÉ¥á¥Ã¥»¡¼¥¸¤Ê¤·" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "̤ÆÉ¥á¥Ã¥»¡¼¥¸¤¬¤¢¤ê¤Þ¤»¤ó¡£¼¡¤Î¥Õ¥©¥ë¥À¤Ë°ÜÆ°¤·¤Þ¤¹¤«?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "¥á¥Ã¥»¡¼¥¸¤ò·ï̾¤Ç´ó¤»¤Æ¤¤¤Þ¤¹..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d Ä̺ï½ü" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d ÄÌ°ÜÆ°" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "%s%d ÄÌ¥³¥Ô¡¼" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " Ä̤Υá¥Ã¥»¡¼¥¸¤òÁªÂò" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "¿·Ãå %d ÄÌ, ̤ÆÉ %d ÄÌ, Áí¿ô %d ÄÌ (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "¿·Ãå %d ÄÌ, ̤ÆÉ %d ÄÌ, Áí¿ô %d ÄÌ" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "¥µ¥Þ¥ê¤ò¥½¡¼¥ÈÃæ..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\t¥á¥Ã¥»¡¼¥¸¥Ç¡¼¥¿¤«¤é¥µ¥Þ¥ê¤òÀßÄêÃæ..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "¥á¥Ã¥»¡¼¥¸¥Ç¡¼¥¿¤«¤é¥µ¥Þ¥ê¤òÀßÄêÃæ..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "¥µ¥Þ¥ê¥­¥ã¥Ã¥·¥å¤ò½ñ¤­¹þ¤ßÃæ (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(ÆüÉդʤ·)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò¥Þ¡¼¥¯¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò´ûÆɤȤ·¤Æ¥Þ¡¼¥¯¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò̤ÆɤȤ·¤Æ¥Þ¡¼¥¯¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %s/%d ¤òºï½ü¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "¸½ºß¤Î¥Õ¥©¥ë¥À¤Ï¤´¤ßÈ¢¤Ç¤¹¡£" + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "½ÅÊ£¥á¥Ã¥»¡¼¥¸¤òºï½ü¤·¤Æ¤¤¤Þ¤¹..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %s/%d ¤ò¥Þ¡¼¥¯²ò½ü¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë°ÜÆ°¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "°ÜÆ°À褬¸½ºß¤Î¥Õ¥©¥ë¥À¤ÈƱ¤¸¤Ç¤¹¡£" + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "¥á¥Ã¥»¡¼¥¸ %d ¤ò %s ¤Ë¥³¥Ô¡¼¤¹¤ë¤è¤¦¤Ë¥»¥Ã¥È¤·¤Þ¤·¤¿\n" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "¥³¥Ô¡¼À褬¸½ºß¤Î¥Õ¥©¥ë¥À¤ÈƱ¤¸¤Ç¤¹¡£" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "Á´¤Æ¤Î¥á¥Ã¥»¡¼¥¸¤òÁªÂòÃæ..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "°õºþ" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"°õºþ¥³¥Þ¥ó¥É¤òÆþÎϤ·¤Æ¤¯¤À¤µ¤¤:\n" +"(`%s' ¤Ï¥Õ¥¡¥¤¥ë̾¤ÇÃÖ¤­´¹¤¨¤é¤ì¤Þ¤¹)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"°õºþ¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "¥¹¥ì¥Ã¥É¤ò¹½ÃÛÃæ..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "¥¹¥ì¥Ã¥É¤ò²ò½üÃæ..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "¼Â¹Ô¤Î¤¿¤á¤Ë¥¹¥ì¥Ã¥É¤ò²ò½üÃæ..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "¿¶¤êʬ¤±Ãæ..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "¿¶¤êʬ¤±Ãæ..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "%s ¤Ë°ÜÆ°\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "¥Æ¥­¥¹¥È¥Ó¥å¡¼¤òºîÀ®Ãæ...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "¤³¤Î¥Ñ¡¼¥È¤òÊݸ¤¹¤ë¤Ë¤Ï¡¢±¦¥¯¥ê¥Ã¥¯¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤ò\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"ɽ¼¨¤·¡¢¡Ö̾Á°¤òÉÕ¤±¤ÆÊݸ...¡×¤òÁªÂò¤¹¤ë¤«¡¢`y' ¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "¤³¤Î¥Ñ¡¼¥È¤ò¥Æ¥­¥¹¥È¥á¥Ã¥»¡¼¥¸¤È¤·¤Æɽ¼¨¤¹¤ë¤Ë¤Ï¡¢\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"¡Ö¥Æ¥­¥¹¥È¤È¤·¤Æɽ¼¨¡×¤òÁªÂò¤¹¤ë¤«¡¢`t' ¥­¡¼¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "¤³¤Î¥Ñ¡¼¥È¤ò³°Éô¥×¥í¥°¥é¥à¤Ç³«¤¯¤Ë¤Ï¡¢¡Ö³«¤¯¡×¤òÁªÂò¤¹¤ë¤«¡¢\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" +"¥À¥Ö¥ë¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢Ãæ±û¥Ü¥¿¥ó¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤«¡¢\n" +"`l' ¥­¡¼¤ò²¡¤·¤Æ²¼¤µ¤¤¡£" + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "¤³¤Î½ð̾¤Ï¤Þ¤À¸¡¾Ú¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£\n" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "¸¡¾Ú¤¹¤ë¤Ë¤Ï¡¢±¦¥¯¥ê¥Ã¥¯¤Ç¥³¥ó¥Æ¥­¥¹¥È¥á¥Ë¥å¡¼¤òɽ¼¨¤·¡¢\n" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" +"¡Ö½ð̾¤ò¸¡¾Ú¡×¤òÁªÂò¤·¤Æ¤¯¤À¤µ¤¤¡£\n" +"\n" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "%s ¤Ø¤Î½ñ¤­¹þ¤ß¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "%s ¤«¤é %s ¤Ø¤Î¥Õ¥¡¥¤¥ë¤Î¥³¥Ô¡¼¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£\n" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "URI ¤ò³«¤¯¤¿¤á¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó¤¬Ìµ¸ú¤Ç¤¹: `%s'" diff --git a/po/ko.gmo b/po/ko.gmo new file mode 100644 index 0000000000000000000000000000000000000000..c9b40ca0927bf8163f4262be7ecee504f918cf5d GIT binary patch literal 54314 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 literal 0 HcmV?d00001 diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 000000000..c65522d55 --- /dev/null +++ b/po/ko.po @@ -0,0 +1,3643 @@ +# korean po file for sylpheed mailer +# Copyright (C) 2001 Free Software Foundation, Inc. +# ChiDeok, Hwang <hwang@mizi.co.kr>, 2001 +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed 0.4.63\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-03-24 13:28+0900\n" +"Last-Translator: ChiDeok, Hwang <hwang@mizi.co.kr>\n" +"Language-Team: Korean <ko@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=euc-kr\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "sylpheed¶õ" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "È®ÀÎ" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "°¢ °èÁ¤¿¡´ëÇÑ ¸ðµç ¼³Á¤À» ÀнÀ´Ï´Ù...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "¶óº§ %s¸¦ ¹ß°ßÇß½À´Ï´Ù\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"´Ù¸¥ ÆíÁý âÀÌ ¿­·ÁÀÖ½À´Ï´Ù.\n" +"°èÁ¤À» ÆíÁýÇϱâÀü¿¡ ¸ðµç ÆíÁýâµéÀ» ´Ý¾ÆÁÖ¼¼¿ä." + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "°èÁ¤ ÆíÁýâÀ» ¿±´Ï´Ù...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "°èÁ¤ ÆíÁýâÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "°èÁ¤ ÆíÁý" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "À̸§" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "ÇÁ·ÎÅäÄÝ" + +#: src/account.c:382 +msgid "Server" +msgstr "¼­¹ö" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Ãß°¡" + +#: src/account.c:407 +msgid "Edit" +msgstr "ÆíÁý" + +#: src/account.c:413 +msgid " Delete " +msgstr "»èÁ¦" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "¾Æ·¡·Î" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "À§·Î" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr "±âº» °èÁ¤À¸·Î ¼³Á¤" + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "´Ý±â" + +#: src/account.c:498 +msgid "Delete account" +msgstr "°èÁ¤ »èÁ¦" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Á¤¸»·Î ÀÌ °èÁ¤À» »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "È®ÀÎ" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "¾Æ´Ï¿ä" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/ÆÄÀÏ(_F)" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/ÆÄÀÏ(_F)/»õ ÁÖ¼Ò(_a)" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/ÆÄÀÏ(_F)/»õ ±×·ì(_g)" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/ÆÄÀÏ(_F)/»õ Æú´õ(_f)" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/ÆÄÀÏ(_F)/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/ÆÄÀÏ(_F)/ÆíÁý(_E)" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/ÆÄÀÏ(_F)/»èÁ¦(_D)" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/ÆÄÀÏ(_F)/´Ý±â(_C)" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/µµ¿ò¸»(_H)" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/µµ¿ò¸»(_H)/sylpheed Á¤º¸(_A)" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/»õ ÁÖ¼Ò(_a)" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/»õ ±×·ì(_g)" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/»õ Æú´õ(_f)" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/ÆíÁý(_E)" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/»èÁ¦(_D)" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "À̸ÞÀÏ ÁÖ¼Ò" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "¸Þ¸ð" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "ÁÖ¼Ò·Ï" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "À̸§:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "»èÁ¦" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "ã±â" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "¹Þ´Â »ç¶÷:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "ÂüÁ¶:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "¼ûÀº ÂüÁ¶:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "°ø¿ë ÁÖ¼Ò·Ï" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "°³ÀÎ ÁÖ¼Ò·Ï" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "ÁÖ¼Ò¸¦ »èÁ¦" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Á¤¸»·Î ÁÖ¼Ò¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "¾Æ´Ï¿À" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "»õ Æú´õ" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "»õ Æú´õÀÇ À̸§À» ³ÖÀ¸¼¼¿ä:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "»õ Æú´õ" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "ÀÌ¹Ì ±× À̸§ÀÌ ÀÖ½À´Ï´Ù." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "»õ ±×·ì" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "»õ ±×·ìÀÇ À̸§À» ³ÖÀ¸¼¼¿ä:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "»õ ±×·ì" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "±×·ì ÆíÁý" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "±×·ìÀÇ »õ À̸§À» ³ÖÀ¸¼¼¿ä:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Æú´õ ÆíÁý" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "»õ Æú´õÀÇ À̸§À» ³ÖÀ¸¼¼¿ä:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Á¤¸»·Î `%s'¸¦ Áö¿ì½Ã°Ú½À´Ï±î?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "ÁÖ¼Ò ÆíÁý" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "ÁÖ¼Ò" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Ãë¼Ò" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "ÁÖ¼Ò·Ï ÆÄÀÏÀ» ÀнÀ´Ï´Ù..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s°¡ ¾ø½À´Ï´Ù.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "¸¶Ä§.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "ÁÖ¼Ò·ÏÀ» ÆÄÀÏ·Î ¾¹´Ï´Ù..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "ÁÖ¼Ò·Ï µ¥ÀÌŸ ¾²±â¸¦ ½ÇÆÐÇß½À´Ï´Ù.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "¾Ë¸²" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "°æ°í" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "¿¡·¯" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "°æ°í ÆгΠ´ÙÀ̾ó·Î±×¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "¸Þ¸ð¸®¸¦ ÇÒ´çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/Ãß°¡(_A)..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/»èÁ¦(_R)" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/Ư¼º(_P)..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/ÆÄÀÏ(_F)/÷ºÎ ÆÄÀÏ(_A)" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/ÆÄÀÏ(_F)/ÆÄÀÏ »ðÀÔ(_I)" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/ÆÄÀÏ(_F)/¼­¸í »ðÀÔ(_g)" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/ÆíÁý(_E)/½ÇÇàÃë¼Ò(_U)" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/ÆíÁý(_E)/´Ù½Ã ½ÇÇà(_R)" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/ÆíÁý(_E)/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/ÆíÁý(_E)/À߶󳻱â(_t)" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/ÆíÁý(_E)/º¹»ç(_C)" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/ÆíÁý(_E)/ºÙ¿©³Ö±â(_P)" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/ÆíÁý(_E)/¸ðµÎ ¼±ÅÃ(_a)" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/ÆíÁý(_E)/ÀÚµ¿ ÁٹٲÞ(_l)" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/ÆíÁý(_E)/¿ÜºÎ ÆíÁý±â·Î ÆíÁý(_x)" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/¸Þ½ÃÁö(_M)" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/¸Þ½ÃÁö(_M)/º¸³»±â(_S)" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/¸Þ½ÃÁö(_M)/³ªÁß¿¡ º¸³»±â(_l)" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/¸Þ½ÃÁö(_M)/Àӽà º¸°üÇÔÀ¸·Î º¸³»±â(_d)" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/¸Þ½ÃÁö(_M)/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/¸Þ½ÃÁö(_M)/¹Þ´Â »ç¶÷(_T)" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/¸Þ½ÃÁö(_M)/ÂüÁ¶(_C)" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/¸Þ½ÃÁö(_M)/¼ûÀº ÂüÁ¶(_B)" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/¸Þ½ÃÁö(_M)/ȸ½Å(_R)" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/¸Þ½ÃÁö(_M)/_Followup to" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/¸Þ½ÃÁö(_M)/÷ºÎ(_A)" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/¸Þ½ÃÁö(_M)/¾Ïȣȭ(_E)" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/µµ±¸(_T)" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/µµ±¸(_T)/´«±ÝÀÚ º¸À̱â(_r)" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/µµ±¸(_T)/ÁÖ¼Ò·Ï(_A)" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "ÅؽºÆ® ºÎºÐÀ» ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: ÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Àü´Þ ¸Þ½ÃÁöÀÇ ½ÃÀÛ:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "%sÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "%sÀÇ ÆÄÀÏ Å©±â¸¦ ¾Ë¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "%s ÆÄÀÏÀÌ ºó ÆÄÀÏÀÔ´Ï´Ù\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "¸Þ½ÃÁö: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [¼öÁ¤µÊ]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - ¸Þ½ÃÁö ÆíÁý%s " + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "¸Þ½ÃÁö%s ÆíÁý" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "¹Þ´Â »ç¶÷ÀÌ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù" + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "¹Þ´Â »ç¶÷ ¸ñ·ÏÀ» ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"¸ÞÀÏÀ» º¸³»±âÀ§ÇÑ °èÁ¤ÀÌ ÁöÁ¤µÇ¾îÀÖÁö¾Ê½À´Ï´Ù.\n" +"º¸³»±â Àü¿¡ ¸ÞÀÏ °èÁ¤À» ¼±ÅÃÇϼ¼¿ä." + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "%s·Î ¸Þ½ÃÁö¸¦ º¸³»´Â Áß ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù." + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Àӽú¸°ü" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"¸Þ½ÃÁö¸¦ º¸³»´Â Áß ¿¡·¯ ¹ß»ý.\n" +"ÀÌ ¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÔ¿¡ ³ÖÀ»±î¿ä?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÔ¿¡ ³ÖÀ»¼ö°¡ ¾ø½À´Ï´Ù." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "¸Þ½ÃÁö¸¦ º¸³»´Âµ¥ ¿¡·¯ ¹ß»ý" + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "¸Þ½ÃÁö¸¦ º¸³½ ÆíÁöÇÔ¿¡ ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "ÆÄÀÏ ¸ðµå¸¦ ¹Ù²Ü¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "¸Þ½ÃÁöÀÇ ¹®ÀÚ¼ÂÀ» º¯°æÇÒ ¼ö°¡ ¾ø½À´Ï´Ù." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "Çì´õ¸¦ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "º¸³½ ¸ÞÀÏÀ» ÀúÁ¤ÇÕ´Ï´Ù...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "¸Þ½ÃÁö¸¦ ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "Ç¥½Ã ÆÄÀÏÀ» ¿­¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÕ´Ï´Ù...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "¸Þ½ÃÁö¸¦ Àӽà º¸°üÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "%s ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "»ý¼ºµÈ Message-ID: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "¸¶ÀÓ Å¸ÀÔ" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Å©±â" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "ÆíÁýâÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "º¸³½ »ç¶÷:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "¸ÞÀÏ ¹ß¼Û" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "¸Þ½ÃÁö º¸³»±â" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "³ªÁß¿¡ º¸³»±â" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "º¸³¾ ÆíÁöÇÔ¿¡ ³Ö¾î¼­ ³ªÁß¿¡ º¸³»±â" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Àӽà º¸°üÇÔ" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Àӽà º¸°üÇÔ¿¡ ³Ö±â" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "»ðÀÔ" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "ÆÄÀÏÀ» »ðÀÔÇÕ´Ï´Ù" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "÷ºÎ" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "ÆÄÀÏ Ã·ºÎ" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "¼­¸í" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "¼­¸í ÆÄÀÏÀ» ³¢¿ö³Ö½À´Ï´Ù" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "ÆíÁý±â" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "¿ÜºÎ ÆíÁý±â·Î ÆíÁý" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "ÁٹٲÞ" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "±ä ÁÙ¿¡´ëÇØ ÀÚµ¿ ÁٹٲÞÀ» ÇÕ´Ï´Ù" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "¿Ã¹Ù¸£Áö¾ÊÀº ¸¶ÀÓ Å¸ÀÔ." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "ÆÄÀÏÀÌ ¾ø°Å³ª ºñ¿©ÀÖ½À´Ï´Ù." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Ư¼º" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "ÀÎÄÚµù" + +#: src/compose.c:3065 +msgid "Path" +msgstr "°æ·Î" + +#: src/compose.c:3066 +msgid "File name" +msgstr "ÆÄÀÏ À̸§" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "¿ÜºÎ ÆíÁý±â ¸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù: `%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"¿ÜºÎ ÆíÁý±â°¡ ¿©ÀüÈ÷ »ì¾ÆÀÖ½À´Ï´Ù.\n" +"ÀÌ ÇÁ·Î¼¼½º¸¦ °­Á¦·Î Á¾·á½Ãų±î¿ä?\n" +"ÇÁ·Î¼¼½º ±×·ì ¾ÆÀ̵ð: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "ÇÁ·Î¼¼½º ±×·ì id: %d¸¦ Á¾·á½ÃÅ´" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Àӽà ÆÄÀÏ: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "ÆíÁý: ¸ð´ÏÅ͸µÇÏ´Â ÇÁ·Î¼¼½º·ÎºÎÅÍ ÀÔ·ÂÀÌ ÀÖ¾ú½À´Ï´Ù\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "¿ÜºÎ ÆíÁý±â¸¦ ½ÇÇàÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "ÆÄÀÏ·Î ¾µ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "ÆÄÀÌÇÁ Àб⠽ÇÆÐ\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "¿À·¡µÈ Àӽà º¸°ü ¸Þ½ÃÁö¸¦ Á¦°ÅÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "ÆÄÀÏ ¼±ÅÃ" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "¸Þ½ÃÁö ¹ö¸®±â" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "ÀÌ ¸Þ½ÃÁö´Â ¼öÁ¤µÇ¾ú½À´Ï´Ù. º¯°æ»çÇ×À» ¹ö¸±±î¿ä?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "¹ö¸®±â" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "Àӽà º¸°üÇÔÀ¸·Î" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Æú´õ ¼±ÅÃ" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/»õ Æú´õ ¸¸µé±â(_n)..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/Æú´õ À̸§ ¹Ù²Ù±â(_R)..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/Æú´õ Áö¿ì±â(_D)" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/¸ÞÀϹڽº¸¦ Áö¿ì±â(_m)" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/IMAP4 ¼­¹ö Áö¿ì±â(_I)" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/´º½º±×·ì ±¸µ¶(_S)..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/´º½º±×·ì »èÁ¦(_R)" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/´º½º ¼­¹ö »èÁ¦(_n)" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Æú´õ" + +#: src/folderview.c:234 +msgid "New" +msgstr "»õ°Í" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "¾ÈÀÐÀ½" + +#: src/folderview.c:235 +msgid "#" +msgstr "Àüü" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Æú´õ ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Æú´õ Á¤º¸¸¦ ¼³Á¤ÇÕ´Ï´Ù...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Æú´õ Á¤º¸¸¦ ¼³Á¤ÇÕ´Ï´Ù..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "%s%c%s¸¦ ½ºÄµÇÕ´Ï´Ù..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "%s Æú´õ¸¦ ½ºÄµÇÕ´Ï´Ù..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "¸ðµç Æú´õ¸¦ °»½ÅÇÕ´Ï´Ù..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "¹ÞÀº ÆíÁöÇÔ" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "º¸³½ ÆíÁöÇÔ" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "º¸³¾ ÆíÁöÇÔ" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Áö¿î ÆíÁöÇÔ" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "%s Æú´õ°¡ ¼±ÅõǾú½À´Ï´Ù\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "`%c'´Â Æú´õ À̸§¿¡ Æ÷Ç﵃ ¼ö ¾ø½À´Ï´Ù." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "`%s' Æú´õ°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "`%s'¿¡´ëÇÑ »õ À̸§À» ³ÖÀ¸¼¼¿ä:" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Æú´õ À̸§ º¯°æ" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"`%s'¾Æ·¡¿¡ ÀÖ´Â ¸ðµç Æú´õ¿Í ¸Þ½ÃÁö°¡ »èÁ¦µÉ °ÍÀÔ´Ï´Ù.\n" +"Á¤¸»·Î »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Æú´õ »èÁ¦" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "`%s'Æú´õ¸¦ Á¦°ÅÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"¸ÞÀϹڽº `%s'¸¦ Á¤¸»·Î »èÁ¦ÇϽðڽÀ´Ï±î?\n" +"(¸Þ½ÃÁö°¡ µð½ºÅ©·ÎºÎÅÍ »èÁ¦µÇ´Â°ÍÀº ¾Æ´Õ´Ï´Ù)" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "Æú´õ¸¦ »èÁ¦ÇÕ´Ï´Ù" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "Á¤¸»·Î `%s' Æú´õ¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "Á¤¸»·Î `%s' IMAP4 ¼­¹ö¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "IMAP4 ¼­¹ö »èÁ¦" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "´º½º±×·ì ±¸µ¶" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "±¸µ¶ÇÒ ´º½º±×·ìÀ» ÀÔ·Â:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "`%s' ´º½º±×·ìÀÌ ÀÌ¹Ì ÀÖ½À´Ï´Ù." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Á¤¸»·Î `%s' ´º½º±×·ìÀ» »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "´º½º±×·ì »èÁ¦" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Á¤¸»·Î `%s' ´º½º ¼­¹ö¸¦ »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "´º½º ¼­¹ö »èÁ¦" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "ÇѱÛ" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "´º½º±×·ì:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Á¦¸ñ:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Çì´õ ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(???)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Á¦¸ñ ¾øÀ½)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Çì´õ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "¸ðµç Çì¼­" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "%sÀÇ Çì´õ¸¦ º¸¿©ÁÝ´Ï´Ù...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - ¸ðµç Çì¼­" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "À̹ÌÁö ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "À̹ÌÁö¸¦ ºÒ·¯¿Ã ¼ö°¡ ¾ø½À´Ï´Ù." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "%s:%d¿¡´ëÇÑ IMAP4 Á¢¼ÓÀÌ ²÷¾îÁ³½À´Ï´Ù. ´Ù½Ã Á¢¼Ó...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "%s:%d¿¡´ëÇÑ IMAP4 Á¢¼ÓÀ» ¸¸µì´Ï´Ù ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "Æú´õ¸¦ ¼±ÅÃÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %s\n" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "¸Þ½ÃÁö %d´Â ÀÌ¹Ì Ä³½¬µÇ¾ú½À´Ï´Ù.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "¸Þ½ÃÁö %d¸¦ °¡Á®¿É´Ï´Ù...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "¸Þ½ÃÁö %d¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "¿Å±æ Æú´õ¿Í ¿Å°ÜÁú Æú´õ°¡ °°½À´Ï´Ù.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "¸Þ½ÃÁö %s%c%d¸¦ %s·Î À̵¿ÇÕ´Ï´Ù...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "»èÁ¦ Ç÷¡±×¸¦ ¼³Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %d\n" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "Áö¿ï ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "»èÁ¦ Ç÷¡±×¸¦ ¼³Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: 1:%d\n" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "envelope¸¦ ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "envelope¸¦ ¾ò´Â Áß ¿¡·¯ ¹ß»ý.\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "envelope¸¦ ÆĽÌÇÒ ¼ö°¡ ¾ø½À´Ï´Ù: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "¸Þ½ÃÁö %d¸¦ »èÁ¦ÇÕ´Ï´Ù...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tij½¬µÈ ¸ðµç ¸Þ½ÃÁö¸¦ Áö¿ò´Ï´Ù... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "%s:%d IMAP4 ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "IMAP4 ·Î±×ÀÎÀ» ½ÇÆÐÇß½À´Ï´Ù.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "%d¸¦ %s·Î º¹»çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "imap ¸í·É¾î ½ÇÇàÁß ¿¡·¯: STORE %d:%d %s\n" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "imap ¸í·É¾î ½ÇÇàÁß ¿¡·¯: EXPUNGE\n" + +#: src/import.c:116 +msgid "Import" +msgstr "°¡Á®¿À±â" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "°¡Á®¿Ã ÆÄÀÏ:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "ÀúÀåÇÒ Æú´õ:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "°í¸£±â..." + +#: src/import.c:201 +msgid "Select importing file" +msgstr "ºÒ·¯¿Ã ÆÄÀÏÀ» ¼±ÅÃ" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "»õ ¸Þ½ÃÁö¸¦ °¡Á®¿È" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "¾ÏÈ£ ÀÔ·Â" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "%s °èÁ¤À¸·ÎºÎÅÍ »õ ¸Þ½ÃÁö¸¦ ¾ò½À´Ï´Ù...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: »õ ¸Þ½ÃÁö¸¦ °¡Á®¿È" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "POP3 ¼­¹ö %s¿¡ ¿¬°áÇÕ´Ï´Ù..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "%s:%d POP3 ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "%s:%d POP3 ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "ÀÎÁõÇÏ´Â Áß" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "»õ ¸Þ½ÃÁöÀÇ °¹¼ö¸¦ °¡Á®¿À´Â Áß" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "¸Þ½ÃÁö (%d / %d)¸¦ °¡Á®¿À´Â Áß" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "¸Þ½ÃÁö¸¦ »èÁ¦ÇÏ´Â Áß" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "³¡¸¶Ä¡´Â Áß" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "ÀÌ ¸Þ½ÃÁö¸¦ ¹ÞÁö¾ÊÀ» °ÍÀÔ´Ï´Ù\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "¸ÞÀÏÀ» ó¸®ÇÏ´Â µµÁß ¿¡·¯" + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "µð½ºÅ©¿¡ ³²Àº °ø°£ÀÌ ¾ø½¿." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "·ÎÄ® ¸ÞÀϹڽº¿¡ ¸Þ½Ã°¡ ¾øÀ½.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "%s·ÎºÎÅÍ %s·Î »õ ¸Þ½ÃÁö¸¦ °¡Á®¿È...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "·Î±× âÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "ÇÁ·ÎÅäÄÝ ·Î±×" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"ÆÄÀÏ `%s'°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù.\n" +"Æú´õ¸¦ »ý¼ºÇÒ ¼ö°¡ ¾ø½À´Ï´Ù." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread°¡ glib¿¡ÀÇÇØ Áö¿øµÇÁö¾Ê½À´Ï´Ù.\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "»ç¿ë¹ý: %s [¿É¼Ç]...\n" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr " --compose [ÁÖ¼Ò] ÆíÁý âÀ» ¿±´Ï´Ù" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr " --receive »õ ¸Þ½ÃÁö¸¦ ¹Þ½À´Ï´Ù" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr " --receive-all ¸ðµç °èÁ¤¿¡¼­ »õ ¸Þ½ÃÁö¸¦ ¹Þ½À´Ï´Ù" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr " --debug µð¹ö±ë ¸ðµå" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr " --help ÀÌ µµ¿ò¸»À» Ç¥½ÃÇÏ°í ³¡¸¶Ä§´Ï´Ù" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "¸Þ½ÃÁö¸¦ ÆíÁýÇϴ âÀÌ ÀÖ½À´Ï´Ù. Á¤¸» ³¡³»½Ã°Ú½À´Ï±î?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "´Ù¸¥ Sylpheed°¡ ÀÌ¹Ì ½ÇÇàµÇ°í ÀÖ½À´Ï´Ù.\n" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/ÆÄÀÏ(_F)/¸ÞÀÏ ¹Ú½º Ãß°¡(_A)..." + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/ÆÄÀÏ(_F)/Æú´õ Æ®¸® °»½Å(_U)" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)/»õ Æú´õ(_n)" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)/Æú´õ À̸§ º¯°æ(_R)..." + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "/ÆÄÀÏ(_F)/Æú´õ(_F)/Æú´õ »èÁ¦(_D)" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/ÆÄÀÏ(_F)/mbox ÆÄÀÏ °¡Á®¿À±â(_I)..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "/ÆÄÀÏ(_F)/Áö¿î ÆíÁöÇÔ ºñ¿ì±â(_t)" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/ÆÄÀÏ(_F)/»õ À̸§À¸·Î(_S)..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/ÆÄÀÏ(_F)/Àμâ(_P)..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/ÆÄÀÏ(_F)/³¡³»±â(_x)" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/ÆíÁý(_E)/ã±â(_S)" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/º¸±â(_V)" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/º¸±â(_V)/Æú´õ Æ®¸®(_F)" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/º¸±â(_V)/¸Þ½ÃÁö ºä(_M)" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/º¸±â(_V)/Åø¹Ù(_T)" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/º¸±â(_V)/Åø¹Ù(_T)/¾ÆÀÌÄÜ°ú ÅؽºÆ®(_a)" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/º¸±â(_V)/Åø¹Ù(_T)/¾ÆÀÌÄÜ(_I)" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/º¸±â(_V)/Åø¹Ù(_T)/ÅؽºÆ®(_T)" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/º¸±â(_V)/Åø¹Ù(_T)/°¨Ãß±â(_N)" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/º¸±â(_V)/»óŹÙ(_S)" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/º¸±â(_V)/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/º¸±â(_V)/º°µµÀÇ Æú´õ Æ®¸® â(_o)" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/º¸±â(_V)/º°µµÀÇ ¸Þ½ÃÁö â(_e)" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀÚµ¿(_A)" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/7bit ¾Æ½ºÅ° (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/À¯´ÏÄÚµå(_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/¼­ºÎ À¯·´(ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Áß¾Ó À¯·´(ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/_Baltic (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Baltic (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/±×¸®½º(ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Åͱâ (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Cyrillic (ISo-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Cyrillic (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Cyrillic (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/ÀϺ» (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Simplified Chinese (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Traditional Chinese (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Traditional Chinese (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Chinese (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Çѱ¹ (EUC-KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/º¸±â(_V)/¹®ÀÚ¼Â(_C)/Çѱ¹ (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/¸Þ½ÃÁö(_M)/»õ ¸ÞÀÏ ¹Þ±â(_i)" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/¸Þ½ÃÁö(_M)/¸ðµç °èÁ¤¿¡¼­ ¹Þ±â(_a)" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/¸Þ½ÃÁö(_M)/Àӽà º¸°üµÈ ¸Þ½ÃÁö ¹ß¼Û(_g)" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/¸Þ½ÃÁö(_M)/»õ·Î ¸¸µé±â(_n)" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/¸Þ½ÃÁö(_M)/ȸ½Å(_R)" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/¸Þ½ÃÁö(_M)/Àüü ȸ½Å(_l)" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/¸Þ½ÃÁö(_M)/Àü´Þ(_F)" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/¸Þ½ÃÁö(_M)/÷ºÎÆÄÀÏ·Î Àü´Þ(_t)" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/¸Þ½ÃÁö(_M)/À̵¿(_o)..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/¸Þ½ÃÁö(_M)/»èÁ¦(_D)" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/Ç¥½Ã(_M)" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/Ç¥½Ã Áö¿ò(_U)" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½Ã(_e)" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/¸Þ½ÃÁö(_M)/Ç¥½Ã(_M)/ÀÐÀº °ÍÀ¸·Î Ç¥½Ã(_b)" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/¸Þ½ÃÁö(_M)/»õ â¿¡¼­ ¿­±â" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/¸Þ½ÃÁö(_M)/¼Ò½º º¸±â(_s)" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/¸Þ½ÃÁö(_M)/¸ðµç Çì´õ º¸±â(_h)" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/¸Þ½ÃÁö(_M)/´Ù½Ã ÆíÁý(_e)" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/¸í·É(_S)" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/¸í·É(_S)/Áߺ¹µÈ ¸Þ½ÃÁö Áö¿ì±â(_D)" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/¸í·É(_S)/¸Þ½ÃÁö ÇÊÅÍ(_F)" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/¸í·É(_S)/½ÇÇà(_x)" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/¸í·É(_S)/°»½Å(_U)" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/¸í·É(_S)/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/¸í·É(_S)/ÀÌÀü ¸Þ½ÃÁö(_P)" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/¸í·É(_S)/´ÙÀ½ ¸Þ½ÃÁö(_N)" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/¸í·É(_S)/¾ÈÀÐÀº ´ÙÀ½ ¸Þ½ÃÁö(_e)" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/¸í·É(_S)/´Ù¸¥ Æú´õ·Î À̵¿(_G)" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/¹øÈ£(_n)" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/Å©±â(_i)" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/³¯Â¥(_d)" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/º¸³½ »ç¶÷(_f)" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/Á¦¸ñ(_s)" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/¸í·É(_S)/Á¤·Ä(_S)/_Attract by subject" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/¸í·É(_S)/¾²·¹µå º¸±â(_T)" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/¸í·É(_S)/¾²·¹µå ¾ø¾Ö±â(_h)" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/¸í·É(_S)/Ç¥½Ã Ç׸ñ ¼³Á¤(_i)..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/µµ±¸(_T)/·Î±× â(_L)" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/¼³Á¤(_C)" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/¼³Á¤(_C)/±âº»ÀûÀÎ ¼³Á¤(_C)..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/¼³Á¤(_C)/°èÁ¤¿¡µû¸¥ ¼³Á¤(_P)..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/¼³Á¤(_C)/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/¼³Á¤(_C)/»õ °èÁ¤ ¸¸µé±â(_n)..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/¼³Á¤(_C)/°èÁ¤ ÆíÁý(_E)..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/¼³Á¤(_C)/ÇöÀç °èÁ¤À» º¯°æ(_h)" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/µµ¿ò¸»(_H)/¼³¸í¼­(_M)" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/µµ¿ò¸»(_H)/¼³¸í¼­(_M)/¿µ¾î(_E)" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/µµ¿ò¸»(_H)/¼³¸í¼­(_M)/ÀϺ»¾î(_J)" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/µµ¿ò¸»(_H)/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "»õ âÀ» ¸¸µì´Ï´Ù...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "¸ÞÀΠâ: »ö ÇÒ´ç %d ½ÇÆÐ\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Á¦¸ñ ¾ø½¿" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "¾øÀ½" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "ÇöÀç °èÁ¤: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "â À§Ä¡: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "Áö¿î ÆíÁöÇÔ ºñ¿ì±â" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "Áö¿î ÆíÁöÇÔ¿¡ÀÖ´Â ¸ðµç ¸Þ½ÃÁö¸¦ ºñ¿ï±î¿ä?" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "¸ÞÀϹڽº Ãß°¡" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"¸ÞÀÏ ¹Ú½ºÀÇ À§Ä¡¸¦ ÀÔ·ÂÇϼ¼¿ä.\n" +"±âÁ¸ÀÇ ¸ÞÀÏ ¹Ú½º°¡ ÁöÁ¤µÇ¸é ÀÚµ¿À¸·Î\n" +"½ºÄµµÉ°ÍÀÔ´Ï´Ù." + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "¸ÞÀÏ ¹Ú½º `%s'°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "¸ÞÀϹڽº" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"¸ÞÀϹڽº »ý¼ºÀÌ ½ÇÆÐÇß½À´Ï´Ù.\n" +"¾Æ¸¶ ¾î¶² ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇϰųª ±× °÷¿¡ ¾²±â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù." + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "À§Á¬µéÀ» ¼³Á¤ÇÕ´Ï´Ù..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "¹Þ±â" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "»õ ¸ÞÀÏÀ» °¡Á®¿É´Ï´Ù" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "ÀüºÎ ¹Þ±â" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "¸ðµç °èÁ¤¿¡¼­ »õ ¸ÞÀÏÀ» °¡Á®¿É´Ï´Ù" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Àӽà º¸°üµÈ ¸Þ½ÃÁö¸¦ º¸³À´Ï´Ù" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "ÀÛ¼º" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "»õ ¸Þ½ÃÁö¸¦ ÀÛ¼ºÇÕ´Ï´Ù" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "ȸ½Å" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "¸Þ½ÃÁö¿¡ ȸ½ÅÀ» º¸³À´Ï´Ù" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "Àüü ȸ½Å" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "ÀüºÎ¿¡°Ô ȸ½ÅÀ» º¸³À´Ï´Ù" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Àü´Þ" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "¸Þ½ÃÁö¸¦ ´Ù¸¥ »ç¶÷¿¡°Ô Àü´ÞÇÕ´Ï´Ù" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "¸Þ½ÃÁö¸¦ Áö¿ó´Ï´Ù" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "½ÇÇà" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Ç¥½ÃµÈ ÇÁ·Î¼¼½ºµéÀ» ½ÇÇàÇÕ´Ï´Ù" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "´ÙÀ½" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "´ÙÀ½ ¾È ÀÐÀº ¸Þ½ÃÁö¸¦ º¸¿©ÁÝ´Ï´Ù" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "¼³Á¤" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "±âº»ÀûÀΠȯ°æ ¼³Á¤À» ÇÕ´Ï´Ù" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "°èÁ¤" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "°èÁ¤À» ¼³Á¤ÇÕ´Ï´Ù" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "³¡³»±â" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "ÀÌ ÇÁ·Î±×·¥À» ³¡³»½Ã°Ú½À´Ï±î?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "º¸°üµÇ¾ú´ø ¸Þ½ÃÁö º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "¼³Á¤µÈ ¹®ÀÚ¼Â: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "%s·ÎºÎÅÍ %s·Î ¸Þ½ÃÁö¸¦ °¡Á®¿É´Ï´Ù...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "mbox ÆÄÀÏÀ» ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "¿Ã¹Ù¸£Áö¾ÊÀº mbox Æ÷¸ä: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "Á¦´ë·ÎµÇ¾îÀÖÁö¾ÊÀº mbox: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "ÀÓ½ÃÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"¸Þ½ÃÁö º»¹®Áß FromÀ¸·Î ½ÃÀÛÇÏ´Â ÁÙÀÌ ÀÖ½À´Ï´Ù:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "Àӽà ÆÄÀÏ¿¡ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d°³ÀÇ ¸Þ½ÃÁö°¡ ¹ß°ßµÇ¾ú½À´Ï´Ù.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "Àá±Ý ÆÄÀÏ %sÀ» ¸¸µé¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "°¡´ÉÇϸé 'file'´ë½Å¿¡ 'flock'¸¦ »ç¿ëÇϼ¼¿ä.\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "%s¸¦ »ý¼ºÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "¸ÞÀϹڽº¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º°¡ ÀаíÀÖ½À´Ï´Ù. Àá½Ã ±â´Ù¸®¼¼¿ä...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "%s¿¡ lock¸¦ °É¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "¿Ã¹Ù¸£Áö¾ÊÀº Àá±Ý ŸÀÔ\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "%s¿¡ lock¸¦ Ç® ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "¸ÞÀϹڽºÀÇ Å©±â¸¦ 0À¸·Î ¸¸µé¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "¸Þ½ÃÁö ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "¸Þ½ÃÁö %sÀ» %s·Î º¹»çÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Ç¥½Ã ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "%sÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù." + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "µð·ºÅ丮 %s¿¡¼­ ¸¶Áö¸· ¼ýÀÚ = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tij½¬µÇÁö¾ÊÀº ¸Þ½ÃÁö¸¦ ã½À´Ï´Ù... " + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d°³ÀÇ Ä³½¬µÇÁö¾ÊÀº ¸Þ½ÃÁö°¡ ¹ß°ßµÇ¾ú½À´Ï´Ù.\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tij½¬µÇÁö¾ÊÀº ¸Þ½ÃÁö¸¦ Á¤·ÄÇÕ´Ï´Ù..." + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/¿­±â(_O)" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/ÅؽºÆ®·Î º¸±â(_D)" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/»õ À̸§À¸·Î(_S)..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "¸¶ÀÓ Å¸ÀÔ" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "¸¶ÀÓ ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "multipart ¸Þ½ÃÁöÀÇ ºÎºÐÀ» ¾òÀ» ¼ö°¡ ¾ø½À´Ï´Ù." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "multipart ¸Þ½ÃÁöÀÇ ºÎºÐÀ» ÀúÀåÇÒ ¼ö°¡ ¾ø½À´Ï´Ù." + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "»õ À̸§À¸·Î" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "µ¤¾î¾²±â" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "±âÁ¸ ÆÄÀÏÀ» µ¤¾î¾²½Ã°Ú½À´Ï±î?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "¸¶ÀÓ ºä¾îÀÇ ¸í·ÉÇàÀÌ ºÎÀûÀýÇÕ´Ï´Ù: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "%s:%d·Î NNTP Á¢¼ÓÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "%s:%d·ÎÀÇ NNTP ¿¬°áÀÌ ²÷¾îÁ³½À´Ï´Ù. ´Ù½Ã ¿¬°áÇÕ´Ï´Ù...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "±â»ç %d´Â ÀÌ¹Ì Ä³½¬µÇ¾ú½À´Ï´Ù.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "±â»ç %d¸¦ ¾ò½À´Ï´Ù...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "±â»ç %d¸¦ ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "±â»ç¸¦ ¿Ã¸± ¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "±â»ç %d¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "%s ±×·ìÀ» Á¤ÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "¿Ã¹Ù¸£Áö¾ÊÀº ±â»ç ¹üÀ§: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "»õ ±â»ç°¡ ¾ø½À´Ï´Ù.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "%3$s¿¡¼­ %1$d - %2$d xover¸¦ °¡Á®¿È...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "xover¸¦ °¡Á®¿Ã ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "xover¸¦ ¾ò´Â µµÁß ¿¡·¯°¡ ¹ß»ý.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "¿Ã¹Ù¸£Áö¾ÊÀº xover line: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "±â»ç %d¸¦ Áö¿ó´Ï´Ù...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tij½¬µÈ ¸ðµç ±â»ç¸¦ Áö¿ò´Ï´Ù... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "%s:%d NNTP ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "ÇÁ·ÎÅäÄÝ ¿¡·¯: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "ÇÁ·ÎÅäÄÝ ¿¡·¯\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "±ÛÀ» ¿Ã¸®´Â µµÁß ¿¡·¯ ¹ß»ý\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "Passphrase" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[»ç¿ëÀÚ ¾ÆÀ̵ð ¾øÀ½]" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%s passphrase¸¦ ÀÔ·ÂÇϼ¼¿ä:\n" +"\n" +" %.*s \n" +"(%.*s)\n" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" +"Bad passphrase! ´Ù½Ã ½ÃµµÇϼ¼¿ä...\n" +"\n" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "ÀÎÁõ µµÁß ¿¡·¯ ¹ß»ý\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "greeting¿¡¼­ ¹ß°ßµÇÁö¾ÊÀº APOP ŸÀÓ ½ºÅÆÇÁ°¡ ¿ä±¸µÊ\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "greeting¿¡¼­ ŸÀÓ ½ºÅÆÇÁ¿¡ ¹®¹ý ¿À·ù\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "POP3 ÇÁ·ÎÅäÄÝ ¿¡·¯\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "¼³Á¤À» ÀнÀ´Ï´Ù...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "%sÀ» ¹ß°ß\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "¼³Á¤ Àб⸦ ¸¶Ä§.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "ÆÄÀÏ¿¡ ¼³Á¤À» ¾²±â°¡ ½ÇÆÐÇß½À´Ï´Ù\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "¼³Á¤ÀÌ ÀúÀåµÇ¾ú½À´Ï´Ù.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Àû¿ë" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "°èÁ¤ ¼³Á¤ âÀ» ¿±´Ï´Ù...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "°èÁ¤%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "»õ °èÁ¤¿¡´ëÇÑ ¼³Á¤" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "°¢ °èÁ¤¿¡´ëÇÑ ¼³Á¤" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "°èÁ¤ ¼³Á¤ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "±âº»" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "¹Þ±â" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "°í±Þ" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "ÀÌ °èÁ¤ÀÇ À̸§" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "±âº» °èÁ¤" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "½Å»ó Á¤º¸" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Á¤½Ä À̸§" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "¸ÞÀÏ ÁÖ¼Ò" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "±â°ü" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "¼­¹ö Á¤º¸" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (º¸Åë)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOP ÀÎÁõ)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "´º½º(NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "·ÎÄÃ" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "´º½º ¼­¹ö" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "¹Þ´Â ¼­¹ö" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "SMTP ¼­¹ö(¹ß¼Û¿ë)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "»ç¿ëÀÚ °èÁ¤" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "¾ÏÈ£" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "¹ÞÀº ÈÄ ¼­¹ö¿¡¼­ ¸Þ½ÃÁö¸¦ Áö¿ò" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "¼­¹ö¿¡¼­ ¸ðµç ¸Þ½ÃÁö¸¦ ¹ÞÀ½" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "¸ðµç °èÁ¤À¸·ÎºÎÅÍ ¸ÞÀÏÀ» °¡Á®¿Ã¶§ ¹ÞÀ½" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "¹ÞÀ»¶§ ¸Þ½ÃÁö¸¦ ÇÊÅ͸µ" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Çì´õ" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Date Çì´õ Ç׸ñÀ» Ãß°¡" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Message-ID »ý¼º" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "»ç¿ëÀÚ Á¤ÀÇµÈ Çì´õ Ãß°¡" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr " ÆíÁý..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "´ÙÀ½ ÁÖ¼Ò¸¦ ÀÚµ¿ÀûÀ¸·Î Á¤ÇÔ" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "ÂüÁ¶" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "¼ûÀº ÂüÁ¶" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "ȸ½ÅÁÖ¼Ò" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "ÀÎÁõ" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "SMTP ÀÎÁõ(SMTP AUTH)" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "º¸³»±âÀü POP3¿Í ÀÎÁõ" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "¼­¸í ÆÄÀÏ" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "SMTP Æ÷Æ® ¹øÈ£" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "POP3 Æ÷Æ® ¹øÈ£" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "µµ¸ÞÀÎ À̸§ ÁöÁ¤" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "¸ÞÀÏ ÁÖ¼Ò°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "SMTP ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "»ç¿ëÀÚ ¾ÆÀ̵𰡠ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "POP3 ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "IMAP4 ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "NNTP ¼­¹ö°¡ ÁöÁ¤µÇÁö¾Ê¾Ò½À´Ï´Ù." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "ÀÏ¹Ý ¼³Á¤ âÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "ÀÏ¹Ý ¼³Á¤" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "º¸±â" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "ÇÊÅ͸µ" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "ÇÁ¶óÀ̹ö½Ã" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "ÀÎÅÍÆäÀ̽º" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "±âŸ" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "¿ÜºÎ ÇÁ·Î±×·¥" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "ÇÕüÀ» À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥À» »ç¿ë" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "ÇÁ·Î±×·¥ °æ·Î" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Local spool" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "spool·ÎºÎÅÍ ÇÕü" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "ÇÕü½Ã ÇÊÅ͸µ" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "½ºÇ® µð·ºÅ丮" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "»õ ÆíÁö¸¦ ÀÚµ¿ °Ë»ç" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "°¢°¢" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "ºÐ" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "½ÃÀÛÇÒ ¶§ »õ ÆíÁö¸¦ °Ë»ç" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "´º½º" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"³»·Á¹ÞÀ» ÃÖ´ë ±â»ç ¼ö\n" +"(0ÀÎ °æ¿ì Á¦ÇÑ ¾øÀ½)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "¹ß¼ÛÀ» À§ÇØ ¿ÜºÎ ÇÁ·Î±×·¥À» »ç¿ë" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "º¸³½ ¸Þ½ÃÁö¸¦ 'º¸³½ ÆíÁöÇÔ'¿¡ ÀúÀå" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "º¸³»±â¸¦ ½ÇÆÐÇßÀ»¶§ ¸Þ½ÃÁö¸¦ º¸³¾ ÆíÁöÇÔÀ¸·Î º¸³¿" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "º¸³»´Â ¸ÞÀÏÀÇ ¹®ÀÚ¼Â" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "ÀÚµ¿" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7bit ¾Æ½ºÅ° (US-ASCII)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "À¯´ÏÄÚµå (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "¼­ºÎ À¯·´(ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "ÁߺΠÀ¯·´(ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "Baltic (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "Baltic (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "±×¸®½º (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "ÅÍÅ° (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillic (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "Cyrillic (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "Cyrillic (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "Cyrillic (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "ÀϺ» (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "ÀϺ» (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "ÀϺ» (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "Simplified Chinese (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "Traditional Chinese (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "Traditional Chinese (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "Áß±¹(ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Çѱ¹(EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Àοë" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "ȸ½ÅÇÒ ¶§ ¸Þ½ÃÁö¸¦ Àοë" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "ÀÎ¿ë ºÎÈ£" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Àοë Çü½Ä:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr "ºÎÈ£ ¼³¸í" + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "¼­¸íÀ» Áöµ¿À¸·Î »ðÀÔ" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "¼­¸í ºÐ¸®ÀÚ" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "ÁÙ ¹Ù²Þ at" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "±ÛÀÚ" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "Àο뵵 ÁÙ ¹Ù²Þ" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "º¸³»±â Àü¿¡ ÁÙ ¹Ù²Þ" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "µî·ÏµÈ ±ÔÄ¢" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr " " + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(¼³Á¤¾ÈµÊ)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Å°¿öµå" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Á¶°Ç" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "Æ÷ÇÔ" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "Æ÷ÇÔ ¾ÈµÊ" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "ÀúÀå Æú´õ" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Á¤±Ô½Ä »ç¿ë" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "¹ÞÁö ¾ÊÀ½" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "µî·Ï" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " ġȯ" + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "±Û²Ã" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "º»¹®" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "Æú´õÀ̸§¿·¿¡ ÀÐÁö¾ÊÀ» ¸Þ½ÃÁö ¼ö¸¦ Ç¥½Ã" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "¸Þ½ÃÁö¿¡ »öÀ» ÀÌ¿ëÇÏ¿© º¸¿©ÁÖ±â" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Àü°¢ ¹®ÀÚ¸¦ ¹Ý°¢À¸·Î Ç¥½Ã" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "¸Þ½ÃÁö¸¦ º¼¶§ °£´ÜÇÑ Çì´õ¸¸ Ç¥½Ã" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "ÁÙ °£°Ý" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "Çȼ¿" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "¸Ó¸®ºÎºÐ¿¡ °ø°£À» ³²±â±â" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Çì´õ À̸§À» ¹ø¿ª(`From:', `Subject:' µîµî)" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "º¸³½ »ç¶÷ÀÌ º»ÀÎÀÎ °æ¿ì º¸³½ »ç¶÷ Ä­¿¡ ¹Þ´Â »ç¶÷À» Ç¥½Ã" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "°¡·Î ½ºÅ©·Ñ¹Ù¸¦ ¸¸µë" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr "¿ä¾à¿¡ Ç¥½ÃµÉ Ç׸ñ ¼³Á¤... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "±âº»À¸·Î ¸Þ½ÃÁö¸¦ ¾Ïȣȭ" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "±âº»À¸·Î ¸Þ½ÃÁö¿¡ »çÀÎÀ» ÇÔ" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "passphrase¸¦ ÀÔ·ÂÇÒ¶§ Grab input" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" +"Emacs¿¡ ±â¹ÝÇÑ ¸ÞÀÏ·¯µéÀÇ ¸¶¿ì½º µ¿ÀÛÀ»\n" +"Èä³»³»±â" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Æú´õ¿¡ µé¾î°¡¸é ù¹ø° ¾ÈÀÐÀº ¸Þ½ÃÁö ¿­±â" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "¸Þ½ÃÁö¸¦ À̵¿Çϰųª Áö¿ï¶§ Áï½Ã ½ÇÇà" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"ÀÌ°ÍÀÌ ²¨Á®ÀÖ´Â °æ¿ì ¸Þ½ÃÁö´Â ½ÇÇට±îÁö\n" +"´ÜÁö Ç¥½Ã¸¸ µÉ °ÍÀÔ´Ï´Ù" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "³¡³¾¶§" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "³¡³Â¶§ È®ÀÎ" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "³¡³¾¶§ Áö¿î ÆíÁöÇÔ ºñ¿ì±â" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "Áö¿î ÆíÁöÇÔ ºñ¿ï¶§ È®ÀÎÇϱâ" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "¿ÜºÎ À¥ ºê¶ó¿ìÁ®(%s´Â URI·Î ´ëüµË´Ï´Ù)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "¸í·É¾î" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Àμâ(%s´Â ÆÄÀÏ À̸§À¸·Î ´ëüµË´Ï´Ù)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "¿ÜºÎ ÆíÁý±â(%s´Â ÆÄÀÏ À̸§À¸·Î ´ëüµË´Ï´Ù)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "ºÎÈ£ ¼³¸í" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"³¯Â¥\n" +"º¸³½ »ç¶÷\n" +"º¸³½ »ç¶÷ÀÇ À̸§\n" +"º¸³½ »ç¶÷ÀÇ ¼º\n" +"º¸³½ »ç¶÷ÀÇ À̴ϼÈ\n" +"Á¦¸ñ\n" +"¹Þ´Â »ç¶÷\n" +"¸Þ½ÃÁö-ID\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "ÇÊÅÍ ¼³Á¤À» ÀоîµéÀÔ´Ï´Ù...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "ÇÊÅÍ ¼³Á¤À» ¾¹´Ï´Ù...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(»õ ±ÔÄ¢)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "ÀúÀå Æú´õ°¡ ¼³Á¤ÀÌ µÇ¾îÀÖÁö¾Ê½À´Ï´Ù" + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Çì´õ À̸§ÀÌ ÁöÁ¤µÇÁö¾ÊÀ½" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "±ÔÄ¢ »èÁ¦" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "Á¤¸»·Î ÀÌ ±ÔÄ¢À» »èÁ¦ÇϽðڽÀ´Ï±î?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Ç¥½ÃÇÒ Ç׸ñ ¼³Á¤" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Ç¥½Ã" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "¸¶ÀÓ" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "¼ýÀÚ" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "³¯Â¥" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "º¸³½ »ç¶÷" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Á¦¸ñ" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "±Û²Ã ¼±ÅÃ" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "ÀÏ¿ùÈ­¼ö¸ñ±ÝÅä" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "ÄÚµå º¯È¯ÀÌ ½ÇÆÐÇß½À´Ï´Ù.\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "ij½¬ µ¥ÀÌŸ°¡ ±úÁ®ÀÖ½À´Ï´Ù\n" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tij½¬ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\t¿ä¾à ij½¬¸¦ Àоîµå¸³´Ï´Ù..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "ij½¬ ¹öÀüÀÌ ´Ù¸¨´Ï´Ù. ±×°ÍÀ» ¹ö¸².\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\t¸Þ½ÃÁöµéÀ» Ç¥½ÃÇÕ´Ï´Ù..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d »õ ¸Þ½ÃÁö\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "Ç¥½Ã ÆÄÀÏÀÌ ¹ß°ßµÇÁö¾ÊÀ½.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "Ç¥½Ã ¹öÀüÀÌ ´Ù¸¨´Ï´Ù(%d != %d). ±×°ÍÀ» ¹«½ÃÇÕ´Ï´Ù.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "Ãß°¡ ¸ðµå·Î Ç¥½Ã ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "¾²±â ¸ðµå·Î Ç¥½Ã ÆÄÀÏÀ» ¿­ ¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "º¸°üµÈ ¸Þ½ÃÁö¸¦ º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "Àμ⠸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "ÁøÇà ´ÙÀ̾ó·Î±×¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "µ¥ÀÌŸ¸¦ °¡Á®¿À´Â Áß ¿¡·¯°¡ ¹ß»ýÇß½À´Ï´Ù.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "ÆÄÀÏ¿¡ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "À×?: ¼­¸íÀÌ ÀÎÁõµÇÁö¾Ê¾Ò½À´Ï´Ù" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "¼­¸íÀÌ ¹ß°ßµÇÁö¾ÊÀ½" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "Good signature" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "BAD signature" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "¼­¸íÀ» °ËÁõÇÒ °ø°³Å°°¡ ¾ø½À´Ï´Ù" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "¼­¸íÀ» °ËÁõÇÏ´Â µµÁß ¿¡·¯" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "Å° ¼±ÅÃ" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "Select key for: " + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "Å° ID" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "°ª" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "¼±ÅÃ" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "º¸³¾ ¸Þ½ÃÁöÀÇ Çì´õ°¡ ±úÁ³½À´Ï´Ù.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "°èÁ¤ÀÌ ¹ß°ßµÇÁö¾ÊÀ½. ÇöÀç °èÁ¤À» »ç¿ë...\n" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "°èÁ¤ÀÌ ¹ß°ßµÇÁö¾Ê¾Ò½À´Ï´Ù.\n" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "SMTP ¼­¹ö¿¡ ¿¬°áÇÏ°í ÀÖ½À´Ï´Ù: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "%s:%d SMPT ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö°¡ ¾ø½À´Ï´Ù\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "HELO¸¦ º¸³»´Â Áß ¿¡·¯ ¹ß»ý\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "¸ÞÀϹڽº ¼³Á¤" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"¸ÕÀú ¸ÞÀϹڽºÀÇ À§Ä¡¸¦ ÁöÁ¤ÇؾßÇÕ´Ï´Ù.\n" +"±âÁ¸¿¡ »ç¿ëÇÏ°í ÀÖÀ¸½Ã¸é MH Æ÷¸äÀÇ ¸ÞÀϹڽº¸¦\n" +"»ç¿ëÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù\n" +"Àß ¸ð¸£°ÚÀ¸¸é ±×³É È®ÀÎÀ» ´©¸£¼¼¿ä." + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "¼Ò½º âÀ» ¸¸µì´Ï´Ù...\n" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "¸Þ½ÃÁöÀÇ ¼Ò½º" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "%sÀÇ ¼Ò½º¸¦ º¸¿©ÁÝ´Ï´Ù...\n" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - ¼Ò½º" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "ã±â" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "´ë¼Ò ¹®ÀÚ ±¸º°" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "µÚ·Î ã±â" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "Á¶°Ç¿¡ ¸Â´Â °ÍÀ» ¸ðµÎ ¼±ÅÃ" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Áö¿ò" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "ã±â ½ÇÆÐ" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "ã´Â ¹®ÀÚ¿­ÀÌ ¹ß°ßµÇÀھʾҽÀ´Ï´Ù." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "¸®½ºÆ®ÀÇ ¸Ç¾Õ¿¡ µµ´ÞÇß½À´Ï´Ù; ³¡¿¡¼­ °è¼ÓÇÒ±î¿ä?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "¸®½ºÆ®ÀÇ ³¡¿¡ µµ´ÞÇß½À´Ï´Ù; ½ÃÀۺκп¡¼­ °è¼ÓÇÒ±î¿ä?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "ã±â°¡ ¿Ï·á" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "À̵¿(_o)..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/º¹»ç(_C)..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/½ÇÇà(_x)" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/Ç¥½Ã(_M)" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/Ç¥½Ã(_M)/Ç¥½Ã(_U)" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/Ç¥½Ã(_M)/Ç¥½Ã ¾ø¾Ú(_U)" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/Ç¥½Ã(_M)/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "Ç¥½Ã(_M)/ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½Ã(_e)" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/Ç¥½Ã(_M)/ÀÐÀº °ÍÀ¸·Î Ç¥½Ã(_b)" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/ȸ½Å(_R)" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/Àüü ȸ½Å(_l)" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/Àü´Þ(_F)" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/÷ºÎ·Î Àü´Þ(_t)" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/»õ âÀ¸·Î ¿­±â(_w)" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/¼Ò½º º¸±â(_u)" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/¸ðµç Çì´õº¸±â(_h)" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/´Ù½Ã ÆíÁý(_e)" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/Àμâ(_)..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/ÀüºÎ ¼±ÅÃ(_a)" + +#: src/summaryview.c:320 +msgid "M" +msgstr "M" + +#: src/summaryview.c:320 +msgid "U" +msgstr "U" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "¿ä¾à âÀ» »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "¹øÈ£" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Ç¥½Ã ó¸®" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Ç¥½Ã°¡ ¿©ÀüÈ÷ ³²¾ÆÀÖ½À´Ï´Ù. ±×°ÍµéÀ» ó¸®ÇÒ±î¿ä?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"ºó Æú´õ\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Æú´õ(%s)¸¦ ½ºÄµ..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "¿Ï·á." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "¾È ÀÐÀº ¸Þ½ÃÁö°¡ ¾ø½¿ " + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "¾È ÀÐÀº ¸Þ½ÃÁö°¡ ¾ø½À´Ï´Ù. ´ÙÀ½ Æú´õ·Î °¥±î¿ä?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Attracting messages by subject..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d°³ »èÁ¦µÊ" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d°³ À̵¿" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " ¾ÆÀÌÅÛ ¼±ÅÃ" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d »õ ¸Þ½ÃÁö, %d ¾È ÀÐÀ½, %d°³ ¸Þ½ÃÁö(%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d »õ ¸Þ½ÃÁö, %d ¾È ÀÐÀ½, %d°³ ¸Þ½ÃÁö" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "¿ä¾àÀ» Á¤·ÄÇÕ´Ï´Ù..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\t¸Þ½ÃÁö µ¥ÀÌŸ·ÎºÎÅÍ ¿ä¾àÀ» ¸¸µì´Ï´Ù..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "¸Þ½ÃÁö µ¥ÀÌŸ·ÎºÎÅÍ ¿ä¾àÀ» ¸¸µì´Ï´Ù..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "¿ä¾à ij½¬ (%s)¸¦ ¾¹´Ï´Ù..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(³¯Â¥ ¾ø½¿)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "¸Þ½ÃÁö %d°¡ Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "¸Þ½ÃÁö %d°¡ ÀÐÀº °ÍÀ¸·Î Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "¸Þ½ÃÁö %d°¡ ÀÐÁö¾ÊÀº °ÍÀ¸·Î Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "¸Þ½ÃÁö %s/%d°¡ Áö¿ï°ÍÀ¸·Î Ç¥½ÃµÇ¾ú½À´Ï´Ù\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "ÇöÀç Æú´õ´Â Áö¿î ÆíÁöÇÔÀÔ´Ï´Ù." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Áߺ¹µÈ ¸Þ½ÃÁö¸¦ Áö¿ó´Ï´Ù..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "¸Þ½ÃÁö %s/%dÀÇ Ç¥½Ã¸¦ Áö¿ü½À´Ï´Ù\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "¸Þ½ÃÁö %d°¡ %s·Î À̵¿Çϵµ·Ï Çß½À´Ï´Ù\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "µµÂøÁö°¡ ÇöÀç Æú´õ¿Í °°½À´Ï´Ù" + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "¸ðµç ¸Þ½ÃÁö¸¦ ¼±ÅÃ..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Àμâ" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Àμ⠸í·É¾î¼­ ÀÔ·ÂÇϼ¼¿ä:\n" +"(`%s'´Â ÆÄÀÏÀ̸§À¸·Î ´ëüµÉ °ÍÀÔ´Ï´Ù)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"Àμ⠸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "¾²·¹µå¸¦ ¸¸µì´Ï´Ù..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "¾²·¹µå¸¦ ¾ø¾Û´Ï´Ù..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "½ÇÇàÀ» À§ÇØ ¾²·¹µå¸¦ ¾ø¾Û´Ï´Ù..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "ÇÊÅ͸µ..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "ÇÊÅ͸µ..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "%s·Î °¡±â\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "ÅؽºÆ® ºä¸¦ »ý¼ºÇÕ´Ï´Ù...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "ÀÌ ºÎºÐÀ» ÀúÀåÇÏ±æ ¿øÇÏ¸é ¿À¸¥ÂÊ ¹öÆ°À¸·Î\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "¸Þ´º¸¦ Æ˾÷ÇϵçÁö '»õ À̸§À¸·Î...'¸¦ ¼±ÅÃÇϰųª `y'¸¦ ´©¸£¼¼¿ä\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "ÅؽºÆ® ¸Þ½ÃÁö·Î ÀÌ ºÎºÐÀ» º¼·Á¸é\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`ÅؽºÆ®·Î º¸±â'¸¦ ¼±ÅÃÇϰųª `t'¸¦ ´©¸£¼¼¿ä.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "¿ÜºÎ ÇÁ·Î±×·¥À¸·Î ÀÌ ºÎºÐÀ» ¿­·Á¸é `¿­±â'¸¦ ÅÃÇϼ¼¿ä.\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "¶Ç´Â ´õºí Ŭ¸¯À» ÇϽðųª °¡¿îµ¥ ¹öÆ° Ŭ¸¯ ¶Ç´Â 'l'¸¦ ´©¸£¼¼¿ä." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "%s·Î ¾²±â°¡ ½ÇÆÐÇß½À´Ï´Ù.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "URI¿­±â ¸í·É¾î°¡ ¿Ã¹Ù¸£Áö¾Ê½À´Ï´Ù: `%s'" diff --git a/po/nl.gmo b/po/nl.gmo new file mode 100644 index 0000000000000000000000000000000000000000..64b1aa8b57a6830f3e2532f6f184e526e8f02d5e GIT binary patch literal 42307 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 literal 0 HcmV?d00001 diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 000000000..2e519ceab --- /dev/null +++ b/po/nl.po @@ -0,0 +1,3642 @@ +# Sylpheed. +# Copyright (C) 2001 Free Software Foundation, Inc. +# Vincent van Adrighem <V.vanAdrighem@ITS.TUDelft.nl>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: Sylpheed 0.4.63\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-03-29 18:17+0200\n" +"Last-Translator: Vincent van Adrighem <V.vanAdrighem@ITS.TUDelft.nl>\n" +"Language-Team: Dutch <nl@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=iso8859-15\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "Info" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"De delen die toegepast zijn van fetchmail zijn copyright 1997 door Eric S. " +"Raymond. Delen daarvan zijn ook copyright 1993 en 1995 door Carl " +"Harris.Copyright voorbehouden met het doel de verspreiding van vrije " +"broncode te beschermen.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"De MD5-ondersteuning is gecopyright door RSA Data Security, Inc. Bekijk het " +"commentaar in de md5.c module voor de licensieafspraken.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc is copyright door Yasuhiro Tonooka <tonooka@msi.co.jp>, en libkcc is " +"gecopyright door takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"GPGME is copyright 2001 door Werner Koch <dd9jn@gnu.org>\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Dit programma is vrije software. U kunt het verspreiden en/of aanpassen " +"binnen de afspraken die in de GNU GPL (General Public License) zijn " +"gepubliceerd. U mag zelf kiezen of u versie 2 of (als u dat wenst) iedere " +"latere versie van het GPL hanteert.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Dit programma wordt verspreid in de hoop dat het nuttig is, maar ZONDER " +"ENIGE GARANTIE. Zelfs zonder de impliciete garantie van VERKOOPWAARDIGHEID " +"of GESCHIKTHEID VOOR ENIG DOEL. Lees de GNU General Public License voor " +"verdere details.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"U zou een kopie van de GNU GPL (General Public License) ontvangen moeten " +"hebben bij dit programma. Als dit niet het geval is, dan kun u een aanvragen " +"bij de Free Software Foundation Inc., 59 Temple Place - Suite 330, Boston, " +"MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "OK" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Postvak eigenschappen worden ingelezen...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Label gevonden: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"Er zijn nog schermen open om een nieuw bericht op te stellen.\n" +"Deze moeten gesloten worden om de postvakken te kunnen bewerken." + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Postvak eigenschappen worden geopend...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Postvak eigenschappen venster word gemaakt...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Postvakeigenschappen" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Naam" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protocol" + +#: src/account.c:382 +msgid "Server" +msgstr "Server" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Toevoegen" + +#: src/account.c:407 +msgid "Edit" +msgstr "Bewerken" + +#: src/account.c:413 +msgid " Delete " +msgstr "Verwijderen" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Omlaag" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Omhoog" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Instellen als standaard postvak" + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Sluiten" + +#: src/account.c:498 +msgid "Delete account" +msgstr "Verwijder Postvak" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Wilt u werkelijk dit postvak verwijderen?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Ja" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+Nee" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_Bestand" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_Bestand/Nieuw adres" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_Bestand/Nieuwe groep" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_Bestand/Nieuwe map" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_Bestand/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_Bestand/Aanpassen" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_Bestand/_Verwijderen" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_Bestand/_Sluiten" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/_Help" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/_Help/_Info" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Nieuw adres" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Nieuwe groep" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Nieuwe map" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/Bewerken" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/Verwijderen" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "E-Mail adres" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Opmerkingen" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Adresboek" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Naam:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Verwijder" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Zoeken" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "Aan:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Algemene adressen" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Persoonlijke adressen" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Verwijder adres(sen)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Zeker weten de adressen verwijderen?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "Nee" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Nieuwe map" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Geef de naam van de nieuwe map:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NieuweMap" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Deze naam bestaat al." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Nieuwe groep" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Geef de naam van de nieuwe groep:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NieuweGroep" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Groep hernoemen" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Geef de nieuwe naam van de groep:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Map hernoemen" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Geef de nieuwe naam van de map:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Zeker weten '%s' verwijderen?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Adres aanpassen" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Adres" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Annuleren" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Adresboek wordt ingelezen..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s bestaat niet.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "klaar.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Adresboek wordt geëxporteerd naar bestand..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "Adresboek kon niet weggeschreven worden.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Bericht" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Waarschuwing" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Fout" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Waarschuwingsdialoog wordt gemaakt...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "kan geen geheugen toewijzen\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Toevoegen..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Verwijderen" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Eigenschap..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_Bestand/_Bijlage toevoegen" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_Bestand/Bijlage _invoegen" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_Bestand/_Handtekening Invoegen" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/B_ewerken/_Ongedaan maken" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/B_ewerken/O_pnieuw toepassen" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/B_ewerken/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/B_ewerken/Knippen" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/B_ewerken/_Kopiëren" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/B_ewerken/_Plakken" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/B_ewerken/_Alles selecteren" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/B_ewerken/Regelterugloop" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/B_ewerken/Bewerken met externe editor" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/Be_richt" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/Be_richt/_Verzend" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/Be_richt/_Later verzenden" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/Be_richt/Klad opslaan" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/Be_richt/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/Be_richt/Aan" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/Be_richt/Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/Be_richt/Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/Be_richt/Reply to" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/Be_richt/Vervolg op" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/Be_richt/Bijlagen" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/Be_richt/Codeer" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/Gereedschap" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/Gereedschap/Lineaal weergeven" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/Gereedschap/ Adresboek" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "Kan tekstgedeelte niet ophalen\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: bestand bestaat niet\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Begin doorgestuurd bericht:\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Bestand %s bestaat niet\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Kan de bestandsgrootte niet bepalen van %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Bestand %s is leeg\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Bericht: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [Aangepast]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - bericht opstellen%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Bericht opstellen" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Ontvanger is niet gespecificeerd." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "Kan geen ontvangerlijst opvragen." + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"Account voor het verzenden van email is niet gespecificeerd.\n" +"Selecteer een account voordat u verzend." + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "Er is een fout opgetreden bij het versturen van het bericht naar %s." + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Wordt in de wachtrij geplaatst" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Er is een fout opgetreden bij het verzenden.\n" +"Wilt u het bericht in de wachtrij plaatsen?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Kan bericht niet in de wachtrij plaatsen." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Er is een fout opgetreden bij het verzenden." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Het bericht kan niet opgeslagen worden in de outbox." + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "kan de bestandmodus niet veranderen\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "Kan de karakterset niet converteren." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "kan geen headers schrijven\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "verzonden bericht wordt opgeslagen...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "kan bericht niet opslaan\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "kan het bestand met markeringen niet openen\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "bericht wordt in de wachtrij geplaatst...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "kan het bericht niet in de wachtrij plaatsen\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Kan bestand niet openen %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "gegenereerd bericht-ID: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME type" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Grootte" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Venster \"Bericht opstellen\" wordt aangemaakt...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "Afzender:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Verzend" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "Verzend bericht" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "Wachtrij" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "In de wachtrij plaatsen en later verzenden" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Klad" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Opslaan als klad" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "Invoegen" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Bestand invoegen" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "Bijvoegen" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Bestand bijvoegen" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Tekenen" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Handtekening (signature) invoegen" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editor" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Aanpassen met externe editor" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "Terugloop" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "Lange regels op meerdere regels zetten" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Ongeldig MIME type." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Bestand bestaat niet of is leeg." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Eigenschap" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Codering" + +#: src/compose.c:3065 +msgid "Path" +msgstr "Pad" + +#: src/compose.c:3066 +msgid "File name" +msgstr "Bestandsnaam" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "De ingegeven opdracht voor de externe editor is onjuist: '%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"De externe editor is nog steeds actief.\n" +"Zal ik het programma afbreken?\n" +"procesgroep id: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "Programma (id: %d) afgebroken." + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Tijdelijk bestand: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Opstellen: invoer van \"monitoring process\"\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "Kon de externe editor niet aanroepen\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Kon niet naar bestand schrijven\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Inlezen van pijp mislukt\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "kan het oude kladbericht niet verwijderen\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Selecteer bestand" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Gooi bericht weg" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Dit bericht is aangepast. weggooien?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Gooi weg" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "opslaan als klad" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Selecteer map" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/Maak nieuwe map" + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/Hernoem map" + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/Verwijder map" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/Verwijder mailbox" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/Verwijder IMAP4 server" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/Abonneren op een nieuwsgroep" + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/Verwijder nieuwsgroep" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/Verwijder nieuws server" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Map" + +#: src/folderview.c:234 +msgid "New" +msgstr "Nieuw" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Ongelezen" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Mapzicht wordt gemaakt...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Mapinfo wordt ingesteld...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Mapinfo wordt ingesteld..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Map wordt ingelezen %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Map wordt ingelezen %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "Mappen worden ververst..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "Inbox" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Outbox" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "Wachtrij" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Prullenbak" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Map %s is geselecteerd\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "'%c' mag niet in de naam van een map." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "De map '%s' bestaat al." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Geef een nieuwe naam voor '%s':" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Hernoem map" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"Alle mappen en berichten in '%s' zullen worden verwijderd.\n" +"Wilt u werkelijk verwijderen?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Verwijder map" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "Kan map '%s' niet verwijderen\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"Wilt u het '%s' mailbox werkelijk verwijderen?\n" +"(De berichten zullen niet van de schijf worden verwijderd)" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "Verwijder map" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "Map '%s' werkelijk verwijderen?" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "IMAP4 server '%s' werkelijk verwijderen?" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "Verwijder IMAP4 server" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "Abonneer op een nieuwsgroep" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "Geef nieuwsgroep op:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "De nieuwsgroep '%s' betsaat al." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Nieuwsgroep '%s' werkelijk verwijderen?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Verwijder nieuwsgroep" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Nieuws server '%s' werkelijk verwijderen?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Verwijder nieuws server" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Nieuwsgroepen:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Onderwerp:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Header view wordt aangemaakt...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(Geen afzender)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Geen onderwerp)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Header venster wordt aangemaakt...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "All header" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "De header van %s wordt weergegeven...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Alle headers" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Plaatje wordt weergegeven...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Kan plaatje niet weergeven." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "" +"IMAP4 verbinding naar %s:%d is verbroken. Contact wordt opnieuw gelegd...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "IMAP4 verbinding naar %s:%d wordt geopend...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "kan map niet selecteren: %s\n" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "bericht %d is reeds gebufferd.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "bericht %d wordt opgehaald...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "kan bericht %d niet ophalen\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "de bronmap is hetzelfde als de doelmap.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Bericht %s%c%d wordt verplaatst naar %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "kan verwijderde vlaggen: %d niet instellen\n" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "kan niet wissen\n" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "kan de vlaggen \"verwijderd\" : 1.%d niet instellen\n" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "bericht wordt verwijderd %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tAlle gebufferde berichten worden verwijderd..." + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Kan geen verbinding maken met de IMAP4 server: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "IMAP4 login mislukt.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "kan %d niet naar %s kopiëren\n" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "Fout tijdens IMAP opdracht: STORE %d:%d %s\n" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "Fout tijdens IMAP opdracht: EXPUNGE\n" + +#: src/import.c:116 +msgid "Import" +msgstr "Importeer" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "Bestand wordt geïmporteerd:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Doelmap:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "Selecteer..." + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Selecteer het te importeren bestand" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Nieuwe berichten worden opgehaald" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Geef wachtwoord" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "nieuwe berichten voor account %s worden opgehaald...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: Nieuwe berichten worden opgehaald" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Verbinden met POP3 server: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Kan geen verbinding maken met POP3 server: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Kan geen verbinding maken met POP3 server: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Bezig met identificatie" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Opvragen van aantal nieuwe berichten" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Bericht wordt opgehaald (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Bericht wordt verwijderd" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Bezig met afsluiten" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "een bericht wordt niet ontvangen\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Fout bij het verwerken van de e-mail" + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "De ruimte op de schijf is op." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "geen berichten in de lokale mailbox\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Nieuwe berichten worden opgehaald van %s naar %s ...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "logvenster wordt aangemaakt...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Protocol log" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Bestand '%s' bestaat al.\n" +"Kan geen map aanmaken." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread is niet ondersteunt door glib\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "Gebruik: %s [OPTIES]...\n" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr " --compose [adres]\topen venster \"Bericht opstellen\"" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr " -- receive\t\t\thaal nieuwe berichten op" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr " --receive-all\t\t\tBerichten ophalen van alle accounts" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr " --debug\t\t\tdebug modus" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr " --help\t\t\t\tgeef deze hulp weer" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "" +"U bent een bericht aan het opstellen. Wilt u werkelijk het programma " +"afsluiten?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "er draait al een Sylpheed.\n" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/_Bestand/Nieuw mailbox..." + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_Bestand/Ververs mapvenster" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "/_Bestand/Map" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/_Bestand/Map/Maak nieuwe map aan..." + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/_Bestand/Map/Hernoem map..." + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "/_Bestand/Map/Verwijder map" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_Bestand/ Importeer mbox bestand..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "/_Bestand/Leeg prullenbak" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_Bestand/Opslaan als..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_Bestand/Afdrukken..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_Bestand/Afsluiten" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/Bewerken/_Zoek" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/Beeld" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/Beeld/Mappenboom" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/Beeld/Bericht" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/Beeld/Werkbalk" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/Beeld/Werkbalk/Plaatje en tekst" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/Beeld/Werkbalk/Alleen plaatje" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/Beeld/Werkbalk/Alleen tekst" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/Beeld/Werkbalk/Niet weergeven" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/Beeld/Statusbalk" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/Beeld/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/Beeld/Mappenboom los" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/Beeld/Bericht los" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/Beeld/Codering" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/Beeld/Codering/Automatisch" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/Beeld/Codering/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/Beeld/Codering/7bit ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/Beeld/Codering/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/Beeld/Codering/Westeuropees (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/Beeld/Codering/Centraaleuropees (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/Beeld/Codering/Baltisch (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/Beeld/Codering/Baltisch (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/Beeld/Codering/Grieks (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/Beeld/Codering/Turks (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/Beeld/Codering/Cyrillisch (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/Beeld/Codering/Cyrillisch (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/Beeld/Codering/Cyrillisch (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/Beeld/Codering/Japans (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/Beeld/Codering/Japans (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/Beeld/Codering/Japans (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/Beeld/Codering/Japans (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/Beeld/Codering/Simpel Chinees (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/Beeld/Codering/Traditioneel Chinees (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/Beeld/Codering/Traditioneel Chinees (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/Beeld/Codering/Chinees (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/Beeld/Codering/Koreaans (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/Beeld/Codering/Koreaans (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/B_ericht/Haal e-mail op" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/B_ericht/Haal alle e-mail op" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/B_ericht/Verzend berichten uit de wachtrij" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/B_ericht/Nieuw bericht" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/B_ericht/Beantwoord" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/B_ericht/Beantwoord aan iedereen" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/B_ericht/Doorsturen" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/B_ericht/Doorsturen als bijvoeging" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/B_ericht/Verplaats" + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/B_ericht/Verwijder" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/B_ericht/Markeer" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/B_ericht/Markeer/Markeer" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/B_ericht/Markeer/Demarkeer" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/B_ericht/Markeer/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/B_ericht/Markeer/Markeer als ongelezen" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/B_ericht/Markeer/Markeer als gelezen" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/B_ericht/Open in nieuw venster" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/B_ericht/Bekijk broncode" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/B_ericht/Laat complete header zien" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/B_ericht/Pas aan" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/Berichtenlijst" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/Berichtenlijst/Verwijder dubbele berichten" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/Berichtenlijst/Filter berichten" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/Berichtenlijst/Uitvoeren" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/Berichtenlijst/Ververs" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/Berichtenlijst/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/Berichtenlijst/Vorige bericht" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/Berichtenlijst/Volgende bericht" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/Berichtenlijst/Volgende ongelezen bericht" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/Berichtenlijst/Ga naar andere map" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/Berichtenlijst/Sorteer" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/Berichtenlijst/Sorteer/Op nummer" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/Berichtenlijst/Sorteer/Op grootte" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/Berichtenlijst/Sorteer/Op datum" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/Berichtenlijst/Sorteer/Op afzender" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/Berichtenlijst/Sorteer/Op onderwerp" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/Berichtenlijst/Sorteer/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/Berichtenlijst/Sorteer/Attract by subject" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/Berichtenlijst/Sorteer genest" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/Berichtenlijst/Sorteer ongenest" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/Berichtenlijst/Selecteer kolommen..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/Gereedschap/Logvenster" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/Instellingen" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/Instellingen/Algemene voorkeuren..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/Instellingen/Voorkeuren per account..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/Instellingen/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/Instellingen/Maak nieuw account aan..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/Instellingen/Accounts aanpassen..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/Instellingen/Huidig account veranderen" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/Help/Handboek" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/Help/Handboek/Engels" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/Help/Handboek/Japans" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/Help/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Hoofdvenster wordt aangemaakt...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "HoofdVenster: kleur %d kon niet gealloceerd worden\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Geen titel" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "niets" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Huidig account: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "Vensterpositie: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "Leeg prullenbak" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "Alle berichten uit de prullenbak weggooien?" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "Mailbox toevoegen" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"Geef de lokatie van de mailbox.\n" +"Als een bestaande mailbox wordt ingevuld,\n" +"dan wordt hij automatisch gescand." + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "De mailbox '%s' bestaat al." + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Mailbox" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"De mailbox kon niet aangemaakt worden.\n" +"Misschien bestaan er al wat bestanden, of heb je geen toestemming om er te " +"schrijven." + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "Widgets worden aangemaakt..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Ophalen" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "E-mail ophalen en in de lijst zetten." + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Alles oph." + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "E-mail van alle accounts ophalen en in de lijsten zetten" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Verzend berichten uit de wachtrij" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Opstellen" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Nieuw bericht opstellen" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Beantwoord" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Stuur een bericht terug naar de afzender" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "Alles beantw." + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "Bericht naar iedereen terugsturen." + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Doorsturen" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Stuur dit bericht door" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Verwijder dit bericht" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Doen!" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Voer de gemarkeerde acties uit" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "Volgende" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Volgende ongelezen" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Voork." + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Algemene voorkeuren" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Account" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Accountinstellingen" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Afsluiten" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "Sylpheed afsluiten?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Het verzenden van de berichten uit de wachtrij is mislukt." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "geforceerde karakterset: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Berichten worden van %s naar %s opgehaald...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "kan mbox bestand niet inlezen.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "mbox formaat is onjuist: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "onjuist formaat in mbox: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "kan tijdelijk bestand niet openen\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"Afzender zonder escapecodes gevonden:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "kan niet naar tijdelijk bestand schrijven\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d berichten gevonden\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "kan lock-bestand niet aanmaken: %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "gebruik 'flock' in plaats van 'file' waar mogelijk\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "kan %s niet aanmaken\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "mailbox wordt vastgehouden door een ander proces. we wachten even...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "kan %s niet locken\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "ongeldig locktype\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "kan de lock niet verwijderen van %s\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "kan de mailbox niet inkorten tot 0.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Berichtview wordt gemaakt...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "kan bericht niet kopiëren van %s naar %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "kan het bestand met markeringen niet openen\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "%s bestaat al." + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Laatste nummer in map %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tOngebufferde berichten worden doorzocht..." + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "%d ongebufferde bericht(en) gevonden.\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tOngebufferde berichten worden op nummer gesorteerd..." + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/Openen" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/Als tekst weergeven" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/Opslaan als..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME type" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "MIME view wordt aangemaakt...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Ik kan het deel van een meerdelig bericht niet ophalen." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Kan het deel van een meerdelig bericht niet opslaan." + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Opslaan als" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Overschrijven" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "Bestaand bestand overschrijven?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "MIMEviewer commandoregel is ongeldig: '%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "verbinding met nieuwsserver (NNTP) %s%d wordt opgezet...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "De NNTP-verbinding is verbroken. Opnieuw contact aan het leggen...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "artikel %d is al gebufferd.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "artikel %d wordt opgehaald...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "kan artikel %d niet lezen\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "kan het ertikel niet versturen.\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "kan het artikel %d niet ophalen\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "kan groep niet instellen: %s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "ongeldig artikelbereik: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "geen nieuwe artikelen.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "artikel %d wordt verwijderd...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tAlle gebufferde artikelen worden verwijderd..." + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "Kan geen verbinding maken met de NNTP-server: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "protocolfout: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "protocolfout\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "Er is een fout opgetreden bij het versturen\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "Wachtwoord" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[geen gebruikersnaam]" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%sGeef alstublieft het wachtwoord voor:\n" +"\n" +" %.*s\n" +"(%.*s)\n" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "Slecht wachtwoord! Probeer opnieuw...\n" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "er is een fout opgetreden tijdens de identificatie\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "Er is geen APOP timestamp gevonden in de begroeting\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "APOP Timestamp in de begroeting is ongeldig\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "POP3 protocolfout\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Configuratie wordt ingelezen...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "%s gevonden\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Klaar met inlezen van de configuratie.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "opslaan van de configuratie is mislukt\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Configuratie is opgeslagen.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Toepassen" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Venster accountvoorkeuren wordt geopend...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Account%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Voorkeuren voor nieuw account" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Voorkeuren per account" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Venster accountvoorkeuren wordt geopend...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Algemeen" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Ontvangen" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Geavanceerd" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Naam van dit account" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Hoofdaccount" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Persoonlijke informatie" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Volledige naam" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "E-mail adres" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organisatie" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Serverinformatie" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normaal)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOP identificatie)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "Nieuws (NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Niets (lokaal)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "Nieuwsserver" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Server om van te ontvangen" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "SMTP server (om te verzenden)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "Gebruikersnaam" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Wachtwoord" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Verwijder berichten op de server wanneer ze worden opgehaald" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Haal alle berichten op" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "Haal berichten binnen wanneer de knop \"alles ophalen\" wordt gebruikt" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Filter de berichten bij het ophalen" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Header" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Voeg een door de gebruiker gespecificeerde header toe" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "Bewerken" + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Velden om automatisch in te vullen" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Antwoorden naar" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "Identificatie" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "SMTP identificatie (SMTP AUTH)" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "Identificatie met POP3 voor het verzenden" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Bestand met handtekening" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Eigen SMTP poort" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Eigen POP3 poort" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Geef domeinnaam" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "E-mail adres is niet ingevoerd." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "SMTP server is niet ingevoerd." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "Gebruikersnaam is niet ingevoerd." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "POP3 server is niet ingevoerd." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "IMAP4 server is niet ingevoerd." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "NNTP server is niet ingevoerd." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Venster algemene voorkeuren wordt aangemaakt...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Algemene voorkeuren" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Beeld" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filteren" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "Privacy" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Interface" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Diversen" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Extern programma" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Gebruik extern programma voor verwerking van de e-mail" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr "" + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr "" + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr "" + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "" + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "" + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "" + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "" + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "" + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "" + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "" + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "" + +#: src/summaryview.c:320 +msgid "M" +msgstr "" + +#: src/summaryview.c:320 +msgid "U" +msgstr "" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "" + +#: src/summaryview.c:350 +msgid "No." +msgstr "" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "" + +#: src/summaryview.c:673 +msgid "done." +msgstr "" + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "" + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr "" + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr "" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "" + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "" + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "" + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "" + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "" + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "" + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "" + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "" + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "" + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "" + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "" + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "" + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "" + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "" diff --git a/po/pt_BR.gmo b/po/pt_BR.gmo new file mode 100644 index 0000000000000000000000000000000000000000..b33ed9f78022bc108083e0aae936ce0fb5ce0bfa GIT binary patch literal 51165 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 S;vHwUi&Pf~WD3)_Wd0xSS8-_o literal 0 HcmV?d00001 diff --git a/po/pt_BR.po b/po/pt_BR.po new file mode 100644 index 000000000..ba49b5353 --- /dev/null +++ b/po/pt_BR.po @@ -0,0 +1,3808 @@ +# Portuguese translation of Sylpheed. +# Copyright (C) 2000 Free Software Foundation, Inc. +# André Casteliano <digitalcoder@users.sourceforge.net>, 2000. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2000-10-03\n" +"Last-Translator: André Casteliano <digitalcoder@users.sourceforge.net>\n" +"Language-Team: André Casteliano <digitalcoder@users.sourceforge.net> Isaías " +"V. Prestes <isix@uol.com.br>\n" +"Content-Type: text/plain; charset=iso-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" +"MIME-Exibirsion: 1.0\n" + +#: src/about.c:86 +msgid "About" +msgstr "Sobre" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"As partes usadas do fetchmail são Copyright 1997 por Eric S. Raymond. Estas " +"Partes são também Copyright de Carl Harris, 1993 e 1995. O Copyright é " +"protegido com o propósito de proteger a livre distribuição dos fontes.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"O suporte à MD5 é copyright da RSA Data Security, Inc. Veja os comentários " +"no início do módulo md5.c para os termos da licença.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"Kcc é copyright de Yasuhiro Tonooka <tonooka@msi.co.jp>, e libkcc é " +"copyright de takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"Este programa é software livre; pode redistribuí-lo ou modificá-lo de acordo " +"com os termos da GPL (GNU General Public License) publicada pela Free " +"Software Foundation; tanto a Exibirsão 2, ou (opcionalmente) qualquer " +"Exibirsão posterior.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"Este programa é distribuido com a esperança de que seja útil, mas SEM " +"NENHUMA GARANTIA; sem qualquer garantia implícita de COMERCIALIDADE ou " +"ADEQUAÇÃO PARA ALGUM PROPÓSITO PARTICULAR. Veja a GNU General public License " +"para maiores detalhes.\n" +"\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"Você deve ter recebido uma cópia da GNU general Public License junto com " +"este programa; caso não, escreva para a Free Software Foundation, Inc., 59 " +"Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "Aceitar" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Lendo as configurações de cada conta...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "Texto encontrado: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "Abrindo janela de edição de conta...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "Criando janela de edição de conta...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "Editar contas" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "Nome" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "Protocolo" + +#: src/account.c:382 +msgid "Server" +msgstr "Servidor" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Adicionar" + +#: src/account.c:407 +msgid "Edit" +msgstr "Editar" + +#: src/account.c:413 +msgid " Delete " +msgstr " Apagar " + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "Abaixo" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "Acima" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " Marcar como padrão " + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Fechar" + +#: src/account.c:498 +msgid "Delete account" +msgstr "Apagar conta" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "Você realmente deseja apagar esta conta?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "Sim" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+Não" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/_Arquivo" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/_Arquivo/Novo _endereço" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/_Arquivo/Novo _grupo" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/_Arquivo/Nova _pasta" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/_Arquivo/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/_Arquivo/_Editar" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/_Arquivo/_Apagar" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/_Arquivo/_Fechar" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/_Ajuda" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/_Ajuda/_Sobre" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/Novo _endereço" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/Novo _grupo" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/Nova _pasta" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/_Editar" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/_Apagar" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "Endereço de e-mail" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "Notas" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "Livro de endereços" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "Nome:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "Apagar" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "Procurar" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "Para:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "Cc:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "Bcc:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "Endereços comuns" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "Endereços pessoais" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "Apagar endereço(s)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "Apagar realmente o(s) endereço(s)?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "Não" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "Nova pasta" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "Digite o nome da nova pasta:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "NovaPasta" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "Este nome já existe." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "Novo grupo" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "Nome do novo grupo:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "NovoGrupo" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "Editar grupo" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "Nome do novo grupo:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "Editar pasta" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "Nome da nova pasta:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "Apagar realmente `%s' ?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "Editar endereço" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "Endereço" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "Cancelar" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Lendo livro de endereços..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s não existe.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "Pronto.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "Exportando livro de endereços..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "Falhou ao gravar o livro de endereços.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "Notificação" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "Aviso" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "Erro" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "Criando a tela de alerta...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "Falha ao alocar memória\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/_Adicionar" + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/_Remover" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/_Propriedades..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/_Arquivo/_Anexar arquivo" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/_Arquivo/_Inserir arquivo" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/_Arquivo/Inserir as_sinatura" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/_Editar/_Desfazer" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/_Editar/_Refazer" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/_Editar/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/_Editar/_Cortar" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/_Editar/C_opiar" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/_Editar/Co_lar" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/_Editar/_Selecionar tudo" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/_Editar/Quebrar linhas grandes" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/_Editar/Editar com editor e_xterno" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/_Mensagem" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/_Mensagem/_Enviar" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/_Mensagem/Enviar _depois" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/_Mensagem/Salvar na pasta rascunho" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/_Mensagem/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/_Mensagem/_Cc" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/_Mensagem/_Bcc" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/_Mensagem/_Responder" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/_Mensagem/_Anexar" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/_Ferramentas" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/_Ferramentas/E_xibir régua" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/_Ferramentas/_Livro de endereços" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "Não foi possível obter o texto\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: o arquivo não existe\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Começo da mensagem encaminhada:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "O arquivo %s não existe\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "Não foi possível especificar o tamanho de %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "O arquivo %s está vazio\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Mensagem: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr "[Editar]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - Compondo mensagem%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "Compondo mensagem%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "Destinatário não especificado." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "Armazenando" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"Ocorreu um erro ao enviar as mensagens.\n" +"Deseja por esta mensagem na 'Fila de Saída'?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "Não foi possível por a mensagem na fila." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "Ocorreu um erro ao enviar suas mensagens." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "Não foi possível armazenar a mensagem na caixa de saída." + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "Não foi possível modificar as permissões do arquivo\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "Não foi possível conExibirter o código de caracteres da mensagem." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "não foi possível escrever o cabeçalho\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "guardando mensagem enviada...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "não foi possível salvar a mensagem\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "não foi possível abrri o arquivo de marcas\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "Armazenando na fila de saída...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "Não foi possível por a mensagem na fila\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "Não foi possível abrir %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "Message-ID gerado: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "Tipo MIME" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "Tamanho" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "Criando janela de composição...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "De:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "Enviar" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "Enviar mensagem" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "Enviar depois" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "Por na 'fila de saída' e enviar depois" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "Rascunho" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Salvar na pasta Rascunho" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "Inserir" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "Inserir arquivo" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "Anexar" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "Anexar arquivo" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Assinatura" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "Inserir assinatura" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "Editor" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "Editar com um editor externo" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "Quebra de linha" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "Quebrar linhas grandes" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "Tipo MIME inválido." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "O arquivo não existe ou está vazio." + +#: src/compose.c:3022 +msgid "Property" +msgstr "Propriedades" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "Codificação" + +#: src/compose.c:3065 +msgid "Path" +msgstr "Caminho" + +#: src/compose.c:3066 +msgid "File name" +msgstr "Nome do arquivo" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "Linha de comando do editor externo é inválida: '%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"O editor externo está ativo.\n" +"Deseja matar o processo?\n" +"Id. do processo: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "Terminado processo id.: %d" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "Arquivo temporário: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "Compositor: entrada para monitorar processo\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "Não foi possível executar o editor externo\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "Não foi possível gravar o arquivo\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "Fallhou ao ler o pipe\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Selecionar arquivo" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "Descartar mensagem" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "Esta mensagem foi modificada. Deseja descartá-la ?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "Descartar" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "como rascunho" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Selecione uma pasta" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/Criar _nova pasta..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/_Renomear pasta..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/_Apagar pasta" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/_InscreExibir-se em um grupo..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/_Eliminar grupo" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/_Apagar servidor de notícias" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Pasta" + +#: src/folderview.c:234 +msgid "New" +msgstr "Nova" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "Não lido" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "Criando visualizador de pasta...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "Configurando informações da pasta...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "Configurando informações da pasta..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "Revisando pasta %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "Revisando pasta %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "" + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "Caixa de Entrada" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "Caixa de Saída" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "Fila de saída" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "Lixeira" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Pasta %s selecionada\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "`%c' não pode ser usado no nome da pasta." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "A pasta `%s' já existe." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Novo nome para `%s':" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Renomear pasta" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"Todas as pastas e mensagens sob `%s' serão apagados.\n" +"Confirma a exclusão?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "Apagar pasta" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "não foi possível excluir a pasta `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "InscreExibir-se num grupo de notícias" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "Nome do grupo de notícias:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "O grupo de notícias `%s' já existe." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "Realmente apagar o grupo de notícias `%s'?" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "Apagar grupo de notícias" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "Realmente apagar o servidor de notícias `%s'?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "Apagar servidor de notícias" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "Grupos de notícias:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "Assunto:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "Criando visualizador de cabeçalhos...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(Sem remetente)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(Sem assunto)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "Criando janela de cabeçalhos...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "Todos os cabeçalhos" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "Exibindo cabeçalhos de %s ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - Todos os cabeçalhos" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "Criando visualizador de imagem...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "Não foi possível carregar a imagem." + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "A conexão IMAP4 com %s:%d terminou. Reconectando...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "criando conexão IMAP4 com %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "a mensagem %d já está no cache.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "obtendo mensagem %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "pastas de origem e destino são idênticas.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "Movendo mensagem %s%c%d para %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "Não foi possível obter o 'envelope'\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "Ocorreu um erro ao obter 'envelope'\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "não foi possível realizar o parse no envelope: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "apagando mensagem %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tApagando todas as mensagens no cache... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "Não foi possível se conectar ao servidor IMAP4: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "Falha ao logar no servidor IMAP4.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "Importar" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "Importando arquivo:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Diretório de destino:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "Selecionar..." + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Selecionar arquivo a importar" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "Obtendo novas mensagens" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "Senha" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "obtendo novas mensagens da conta %s...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: Recuperando novas mensagens" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "Conectando ao servidor POP3: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "Não foi possível se conectar ao servidor POP3: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "Não foi possível se conectar ao servidor POP3: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "Autorizando" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "Obtendo o número de novas mensagens" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "Recuperando mensagem (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "Apagando mensagem" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Saindo" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "a mensagem não foi recibida\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "Ocorreu um erro enquanto as mensagens eram processadas." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "Não há espaço disponível no disco." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "não há mensagens no correio local.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "Obtendo novas mensagens de %s até %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "Criando janela de log...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "Log do protocolo" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"O arquivo `%s' já existe.\n" +"Não foi possível criar a pasta." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread não é suportada pela glib.\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "Ainda há mensagens sendo escritas. Deseja sair?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "" + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/_Arquivo/_Atualizar árvore de diretórios" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/_Arquivo/I_mportar arquivo mbox..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/_Arquivo/_Salvar como..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/_Arquivo/_Imprimir" + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/_Arquivo/Sai_r" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/_Editar/_Procurar" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/E_xibir" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/E_xibir/_Árvore de pastas" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/E_xibir/_Mensagens" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/E_xibir/_Barra de Ferramentas" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/E_xibir/_Barra de Ferramentas/Ícones _e texto" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/E_xibir/_Barra de Ferramentas/Í_cones" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/E_xibir/_Barra de Ferramentas/_Texto" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/E_xibir/_Barra de Ferramentas/_Ocultar" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/E_xibir/_Barra de status" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/E_xibir/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/E_xibir/Á_rvore de pastas separadas" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/E_xibir/Separar m_ensagens" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/E_xibir/Conjunto de ca_racteres" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/E_xibir/Conjunto de ca_racteres/_Autodetectar" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/E_xibir/Conjunto de ca_racteres/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/E_xibir/Conjunto de ca_racteres/ASCII de 7 bits (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/E_xibir/Conjunto de ca_racteres/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/E_xibir/Conjunto de ca_racteres/Europa Ocidental (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/E_xibir/Conjunto de ca_racteres/Europa Central (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/E_xibir/Conjunto de ca_racteres/_Báltico (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Báltico (ISO-8859-4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Grego (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Turco (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Cirílico (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Cirílico (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Cirílico (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Japonês (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês simplificado (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês tradicional (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês tradicional (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Chinês (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Coreano (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/E_xibir/_Conjunto de ca_racteres/Coreano (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/_Mensagem/Rec_eber novas mensagens" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/_Mensagem/Receber de _todas as contas" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/_Mensagem/Enviar mensa_gens da Fila" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/_Mensagem/Escrever _nova mensagem" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/_Mensagem/_Responder" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/Mensagem/Responder a t_odos" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/_Mensagem/Encam_inhar" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/_Mensagem/Encaminhar como ane_xo" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/_Mensagem/Mo_ver..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/_Mensagem/_Apagar" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/_Mensagem/_Marcar" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/_Mensagem/_Marcar/_Marcar" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/_Mensagem/_Marcar/_Desmarcar" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/_Mensagem/_Marcar/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/_Mensagem/_Marcar/Marcar como _não lida" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/_Mensagem/_Marcar/Marcar como _lida" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/_Mensagem/Abrir numa nova _janela" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/_Mensagem/Mo_strar todos os cabeçalhos" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/_Mensagem/Re-e_ditar" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/_Resumo" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/_Resumo/_Apagar Mensagens duplicadas" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/_Resumo/_Filtrar Mensagens" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/_Resumo/_Executar" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/_Resumo/A_tualizar" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/_Resumo/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/_Resumo/Mensagem a_nterior" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/_Resumo/_Próxima mensagem" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/_Resumo/Próxima não _lida" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/_Resumo/_Ir para outra pasta" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/_Resumo/_Ordenar" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/_Resumo/_Ordenar/Ordenar por _número" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/_Resumo/_Ordenar/Ordenar por _tamanho" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/_Resumo/_Ordenar/Ordenar por _data" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/_Resumo/_Ordenar/Ordenar por _remetente" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/_Resumo/_Ordenar/Ordenar por as_sunto" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/_Resumo/_Ordenar/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/_Resumo/_Ordenar/Atrair _por assunto" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/_Resumo/_Visualização hierárquica" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/_Resumo/Visualização nor_mal" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/_Resumo/Elementos _visíveis..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/_Ferramentas/_Janela de log" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/_Configuração" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/_Configuração/_Preferências comuns..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/_Configuração/Preferências por _conta..." + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/_Configuração/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/_Configuração/Criar uma _nova conta..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/_Configuração/_Editar contas..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/_Configuração/_Mudar conta atual" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/_Ajuda/_Manual" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/_Ajuda/_Manual/_Inglês" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/_Ajuda/_Manual/_Japonês" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/_Ajuda/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "Criando janela principal...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "MainWindow: falhou ao alocar cores %d\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "Sem título" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "nenhuma" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "Conta atual: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "posição da janela: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "" + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "Correio" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "Configurando widgets..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Obter" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Incorporar mensagens novas" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "Obter tudo" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Incorporar novas mensagens de todas as contas" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "Enviar Mensagem(s) da fila" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "Escrever" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "Escrever nova mensagem" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "Responder" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "Responder à Mensagem" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "Responder para todos" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Encaminhar" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Encaminhar a mensagem" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "Apagar a mensagem" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Executar" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Executar os processos marcados" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "Próxima mensagem não lida" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Preferências" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "Preferências comuns" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "Conta" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "Preferências da conta" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Sair" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "Sair do programa?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "Falhou enviando mensagens da fila." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "conjunto de caracteres forçado: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "Obtendo Mensagens de %s até %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "não foi possível ler o arquivo mbox.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "formato de mbox inválido: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "mbox corrompida: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "não foi possível abrir o arquivo temporário\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"Encontrado De sem codificar:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "não é possível gravar no arquivo temporário\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "%d mensagens encontradas.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "não foi possível criar o arquivo de trava %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "usar 'flock' em vez de 'file' se for possível.\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "não foi possível criar %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "o correio está sendo usado por outro processo, aguardando...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "não foi possível travar %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "tipo de trava inválido\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "não foi possível destravar %s\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "não foi possível zerar o mailbox.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "Criando visualizador de mensagem...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "não foi possível copiar a mensagem %s para %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "Não foi possível abrir o arquivo de marcas.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "" + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "Último número no diretório %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tProcurando mensagens não cacheadas..." + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "Encontrada(s) %d mensagen(s) não cacheada(s).\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tOrdenando mensagens não cacheadas numericamente..." + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/_Abrir" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/E_xibir como texto" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/_Salvar como..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "Tipo MIME" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "Criando visualizador de MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "Não foi possível obter alguma(s) parte(s) dessa mensagem." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "Não foi possível gravar alguma(s) parte(s) dessa mensagem" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Salvar como" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Sobrescrever" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "Sobrescrever o arquivo existente?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "O comando do visualizador MIME é inválido: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "criando conexão NNTP com %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "A conexão NNTP com %s:%d terminou. Reconectando...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "o artigo %d já está no cache.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "obtendo artigo %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "não foi possível ler o artigo %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "não foi possível obter o artigo %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "não foi possível estabelecer o grupo: %s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "intervalo de artigos inválido: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "não há novos artigos.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "obtendo xover %d - %d en %s...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "não foi possível obter xover\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "ocorreu um erro ao obter xover.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "linha xover inválida: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "apagando artigo %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tApagando artigos em cache... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "Não foi possível se conectar com o servidor NNTP: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "erro do protocolo: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "erro do protocolo\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "ocorreu um erro na autorização\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "APOP não encontrado\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "Erro de sintaxe no greeting\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "Erro do protocolo POP3\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Lendo configuração...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "Encontrado %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "Terminada a leitura da configuração.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "falhou ao gravar a configuração no arquivo\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "Configuração salva.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Aplicar" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "Abrindo janela de preferências da conta...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "Conta%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "Preferências para a nova conta" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Preferências da conta" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "Criando janela de preferências da conta...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "Básicas" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "Receber" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "Avançadas" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "Nome desta conta" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "Uso habitual" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "Informações pessoais" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "Nome completo" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "Endereço de e-mail" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "Organização" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "Informações do servidor" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (normal)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (autoriz. APOP)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "Nenhuma (local)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "Servidor de recepção" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "Servidor SMTP (envio)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "Usuario" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "Senha" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Ao receber, eliminar a(s) mensagem(ns) do servidor" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "Receber todas as mensagens" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "Receber de todas as contas" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "Filtrar mensagens ao receber" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Cabeçalho" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Adicionar campo de data" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Gerar Message-ID" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Adicionar cabeçalho do usuário" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr " Editar... " + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "Estabelecer os seguintes endereços" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "Cc" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "Bcc" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "Responder" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Arquivo de assinatura" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "Porta SMTP" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "Porta POP3" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "Nome do domínio" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "Endereço de e-mail não especificado." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "Servidor SMTP não especificado." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "Usuário não especificado." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "Servidor POP3 não especificado." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "Servidor IMAP4 não especificado." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "Servidor NNTP não especificado." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "Criando janela de preferências comuns...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "Preferências comuns" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Exibir" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "Filtrando" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "Interface" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "Outros" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Programa externo" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "Usar um programa externo para obter mensagens" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "Caminho e nome do programa" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "Spool local" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "Incorporar do spool" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Filtrar ao incorporar" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Diretório de spool" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "Checar nova mensagem" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "cada" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "minuto(s)" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "Checar o correio quando iniciar" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "Nova" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "Usar programa externo para enviar" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "Salvar mensagens enviadas na Caixa de saída" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "Por na fila os e-mails que falharam" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "Conjunto de caracteres para enviar" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "Automático" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "ASCII de 7 bits (US-ASC_II)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Europeu Ocidental (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "Europeu Central (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "Báltico (ISO-8859-4)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "Báltico (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "Grego (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "Turco (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cirílico (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "Cirílico (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "Cirílico (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "Cirílico (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "Japonês (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "Japonês (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "Japonês (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "Chinês simplificado (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "Chinês tradicional (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "Chinês tradicional (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "Chinês (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Coreano (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "Citação (quote)" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "Quotar mensagem ao responder" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "Marca de citação" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "Formato da citação:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " Descrição dos símbolos " + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "Inserir assinatura automaticamente" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Separador de assinatura" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "Quebrar mensagens em" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "caracteres" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "Quebrar quote" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "Quebrar antes de enviar" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "Regras registradas" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "Operador" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(nenhuma)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "Palavra" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "Predicado" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "contém" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "não contém" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Destino" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "Usar exp.reg." + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "Não receber" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "Registrar" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr " Sustituir " + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "Fonte" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Mensagem" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "Permitir cores na mensagem" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "Exibir alfabetos de 2-bytes com caracteres de 1-byte" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "Cabeçalhos pequenos na visualização da mensagem" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Linha de espaço" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "pixel(s)" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "Deixar espaço do cabeçalho" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "Traduzir cabeçalhos (como `De:', `Assunto:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Mostrar remetente na coluna `De' se ele for o mesmo" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr " Elementos visíveis no cabeçalho... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "Emular o comportamento do mouse como no Emacs" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "Abrir a primeira mensagem não lida ao abrir uma pasta" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "Ao sair" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Confirmar ao sair" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Visualizador web externo (%s será sustituido pela URL)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "Comando" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "Impressão (%s será sustituido pelo nome do arquivo)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Editor externo (%s será sustituido pelo nome do arquivo)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "Descrição dos símbolos" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"Data\n" +"De\n" +"Nome completo do remetente\n" +"Primeiro nome do remetente\n" +"Inicial do remetente\n" +"Assunto\n" +"Para\n" +"Message-ID\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Lendo configuração dos filtros...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "Gravando configuração dos filtros...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(Novo)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Destinatário não especificado." + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Nome de cabeçalho não estabelecido" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "Apagar regra" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "Quer realmente apagar esta regra?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "Indicar elemento visual" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "Marca" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "Número" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "Data" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "De" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "Assunto" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "Seleção de fonte" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "DomSegTerQuaQuiSexSab" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Falha ao converter conjunto de caracteres\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tNão há arquivo de cache\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tLendo cache de cabeçalhos..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "A versão em cache é diferente. Descartando-a.\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tMarcando as mensagens..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d nova(s) mensagem(ns)\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "Arquivo de marcas não encontrado.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "Versão de marca diferente (%d != %d). Discartando-a.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "Não foi possível abrir o arquivo de marcas para adição.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "Não foi possível abrir o arquivo de marcas para gravação.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "Falhou ao enviar as mensagens da fila.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "O comando de impressão é inválido: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "Criando diálogo de progresso...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "ocorreu um erro enquanto se obtiam os dados.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "Não foi possível gravar no arquivo.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "Mensagem da fila com cabeçalho corrompido.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "Conectando com o servidor SMTP: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "Não foi possível se conectar com o servidor SMTP: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "Ocorreu um erro enviando HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "Procurar" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "Maiús./minús." + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "Procurar para trás" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Limpar" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "Erro na procura" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "String não encontrada." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Chegou no princípio da lista; seguir até o final?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Chegou no fim da lista; procurar no começo?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "Procura concluída" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/_Mover..." + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/_Copiar..." + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/E_xecutar" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/_Marcar" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/_Marcar/_Marcar" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/_Marcar/_Desmarcar" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/_Marcar/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/_Marcar/Marcar como _não lida" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/_Marcar/Marcar como _lida" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/_Responder" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "Responder para todos" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/En_caminhar" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Encaminhar como anexo" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/Abrir numa n_ova janela" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Mostrar todos os cabeçalhos" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/Re_editar" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/_Imprimir..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/_Selecionar tudo" + +#: src/summaryview.c:320 +msgid "M" +msgstr "x" + +#: src/summaryview.c:320 +msgid "U" +msgstr "N" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "Criando visualizador de cabeçalhos...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "No." + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "Procesar marcas" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "Algumas marcas estão erradas. Processá-las?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"pasta vazia\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "Revisando pasta (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "concluído." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "Não há mensagens não lidas" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "Não há mensagens não lidas. Ir para a próxima pasta?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "Agrupando mensagens por assunto..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d apagadas" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d movidas" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " item(ns) selecionado(s)" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d novas, %d não lidas, %d no total (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d novas, %d não lidas, %d no total" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "Ordenando cabeçalhos..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tExtraindo cabeçalhos das mensagens..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "Resumindo as mensagens..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "Gravando cache de resumo (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(Sem data)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Mensagem %d marcada\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Mensagem %d marcada como lida\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Mensagem %d marcada como não lida\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Mensagem %s/%d marcada para deleção\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "A pasta atual é a lixeira." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "Apagando mensagens duplicadas..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Mensagem %s/%d desmarcada\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Mensagem %d marcada para mover para %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "O destino é o mesmo que a pasta atual." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "Selecionando todas as mensagens" + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "Imprimir" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"Digite o comando de impressão:\n" +"(`%s' será sustituído pelo arquivo)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"O comando de impressão é inválido:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "Construindo a hierarquia..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "Desfazendo a hierarquia..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "Desfazendo a hierarquia para a execução..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "filtrando..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "Filtrando..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "Ir para %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "Criando visualização do texto...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "Para salvar esta parte, abra o menu contextual com o\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"botão direito e selecione `Salvar como...', ou tecle `y'.\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "Para ver esta parte como uma mensagem de texto, selecione\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`Exibir como texto', ou tecle `t'.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "Para abrir esta parte com um programa externo selecione `Abrir',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "ou duplo-click, ou clique com o botão do meio, ou tecle `l'." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "Erro ao gravar em %s.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "O comando de abertura de URI é inválido: `%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/_Resumo/_Selecionar todos" + +#~ msgid "Clean trash" +#~ msgstr "Limpar lixeira" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/_Marcar/Marcar como _importante" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: falhou ao alocar cores\n" + +#~ msgid "*** Warning: code conversion failed ***\n" +#~ msgstr "*** Warning: Erro ao converter conjunto de caracteres ***\n" + +#~ msgid "can't set mailbox: %s\n" +#~ msgstr "Não foi possível especificar o correio: %s\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "Tipo MIME inválido\n" + +#~ msgid "Reply-To:" +#~ msgstr "Responder para:" + +#~ msgid "%s - Compose message [Edited]" +#~ msgstr "%s - Compondo mensagem [Editada]" + +#~ msgid "/_Add news server" +#~ msgstr "/_Adicionar servidor de notícias" + +#~ msgid "deleting folder %s ...\n" +#~ msgstr "apagando pasta %s ...\n" + +#~ msgid "deleting newsgroup %s ...\n" +#~ msgstr "apagando grupo de notícias %s ...\n" + +#~ msgid "Input adding news server:" +#~ msgstr "Nome do servidor de notícias:" + +#~ msgid "The news server `%s' already exists." +#~ msgstr "O servidor de notícias `%s' já existe." + +#~ msgid "deleting cache folder of %s ...\n" +#~ msgstr "apagando pasta de cache %s ...\n" + +#~ msgid "IMAP login command is invalid.\n" +#~ msgstr "Comando IMAP de login inválido.\n" + +#~ msgid "Next unread" +#~ msgstr "Próxima não lida" + +#~ msgid "Previously selected folder: %s\n" +#~ msgstr "Pasta selecionada anteriormente: %s\n" + +#~ msgid "New directory" +#~ msgstr "Novo diretório" + +#~ msgid "The directory not found. Create it?" +#~ msgstr "Diretório não encontrado. Criá-lo?" + +#~ msgid "Can't create directory." +#~ msgstr "Não foi possível criar o diretório." + +#~ msgid "Selected name isn't a directory." +#~ msgstr "O nome selecionado não é um diretório." + +#~ msgid "Writing mail folder list..." +#~ msgstr "Gravando lista de pastas de correio..." + +#~ msgid "Writing imap folder list..." +#~ msgstr "Gravando lista de pastas imap..." + +#~ msgid "Writing news folder list..." +#~ msgstr "Gravando lista das pastas de notícias..." + +#~ msgid "Reading folder %s ..." +#~ msgstr "Lendo pasta %s ..." + +#~ msgid "Mail Server (IMAP4)" +#~ msgstr "Servidor de Correio (IMAP4)" + +#~ msgid "NetNews" +#~ msgstr "Notícias" + +#~ msgid "reading folder list %s ..." +#~ msgstr "lendo lista de pastas %s ..." + +#~ msgid "Broken folder list cache.\n" +#~ msgstr "Cache da lista de pastas corrompido.\n" + +#~ msgid "Select destination directory" +#~ msgstr "Selecionar diretório de destino" + +#~ msgid "can't drop message into %s\n" +#~ msgstr "não foi possível guardar a mensagem em %s\n" + +#~ msgid "%s exists\n" +#~ msgstr "%s existe\n" + +#~ msgid "can't move tmpmsg to %s\n" +#~ msgstr "não foi possível renomear tmpmsg para %s\n" + +#~ msgid "IMAP session is not established\n" +#~ msgstr "sesão IMAP não establecida\n" + +#~ msgid "news session is not established\n" +#~ msgstr "sessão de notícias não establecida\n" + +#~ msgid "Unlinking message %s in trash...\n" +#~ msgstr "Eliminando mensagem %s da lixeira...\n" + +#~ msgid "Connecting to %s ..." +#~ msgstr "Conectando-se com %s ..." + +#~ msgid "Enable thread view on summary" +#~ msgstr "Habilitar visualização hierárquica dos cabeçalhos" + +#~ msgid "Not yet implemented." +#~ msgstr "Não implementado." + +#~ msgid "/_Sumary/Unsele_ct all" +#~ msgstr "/_Resumo/_Deselecionar todos" + +#~ msgid "" +#~ "Date\n" +#~ "from\n" +#~ "Subject\n" +#~ "To\n" +#~ "Message-ID\n" +#~ "%" +#~ msgstr "" +#~ "Data\n" +#~ "de\n" +#~ "Assunto\n" +#~ "Para\n" +#~ "Message-ID\n" +#~ "%" + +#~ msgid "Printing" +#~ msgstr "Imprimindo" + +#~ msgid "/_Mark/Mark _all" +#~ msgstr "/_Marcar/_Marcar todos" + +#~ msgid "/_Mark/U_nmark all" +#~ msgstr "/_Marcar/Desmarca_r todos" + +#~ msgid "/_Mark/M_ove marked" +#~ msgstr "/_Marcar/_Mover marcados" + +#~ msgid "/_Mark/_Delete marked" +#~ msgstr "/_Marcar/A_pagar marcados" + +#~ msgid "Invalid month\n" +#~ msgstr "Mês inválido\n" + +#~ msgid "/U_nselect all" +#~ msgstr "/_Deselecionar tudo" + +#~ msgid "/_Message/Reply with _quotation" +#~ msgstr "/_Mensagem/Responder com _citação" + +#~ msgid "/Reply with _quotation" +#~ msgstr "/Responder com _citação" + +#~ msgid "queueing message that failed to send...\n" +#~ msgstr "Movendo mensagens que falharam para a fila...\n" diff --git a/po/ru.gmo b/po/ru.gmo new file mode 100644 index 0000000000000000000000000000000000000000..c6b771fc6122fa906f0e87d9e96a319314bc2759 GIT binary patch literal 58404 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 literal 0 HcmV?d00001 diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 000000000..4bbb671dc --- /dev/null +++ b/po/ru.po @@ -0,0 +1,3670 @@ +# Russian translation for Sylpheed +# Copyright (C) 2001 Free Software Foundation, Inc. +# First version by Aleksey Novodvorsky <aen@logic.ru>, 2001. +# Updated by Sergey Vlasov <vsu@mivlgu.murom.ru>, 2001. +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2001-03-26 18:08+04:00\n" +"Last-Translator: Sergey Vlasov <vsu@mivlgu.murom.ru>\n" +"Language-Team: Russian <ru@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=koi8-r\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "ï ÐÒÏÇÒÁÍÍÅ" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" +"éÓÐÏÌØÚÏ×ÁÎÁ ÞÁÓÔØ ËÏÄÁ ÉÚ fetchmail, Copyright 1997 by Eric S. Raymond. " +"éÓÐÏÌØÚÏ×ÁÎ ÔÁËÖÅ ËÏÄ Carl Harris, 1993 É 1995. ðÒÁ×Á ÓÏÈÒÁÎÅÎÙ ÄÌÑ ÚÁÝÉÔÙ " +"Ó×ÏÂÏÄÎÏÇÏ ÒÁÓÐÒÏÓÔÒÁÎÅÎÉÑ ÉÓÈÏÄÎÙÈ ÔÅËÓÔÏ× ÐÒÏÇÒÁÍÍÙ.\n" +"\n" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" +"ðÒÁ×ÁÍÉ ÎÁ ËÏÄÉÒÏ×ÁÎÉÅ MD5 ÏÂÌÁÄÁÅÔ RSA Data Security, Inc. ï ÕÓÌÏ×ÉÑÈ " +"ÌÉÃÅÎÚÉÒÏ×ÁÎÉÑ ÓÍ. ËÏÍÍÅÎÔÁÒÉÊ × ÚÁÇÏÌÏ×ËÅ ÍÏÄÕÌÑ md5.c.\n" +"\n" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" +"ðÒÁ×Á ÎÁ Kcc ÐÒÉÎÁÄÌÅÖÁÔ Yasuhiro Tonooka <tonooka@msi.co.jp>, Á ÎÁ libkcc - " +"takeshi@SoftAgency.co.jp.\n" +"\n" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" +"ðÒÁ×Á ÎÁ GPGME ÐÒÉÎÁÄÌÅÖÁÔ Werner Koch <dd9jn@gnu.org>, 2001 ÇÏÄ\n" +"\n" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" +"üÔÁ ÐÒÏÇÒÁÍÍÁ Ñ×ÌÑÅÔÓÑ Ó×ÏÂÏÄÎÏÊ; ÷Ù ÍÏÖÅÔÅ ÅÅ ÒÁÓÐÒÏÓÔÒÁÎÑÔØ É/ÉÌÉ " +"ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ ÎÁ ÕÓÌÏ×ÉÑÈ õÎÉ×ÅÒÓÁÌØÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ÌÉÃÅÎÚÉÉ GNU, " +"ÏÐÕÂÌÉËÏ×ÁÎÎÏÊ Free Software Foundation; ×ÅÒÓÉÅÊ 2 ÉÌÉ (ÎÁ ÷ÁÛÅ ÕÓÍÏÔÒÅÎÉÅ) " +"ÂÏÌÅÅ ÐÏÚÄÎÅÊ ×ÅÒÓÉÅÊ.\n" +"\n" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" +"üÔÁ ÐÒÏÇÒÁÍÍÁ ÒÁÓÐÒÏÓÔÒÁÎÑÅÔÓÑ × ÎÁÄÅÖÄÅ, ÞÔÏ ÏÎÁ ÂÕÄÅÔ ÐÏÌÅÚÎÏÊ, ÎÏ âåú " +"÷óñëéè çáòáîôéê; ÄÁÖÅ ÂÅÚ ÎÅÑ×ÎÙÈ ÇÁÒÁÎÔÉÊ ÐÏ ôï÷áòîïíõ óïóôïñîéà ÉÌÉ " +"ðòéçïäîïóôé äìñ ïðòåäåìåîîùè ãåìåê. þÉÔÁÊÔÅ õÎÉ×ÅÒÓÁÌØÎÕÀ ïÂÝÅÓÔ×ÅÎÎÕÀ " +"ÌÉÃÅÎÚÉÀ GNU, ÅÓÌÉ ÈÏÔÉÔe ÕÚÎÁÔØ ÄÅÔÁÌÉ.\n" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" +"÷ÍÅÓÔÅ Ó ÜÔÏÊ ÐÒÏÇÒÁÍÍÏÊ ÷Ù ÄÏÌÖÎÙ ÐÏÌÕÞÉÔØ ËÏÐÉÀ õÎÉ×ÅÒÓÁÌØÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ " +"ÌÉÃÅÎÚÉÉ GNU; ÅÓÌÉ ÜÔÏÇÏ ÎÅ ÓÌÕÞÉÌÏÓØ, -- ÎÁÐÉÛÉÔÅ × Free Software " +"Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "OK" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "þÔÅÎÉÅ ÎÁÓÔÒÏÅË ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "îÁÊÄÅÎÁ ÍÅÔËÁ: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"îÅËÏÔÏÒÙÅ ÏËÎÁ Ó ÎÅÏÔÐÒÁ×ÌÅÎÎÙÍÉ ÐÉÓØÍÁÍÉ ÏÔËÒÙÔÙ.\n" +"ðÏÖÁÌÕÊÓÔÁ, ÚÁËÒÏÊÔÅ ÉÈ ÐÅÒÅÄ ÉÚÍÅÎÅÎÉÅÍ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ." + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "ïÔËÒÙ×ÁÅÔÓÑ ÏËÎÏ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "óÏÚÄÁÅÔÓÑ ÏËÎÏ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "éÚÍÅÎÅÎÉÅ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "éÍÑ" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "ðÒÏÔÏËÏÌ" + +#: src/account.c:382 +msgid "Server" +msgstr "óÅÒ×ÅÒ" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "äÏÂÁ×ÉÔØ" + +#: src/account.c:407 +msgid "Edit" +msgstr "éÚÍÅÎÉÔØ" + +#: src/account.c:413 +msgid " Delete " +msgstr "õÄÁÌÉÔØ" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "÷ÎÉÚ" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "÷×ÅÒÈ" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr " ïÂßÑ×ÉÔØ ÕÍÁÌÞÉ×ÁÅÍÏÊ ÕÞÅÔÎÏÊ ÚÁÐÉÓØÀ " + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "úÁËÒÙÔØ" + +#: src/account.c:498 +msgid "Delete account" +msgstr "õÄÁÌÉÔØ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÜÔÕ ÚÁÐÉÓØ?" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "äÁ" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+îÅÔ" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/æÁÊÌ" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/æÁÊÌ/îÏ×ÙÊ ÁÄÒÅÓ" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/æÁÊÌ/îÏ×ÁÑ ÇÒÕÐÐÁ" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/æÁÊÌ/îÏ×ÁÑ ÐÁÐËÁ" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/æÁÊÌ/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/æÁÊÌ/ðÒÁ×ËÁ" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/æÁÊÌ/õÄÁÌÉÔØ" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/æÁÊÌ/úÁËÒÙÔØ" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/óÐÒÁ×ËÁ" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/óÐÒÁ×ËÁ/ï ÐÒÏÇÒÁÍÍÅ" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/îÏ×ÙÊ ÁÄÒÅÓ" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/îÏ×ÁÑ ÇÒÕÐÐÁ" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/îÏ×ÁÑ ÐÁÐËÁ" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/òÅÄÁËÔÉÒÏ×ÁÔØ" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/õÄÁÌÉÔØ" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "üÌÅËÔÒÏÎÎÙÊ ÁÄÒÅÓ" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "ðÒÉÍÅÞÁÎÉÅ" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "áÄÒÅÓÎÁÑ ËÎÉÇÁ" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "éÍÑ:" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "õÄÁÌÉÔØ" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "îÁÊÔÉ" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "ëÏÍÕ:" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "ëÏÐÉÑ:" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "óËÒÙÔÎÏ:" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "áÄÒÅÓÁ ÏÒÇÁÎÉÚÁÃÉÊ" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "ìÉÞÎÙÅ ÁÄÒÅÓÁ" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "õÄÁÌÉÔØ ÁÄÒÅÓ(Á)" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ ÁÄÒÅÓ(Á)?" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "îÅÔ" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "îÏ×ÁÑ ÐÁÐËÁ" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÎÏ×ÏÊ ÐÁÐËÉ:" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "îÏ×ÁÑðÁÐËÁ" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "üÔÏ ÉÍÑ ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "îÏ×ÁÑ ÇÒÕÐÐÁ" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "÷×ÅÄÉÔÅ ÉÍÑ ÎÏ×ÏÊ ÇÒÕÐÐÙ:" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "îÏ×ÁÑçÒÕÐÐÁ" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "éÚÍÅÎÉÔØ ÉÍÑ ÇÒÕÐÐÙ" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÇÒÕÐÐÙ:" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "éÚÍÅÎÉÔØ ÉÍÑ ÐÁÐËÉ" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÐÁÐËÉ:" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ `%s' ?" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "éÚÍÅÎÉÔØ ÁÄÒÅÓ" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "áÄÒÅÓ" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "ïÔÍÅÎÉÔØ" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "úÁÇÒÕÚËÁ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s ÎÅ ÎÁÊÄÅÎ.\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "×ÙÐÏÌÎÅÎÏ.\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "úÁÐÉÓØ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ × ÆÁÊÌ..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ÄÁÎÎÙÈ ÁÄÒÅÓÎÏÊ ËÎÉÇÉ.\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "õ×ÅÄÏÍÌÅÎÉÅ" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "ðÒÅÄÕÐÒÅÖÄÅÎÉÅ" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "ïÛÉÂËÁ" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÐÒÅÄÕÐÒÅÖÄÅÎÉÑ...\n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "ÏÛÉÂËÁ ÐÒÉ ×ÙÄÅÌÅÎÉÉ ÐÁÍÑÔÉ\n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/äÏÂÁ×ÉÔØ..." + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/õÄÁÌÉÔØ" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/îÁÓÔÒÏÊËÉ..." + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/æÁÊÌ/ðÒÉÓÏÅÄÉÎÉÔØ ÆÁÊÌ" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/æÁÊÌ/÷ÓÔÁ×ÉÔØ ÆÁÊÌ" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/æÁÊÌ/äÏÂÁ×ÉÔØ ÐÏÄÐÉÓØ" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/ðÒÁ×ËÁ/ïÔËÁÔ" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/ðÒÁ×ËÁ/ïÔËÁÔ ÏÔËÁÔÁ" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/ðÒÁ×ËÁ/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/ðÒÁ×ËÁ/÷ÙÒÅÚÁÔØ" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/ðÒÁ×ËÁ/ëÏÐÉÒÏ×ÁÔØ" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/ðÒÁ×ËÁ/÷ÓÔÁ×ÉÔØ" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/ðÒÁ×ËÁ/÷ÙÄÅÌÉÔØ ×ÓÅ" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/ðÒÁ×ËÁ/ðÅÒÅÎÅÓÔÉ ÓÔÒÏËÉ" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/ðÒÁ×ËÁ/÷ÙÚ×ÁÔØ ×ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/ðÉÓØÍÏ" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/ðÉÓØÍÏ/ïÔÐÒÁ×ÉÔØ" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/ðÉÓØÍÏ/ïÔÐÒÁ×ÉÔØ ÐÏÚÖÅ" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/ðÉÓØÍÏ/óÏÈÒÁÎÉÔØ × ÐÁÐËÅ ÞÅÒÎÏ×ÉËÏ×" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/ðÉÓØÍÏ/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/ðÉÓØÍÏ/ëÏÍÕ" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/ðÉÓØÍÏ/ëÏÐÉÑ" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/ðÉÓØÍÏ/óËÒÙÔÎÏ" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/ðÉÓØÍÏ/ïÂÒÁÔÎÙÊ ÁÄÒÅÓ" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "/ðÉÓØÍÏ/ïÔ×ÅÞÁÔØ × ÇÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "ðÉÓØÍÏ/ðÒÉÌÏÖÅÎÉÅ" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "ðÉÓØÍÏ/ûÉÆÒÏ×ÁÔØ" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/éÎÓÔÒÕÍÅÎÔÙ" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/éÎÓÔÒÕÍÅÎÔÙ/ðÏËÁÚÁÔØ ÌÉÎÅÊËÕ" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/éÎÓÔÒÕÍÅÎÔÙ/áÄÒÅÓÎÁÑ ËÎÉÇÁ" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "ïÛÉÂËÁ ××ÏÄÁ ÞÁÓÔÉ ÔÅËÓÔÁ\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: ÆÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"îÁÞÁÌÏ ÐÅÒÅÓÙÌÁÅÍÏÇÏ ÓÏÏÂÝÅÎÉÑ:\n" +"\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "æÁÊÌ %s ÎÅ ÎÁÊÄÅÎ\n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "ïÛÉÂËÁ ÏÐÒÅÄÅÌÅÎÉÑ ÒÁÚÍÅÒÁ ÆÁÊÌÁ %s\n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "æÁÊÌ %s ÐÕÓÔÏÊ\n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "ðÉÓØÍÏ: %s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [éÚÍÅÎÅÎÏ]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - ðÏÄÇÏÔÏ×ËÁ ÐÉÓØÍÁ%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "ðÏÄÇÏÔÏ×ËÁ ÐÉÓØÍÁ%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "ðÏÌÕÞÁÔÅÌØ ÐÉÓØÍÁ ÎÅ ÕËÁÚÁÎ." + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "ÏÛÉÂËÁ ÏÐÒÅÄÅÌÅÎÉÑ ÓÐÉÓËÁ ÐÏÌÕÞÁÔÅÌÅÊ." + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"õÞÅÔÎÁÑ ÚÁÐÉÓØ ÄÌÑ ÏÔÐÒÁ×ËÉ ÐÉÓØÍÁ ÎÅ ÏÐÒÅÄÅÌÅÎÁ.\n" +"ðÏÖÁÌÕÊÓÔÁ, ×ÙÂÅÒÉÔÅ ÅÅ ÐÅÒÅÄ ÏÔÐÒÁ×ËÏÊ." + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÓÏÏÂÝÅÎÉÑ ÎÁ %s ." + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "÷ ÏÞÅÒÅÄØ" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÉÓØÍÁ.\n" +"ðÏÍÅÓÔÉÔØ ÅÇÏ × ÏÞÅÒÅÄØ?" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "ïÛÉÂËÁ ÐÏÓÔÁÎÏ×ËÉ × ÏÞÅÒÅÄØ." + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÐÏÓÙÌËÅ ÐÉÓØÍÁ." + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "ïÛÉÂËÁ ÓÏÈÒÁÎÅÎÉÑ ÐÉÓØÍÁ × ÐÁÐËÅ ÏÔÐÒÁ×ÌÅÎÎÙÈ." + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÉÚÍÅÎÉÔØ Ó×ÏÊÓÔ×Á ÆÁÊÌÁ\n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "îÅ ÕÄÁÌÏÓØ ÉÚÍÅÎÉÔØ ËÏÄÉÒÏ×ËÕ ÜÔÏÇÏ ÐÉÓØÍÁ." + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ÚÁÇÏÌÏ×ËÏ×\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "ÓÏÈÒÁÎÅÎÉÅ ÏÔÐÒÁ×ÌÅÎÎÏÇÏ ÐÉÓØÍÁ...\n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÈÒÁÎÉÔØ ÐÉÓØÍÏ\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "ÏÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ ÐÏÍÅÔÏË\n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "ÐÏÓÔÁÎÏ×ËÁ ÐÉÓØÍÁ × ÏÞÅÒÅÄØ...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "ÏÛÉÂËÁ ÒÁÚÍÅÝÅÎÉÑ × ÏÞÅÒÅÄÉ\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "ïÛÉÂËÁ ÏÔËÒÙÔÉÑ ÆÁÊÌÁ %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "ÓÏÚÄÁÎ Message-ID: %s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "ôÉÐ MIME" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "òÁÚÍÅÒ" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÐÏÄÇÏÔÏ×ËÉ ÐÉÓØÍÁ...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "ïÔ:" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "ïÔÐÒÁ×ÉÔØ" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "ïÔÐÒÁ×ÉÔØ ÐÉÓØÍÏ" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "ïÔÐÒÁ×ÉÔØ ÐÏÚÖÅ" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "ðÏÍÅÓÔÉÔØ × ÏÞÅÒÅÄØ É ÏÔÐÒÁ×ÉÔØ ÐÏÚÖÅ" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "þÅÒÎÏ×ÉËÉ" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "óÏÈÒÁÎÉÔØ × ÐÁÐËÅ ÞÅÒÎÏ×ÉËÏ×" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "÷ÓÔÁ×ÉÔØ" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "÷ÓÔÁ×ÉÔØ ÆÁÊÌ" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "ðÒÉÌÏÖÅÎÉÅ" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "ðÒÉÌÏÖÉÔØ ÆÁÊÌ" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "ðÏÄÐÉÓØ" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "äÏÂÁ×ÉÔØ ÐÏÄÐÉÓØ" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "òÅÄÁËÔÏÒ" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "ðÒÁ×ÉÔØ ×ÎÅÛÎÉÍ ÒÅÄÁËÔÏÒÏÍ" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "ðÅÒÅÎÏÓ ÓÔÒÏË" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "ðÅÒÅÎÏÓ ÄÌÉÎÎÙÈ ÓÔÒÏË" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "îÅ×ÅÒÎÙÊ ÔÉÐ MIME." + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "æÁÊÌ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÉÌÉ ÐÕÓÔ." + +#: src/compose.c:3022 +msgid "Property" +msgstr "ó×ÏÊÓÔ×Á" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "ëÏÄÉÒÏ×ËÁ" + +#: src/compose.c:3065 +msgid "Path" +msgstr "ðÕÔØ" + +#: src/compose.c:3066 +msgid "File name" +msgstr "éÍÑ ÆÁÊÌÁ" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ ×ÙÚÏ×Á ×ÎÅÛÎÅÇÏ ÒÅÄÁËÔÏÒÁ: `%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"÷ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ ÅÝÅ ÒÁÂÏÔÁÅÔ.\n" +"úÁ×ÅÒÛÉÔØ ÐÒÏÃÅÓÓ ÐÒÉÎÕÄÉÔÅÌØÎÏ?\n" +"éÄÅÎÔÉÆÉËÁÔÏÒ ÇÒÕÐÐÙ ÐÒÏÃÅÓÓÏ×: %d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "úÁ×ÅÒÛÅÎ ÐÒÏÃÅÓÓ ÇÒÕÐÐÙ: %d" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "÷ÒÅÍÅÎÎÙÊ ÆÁÊÌ: %s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "ðÏÄÇÏÔÏ×ËÁ ÐÉÓØÍÁ: ××ÏÄ ÉÚ ÐÒÏÃÅÓÓÁ ÓÌÅÖÅÎÉÑ\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÚÁÐÕÓÔÉÔØ ×ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ ÉÚ ËÁÎÁÌÁ\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÓÔÁÒÏÇÏ ÞÅÒÎÏ×ÏÇÏ ÐÉÓØÍÁ\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "÷ÙÂÏÒ ÆÁÊÌÁ" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "ïÔËÁÚ ÏÔ ÐÉÓØÍÁ" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "üÔÏ ÐÉÓØÍÏ ÉÚÍÅÎÅÎÏ. ïÔËÁÚÁÔØÓÑ ÏÔ ÎÅÇÏ?" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "ïÔËÁÚ" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "÷ ÞÅÒÎÏ×ÉËÉ" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "÷ÙÂÏÒ ÐÁÐËÉ" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/ðÅÒÅÉÍÅÎÏ×ÁÔØ ÐÁÐËÕ..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/õÄÁÌÉÔØ ÐÁÐËÕ" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/õÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "/õÄÁÌÉÔØ ÓÅÒ×ÅÒ IMAP4" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/ðÏÄÐÉÓËÁ ÎÁ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/õÄÁÌÉÔØ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/õÄÁÌÉÔØ ÓÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "ðÁÐËÁ" + +#: src/folderview.c:234 +msgid "New" +msgstr "îÏ×ÙÅ" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "îÅÐÒÏÞÉÔÁÎÎÙÅ" + +#: src/folderview.c:235 +msgid "#" +msgstr "#" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÐÁÐÏË...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "õÓÔÁÎÏ×ËÁ ÉÎÆÏÒÍÁÃÉÉ Ï ÐÁÐËÅ...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "õÓÔÁÎÏ×ËÁ ÉÎÆÏÒÍÁÃÉÉ Ï ÐÁÐËÅ..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "ðÒÏÓÍÏÔÒ ÐÁÐËÉ %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "ðÒÏÓÍÏÔÒ ÐÁÐËÉ %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "ïÂÎÏ×ÌÅÎÉÅ ×ÓÅÈ ÐÁÐÏË..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "÷ÈÏÄÑÝÉÅ" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "ïÔÐÒÁ×ÌÅÎÎÙÅ" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "ïÞÅÒÅÄØ" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "ëÏÒÚÉÎÁ" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "ðÁÐËÁ %s ×ÙÂÒÁÎÁ\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "óÉÍ×ÏÌ `%c' ÎÅ ÍÏÖÅÔ ×ÈÏÄÉÔØ × ÉÍÑ ÐÁÐËÉ." + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "ðÁÐËÁ `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "÷×ÅÄÉÔÅ ÎÏ×ÏÅ ÉÍÑ ÄÌÑ `%s':" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "ðÅÒÅÉÍÅÎÏ×ÁÔØ ÐÁÐËÕ" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"÷ÓÅ ×ÌÏÖÅÎÎÙÅ ÐÁÐËÉ É ÐÉÓØÍÁ ÉÚ `%s' ÂÕÄÕÔ ÕÄÁÌÅÎÙ.\n" +"÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÐÁÐËÕ?" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "õÄÁÌÉÔØ ÐÁÐËÕ" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "ÏÛÉÂËÁ ÕÄÁÌÅÎÉÑ ÐÁÐËÉ `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"õÄÁÌÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË `%s' ?\n" +"(ðÉÓØÍÁ ÎÅ ÂÕÄÕÔ ÕÄÁÌÅÎÙ Ó ÄÉÓËÁ)" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "õÄÁÌÉÔØ ÐÁÐËÕ" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "äÅÊÓÔ×ÉÔÅÌØÎÏ ÕÄÁÌÉÔØ ÐÁÐËÕ `%s'?" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "õÄÁÌÉÔØ ÓÅÒ×ÅÒ IMAP4 `%s'?" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "õÄÁÌÉÔØ ÓÅÒ×ÅÒ IMAP4" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "ðÏÄÐÉÓËÁ ÎÁ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "÷ÙÂÅÒÉÔÅ ÇÒÕÐÐÕ ÄÌÑ ÐÏÄÐÉÓËÉ:" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "çÒÕÐÐÁ ÎÏ×ÏÓÔÅÊ `%s' ÕÖÅ ÅÓÔØ × ÓÐÉÓËÅ." + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "õÄÁÌÉÔØ ÇÒÕÐÐÕ ÎÏ×ÏÓÔÅÊ `%s' " + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "õÄÁÌÅÎÉÅ ÇÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "õÄÁÌÉÔØ ÓÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ `%s'?" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "õÄÁÌÅÎÉÅ ÓÅÒ×ÅÒÁ ÎÏ×ÏÓÔÅÊ" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "Abcdef" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "çÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ:" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "ôÅÍÁ:" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÚÁÇÏÌÏ×ËÏ×...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "(âÅÚ ÏÔÐÒÁ×ÉÔÅÌÑ)" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "(âÅÚ ÔÅÍÙ)" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÚÁÇÏÌÏ×ËÏ×...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "÷ÓÅ ÚÁÇÏÌÏ×ËÉ" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "÷Ù×ÏÄ ÚÁÇÏÌÏ×ËÁ %s ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - ÷ÓÅ ÚÁÇÏÌÏ×ËÉ" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÉÚÏÂÒÁÖÅÎÉÑ...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "ïÛÉÂËÁ ÚÁÇÒÕÚËÉ ÉÚÏÂÒÁÖÅÎÉÑ" + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "óÏÅÄÉÎÅÎÉÅ IMAP4 Ó %s:%d ÐÒÅÒ×ÁÎÏ. ÷ÏÓÓÔÁÎÏ×ÌÅÎÉÅ ÓÏÅÄÉÎÅÎÉÑ...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "ÕÓÔÁÎÏ×ÌÅÎÉÅ ÓÏÅÄÉÎÅÎÉÑ IMAP4 Ó %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "ÎÅ×ÏÚÍÏÖÎÏ ×ÙÂÒÁÔØ ÐÁÐËÕ: %s\n" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "ÐÉÓØÍÏ %d ÕÖÅ ËÅÛÉÒÏ×ÁÎÏ.\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "ÐÏÌÕÞÅÎÉÅ ÐÉÓØÍÁ %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÓÏÏÂÝÅÎÉÅ %d\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "ÉÓÈÏÄÎÁÑ ÐÁÐËÁ ÓÏ×ÐÁÄÁÅÔ Ó ÐÁÐËÏÊ ÎÁÚÎÁÞÅÎÉÑ.\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "ðÅÒÅÍÅÝÅÎÉÅ ÓÏÏÂÝÅÎÉÑ %s%c%d × %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÆÌÁÇ ÕÄÁÌÅÎÉÑ: %d\n" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÞÉÓÔÉÔØ ÐÁÐËÕ ÏÔ ÕÄÁÌÅÎÎÙÈ ÓÏÏÂÝÅÎÉÊ\n" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÆÌÁÇ ÕÄÁÌÅÎÉÑ: 1:%d\n" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÐÏÌÕÞÉÔØ ÄÁÎÎÙÅ ËÏÎ×ÅÒÔÁ\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÄÁÎÎÙÈ ËÏÎ×ÅÒÔÁ.\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÒÁÚÂÏÒÅ ÄÁÎÎÙÈ ËÏÎ×ÅÒÔÁ: %s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "ÕÎÉÞÔÏÖÅÎÉÅ ÐÉÓØÍÁ %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tõÎÉÞÔÏÖÅÎÉÅ ×ÓÅÈ ÐÉÓÅÍ × ËÅÛÅ..." + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÉÔØÓÑ Ó ÓÅÒ×ÅÒÏÍ IMAP4: %s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "ïÛÉÂËÁ Á×ÔÏÒÉÚÁÃÉÉ IMAP4.\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ %d × %s\n" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "ÏÛÉÂËÁ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ IMAP: STORE %d:%d %s\n" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "ÏÛÉÂËÁ ÐÒÉ ×ÙÐÏÌÎÅÎÉÉ ËÏÍÁÎÄÙ IMAP: EXPUNGE\n" + +#: src/import.c:116 +msgid "Import" +msgstr "éÍÐÏÒÔ" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "éÍÐÏÒÔ ÆÁÊÌÁ:" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "ëÁÔÁÌÏÇ ÎÁÚÎÁÞÅÎÉÑ:" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr " ÷ÙÂÏÒ... " + +#: src/import.c:201 +msgid "Select importing file" +msgstr "÷ÙÂÏÒ ÉÍÐÏÒÔÉÒÕÅÍÏÇÏ ÆÁÊÌÁ" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "ðÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÐÉÓÅÍ" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "÷×ÏÄ ÐÁÒÏÌÑ" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "ÐÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÐÉÓÅÍ ÄÌÑ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ %s...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s: ðÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÐÉÓÅÍ" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "óÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ POP3: %s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ POP3: %s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÉÔØÓÑ Ó ÓÅÒ×ÅÒÏÍ POP3: %s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "á×ÔÏÒÉÚÁÃÉÑ" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "ðÏÌÕÞÅÎÉÅ ËÏÌÉÞÅÓÔ×Á ÎÏ×ÙÈ ÐÉÓÅÍ" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "ðÏÌÕÞÅÎÉÅ ÐÉÓØÍÁ (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "õÄÁÌÅÎÉÅ ÐÉÓØÍÁ" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "÷ÙÈÏÄ" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "ÐÉÓØÍÏ ÎÅ ÂÕÄÅÔ ÐÏÌÕÞÅÎÏ\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÂÒÁÂÏÔËÅ ÐÉÓÅÍ." + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "îÅ ÏÓÔÁÌÏÓØ ÍÅÓÔÁ ÎÁ ÄÉÓËÅ." + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "ÎÅÔ ÐÉÓÅÍ × ÌÏËÁÌØÎÏÍ ÑÝÉËÅ.\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "ðÏÌÕÞÅÎÉÅ ÎÏ×ÙÈ ÐÉÓÅÍ ÉÚ %s × %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÖÕÒÎÁÌÁ...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "öÕÒÎÁÌ" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"æÁÊÌ `%s' ÓÕÝÅÓÔ×ÕÅÔ.\n" +"îÅÌØÚÑ ÓÏÚÄÁÔØ ÐÁÐËÕ." + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "g_thread ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔÓÑ × glib.\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ðáòáíåôò]...\n" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr " --compose [ÁÄÒÅÓ] ÏÔËÒÙÔØ ÏËÎÏ ÐÏÄÇÏÔÏ×ËÉ ÐÉÓØÍÁ" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr " --receive ÐÏÌÕÞÉÔØ ÎÏ×ÙÅ ÐÉÓØÍÁ" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr " --receive-all ÐÏÌÕÞÉÔØ ÎÏ×ÙÅ ÐÉÓØÍÁ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr " --debug ÒÅÖÉÍ ÏÔÌÁÄËÉ" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr " --help ÏÔÏÂÒÁÚÉÔØ ÜÔÏ ÏÐÉÓÁÎÉÅ É ×ÙÊÔÉ" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "åÓÔØ ÒÅÄÁËÔÉÒÕÅÍÏÅ ÐÉÓØÍÏ. ÷ÙÈÏÄÉÔØ?" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "ÄÒÕÇÁÑ ËÏÐÉÑ Sylpheed ÕÖÅ ÚÁÐÕÝÅÎÁ.\n" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/æÁÊÌ/äÏÂÁ×ÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË..." + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/æÁÊÌ/ïÂÎÏ×ÉÔØ ÄÅÒÅ×Ï ÐÁÐÏË" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "/æÁÊÌ/ðÁÐËÁ" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/æÁÊÌ/ðÁÐËÁ/óÏÚÄÁÔØ ÎÏ×ÕÀ ÐÁÐËÕ..." + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/æÁÊÌ/ðÁÐËÁ/ðÅÒÅÉÍÅÎÏ×ÁÔØ ÐÁÐËÕ..." + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "/æÁÊÌ/ðÁÐËÁ/õÄÁÌÉÔØ ÐÁÐËÕ" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/æÁÊÌ/éÍÐÏÒÔ mbox-ÆÁÊÌÁ..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "/æÁÊÌ/ïÞÉÓÔÉÔØ ËÏÒÚÉÎÕ" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/æÁÊÌ/óÏÈÒÁÎÉÔØ ËÁË..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/æÁÊÌ/ðÅÞÁÔØ..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/æÁÊÌ/÷ÙÈÏÄ" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/ðÒÁ×ËÁ/ðÏÉÓË" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/÷ÉÄ" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/÷ÉÄ/äÅÒÅ×Ï ÐÁÐÏË" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/÷ÉÄ/ðÉÓØÍÁ" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ðÉËÔÏÇÒÁÍÍÙ É ÔÅËÓÔ" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ðÉËÔÏÇÒÁÍÍÙ" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/ôÅËÓÔ" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/÷ÉÄ/ðÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×/îÅ ÐÏËÁÚÙ×ÁÔØ" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/÷ÉÄ/óÔÒÏËÁ ÓÏÓÔÏÑÎÉÑ" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/÷ÉÄ/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/÷ÉÄ/ïÔÄÅÌØÎÏÅ ÄÅÒÅ×Ï ÐÁÐÏË" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/÷ÉÄ/ïÔÄÅÌØÎÙÊ ÓÐÉÓÏË ÐÉÓÅÍ" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/á×ÔÏÏÐÒÅÄÅÌÅÎÉÅ" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/7-ÂÉÔÎÙÊ ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/úÁÐÁÄÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ãÅÎÔÒÁÌØÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/âÁÌÔÉÊÓËÁÑ (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/âÁÌÔÉÊÓËÁÑ (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/çÒÅÞÅÓËÁÑ (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ôÕÒÅÃËÁÑ (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÉÒÉÌÌÉÞÅÓËÁÑ (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/òÕÓÓËÁÑ (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÉÒÉÌÌÉÞÅÓËÁÑ _Win (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ñÐÏÎÓËÁÑ (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/õÐÒÏÝÅÎÎÁÑ ËÉÔÁÊÓËÁÑ (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÉÔÁÊÓËÁÑ (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÏÒÅÊÓËÁÑ (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/÷ÉÄ/ëÏÄÉÒÏ×ËÁ/ëÏÒÅÊÓËÁÑ (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/ðÉÓØÍÏ/ðÏÌÕÞÉÔØ ÎÏ×ÙÅ ÐÉÓØÍÁ" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/ðÉÓØÍÏ/ðÏÌÕÞÉÔØ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/ðÉÓØÍÏ/ïÔÐÒÁ×ÉÔØ ÐÉÓØÍÁ ÉÚ ÏÞÅÒÅÄÉ" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/ðÉÓØÍÏ/îÁÐÉÓÁÔØ ÎÏ×ÏÅ ÐÉÓØÍÏ" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/ðÉÓØÍÏ/ïÔ×ÅÔÉÔØ" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/ðÉÓØÍÏ/ïÔ×ÅÔÉÔØ ×ÓÅÍ" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/ðÉÓØÍÏ/ðÅÒÅÓÌÁÔØ" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/ðÉÓØÍÏ/ðÅÒÅÓÌÁÔØ ËÁË ÐÒÉÌÏÖÅÎÉÅ" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/ðÉÓØÍÏ/ðÅÒÅÍÅÓÔÉÔØ..." + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/ðÉÓØÍÏ/õÄÁÌÉÔØ" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/ðÉÓØÍÏ/ïÔÍÅÔÉÔØ" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/ðÉÓØÍÏ/ïÔÍÅÔÉÔØ/ïÔÍÅÔÉÔØ" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/ðÉÓØÍÏ/ïÔÍÅÔÉÔØ/óÎÑÔØ ÏÔÍÅÔËÕ" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/ðÉÓØÍÏ/ïÔÍÅÔÉÔØ/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/ðÉÓØÍÏ/ïÔÍÅÔÉÔØ/ïÔÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/ðÉÓØÍÏ/ïÔÍÅÔÉÔØ/ïÔÍÅÔÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÏÅ" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/ðÉÓØÍÏ/ïÔËÒÙÔØ × ÎÏ×ÏÍ ÏËÎÅ" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/ðÉÓØÍÏ/ðÏËÁÚÁÔØ ÉÓÈÏÄÎÙÊ ÔÅËÓÔ" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/ðÉÓØÍÏ/ðÏËÁÚÁÔØ ×ÓÅ ÚÁÇÏÌÏ×ËÉ" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/ðÉÓØÍÏ/éÓÐÒÁ×ÉÔØ" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/õÄÁÌÉÔØ ÐÏ×ÔÏÒÑÀÝÉÅÓÑ ÐÉÓØÍÁ" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ïÔÆÉÌØÔÒÏ×ÁÔØ ÐÉÓØÍÁ" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/÷ÙÐÏÌÎÉÔØ" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ïÂÎÏ×ÉÔØ" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ðÒÅÄÙÄÕÝÅÅ ÐÉÓØÍÏ" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÌÅÄÕÀÝÅÅ ÐÉÓØÍÏ" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÌÅÄÕÀÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÐÉÓØÍÏ" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/ðÅÒÅÊÔÉ Ë ÄÒÕÇÏÊ ÐÁÐËÅ" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÎÏÍÅÒÕ" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÒÁÚÍÅÒÕ" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÄÁÔÅ" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÏÔÐÒÁ×ÉÔÅÌÀ" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/óÏÒÔÉÒÏ×ËÁ ÐÏ ÔÅÍÅ" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/óÏÒÔÉÒÏ×ËÁ/çÒÕÐÐÉÒÏ×ËÁ ÐÏ ÔÅÍÅ" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/çÒÕÐÐÉÒÏ×ËÁ ÐÏ ÄÉÓËÕÓÓÉÑÍ" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/âÅÚ ÇÒÕÐÐÉÒÏ×ËÉ ÐÏ ÄÉÓËÕÓÓÉÑÍ" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/ïÂÝÉÅ ËÏÍÁÎÄÙ/õÓÔÁÎÏ×ÉÔØ ×ÉÄÉÍÙÅ ÐÏÌÑ..." + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/éÎÓÔÒÕÍÅÎÔÙ/ïËÎÏ ÖÕÒÎÁÌÁ" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/îÁÓÔÒÏÊËÁ" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/îÁÓÔÒÏÊËÁ/ïÂÝÉÅ ÎÁÓÔÒÏÊËÉ..." + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/îÁÓÔÒÏÊËÁ/îÁÓÔÒÏÊËÁ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ... " + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/îÁÓÔÒÏÊËÁ/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/îÁÓÔÒÏÊËÁ/óÏÚÄÁÔØ ÎÏ×ÕÀ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ..." + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/îÁÓÔÒÏÊËÁ/òÅÄÁËÔÉÒÏ×ÁÎÉÅ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ..." + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/îÁÓÔÒÏÊËÁ/éÚÍÅÎÉÔØ ÔÅËÕÝÕÀ ÕÞÅÔÎÕÀ ÚÁÐÉÓØ" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/óÐÒÁ×ËÁ/òÕËÏ×ÏÄÓÔ×Ï" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/óÐÒÁ×ËÁ/òÕËÏ×ÏÄÓÔ×Ï/áÎÇÌÉÊÓËÏÅ" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/óÐÒÁ×ËÁ/òÕËÏ×ÏÄÓÔ×Ï/ñÐÏÎÓËÏÅ" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/óÐÒÁ×ËÁ/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "óÏÚÄÁÎÉÅ ÇÌÁ×ÎÏÇÏ ÏËÎÁ...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "çÌÁ×ÎÏÅ ÏËÎÏ: ÐÒÏÂÌÅÍÁ Ó Ã×ÅÔÏÍ %d\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "âÅÚ ÎÁÚ×ÁÎÉÑ" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "ÎÅÔ" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "ôÅËÕÝÁÑ ÕÞÅÔÎÁÑ ÚÁÐÉÓØ: %s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "ÐÏÚÉÃÉÑ ÏËÎÁ: x = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "ïÞÉÓÔËÁ ËÏÒÚÉÎÙ" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "õÄÁÌÉÔØ ×ÓÅ ÐÉÓØÍÁ ÉÚ ËÏÒÚÉÎÙ?" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "äÏÂÁ×ÉÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"úÁÄÁÊÔÅ ÐÕÔØ Ë ÐÏÞÔÏ×ÏÍÕ ÑÝÉËÕ.\n" +"åÓÌÉ ÂÕÄÅÔ ÕËÁÚÁÎ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÑÝÉË, ÔÏ ÏÎ\n" +"ÂÕÄÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉ ÐÒÏÞÉÔÁÎ." + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË `%s' ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "ðÏÞÔÏ×ÙÊ ÑÝÉË" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"ïÛÉÂËÁ ÐÒÉ ÓÏÚÄÁÎÉÉ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ.\n" +"íÏÖÅÔ ÂÙÔØ, ÎÅËÏÔÏÒÙÅ ÆÁÊÌÙ ÕÖÅ ÓÕÝÅÓÔ×ÕÀÔ, ÉÌÉ ×Ù ÎÅ ÉÍÅÅÔÅ ÐÒÁ× ÎÁ ÚÁÐÉÓØ " +"× ËÁÔÁÌÏÇÅ." + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "îÁÓÔÒÏÊËÁ ÏÆÏÒÍÌÅÎÉÑ..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "ðÒÉÎÑÔØ" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "ðÏÌÕÞÉÔØ ÎÏ×ÙÅ ÐÉÓØÍÁ" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "ðÒÉÎÑÔØ ×ÓÅ" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "ðÏÌÕÞÉÔØ ÐÉÓØÍÁ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "ðÏÓÌÁÔØ ÐÉÓØÍÁ ÉÚ ÏÞÅÒÅÄÉ" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "îÁÐÉÓÁÔØ" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "îÁÐÉÓÁÔØ ÎÏ×ÏÅ ÐÉÓØÍÏ" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "ïÔ×ÅÔÉÔØ" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "ïÔ×ÅÔÉÔØ ÎÁ ÐÉÓØÍÏ" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "ïÔ×ÅÔÉÔØ ×ÓÅÍ" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "ïÔ×ÅÔÉÔØ ×ÓÅÍ" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "ðÅÒÅÓÌÁÔØ" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "ðÅÒÅÓÌÁÔØ ÐÉÓØÍÏ" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "õÄÁÌÉÔØ ÐÉÓØÍÏ" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "÷ÙÐÏÌÎÉÔØ" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "÷ÙÐÏÌÎÉÔØ ÏÔÍÅÞÅÎÎÙÊ ÐÒÏÃÅÓÓ" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "äÁÌÅÅ" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "óÌÅÄÕÀÝÅÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÐÉÓØÍÏ" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "ó×ÏÊÓÔ×Á" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "ïÂÝÉÅ ÎÁÓÔÒÏÊËÉ" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "îÁÓÔÒÏÊËÁ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "÷ÙÈÏÄ" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "÷ÙÊÔÉ ÉÚ ÐÒÏÇÒÁÍÍÙ?" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "ïÛÉÂËÁ ÏÔÐÒÁ×ËÉ ÐÉÓÅÍ ÉÚ ÏÞÅÒÅÄÉ." + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "ÕÓÔÁÎÏ×ÌÅÎÁ ËÏÄÉÒÏ×ËÁ: %s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "ðÏÌÕÞÅÎÉÅ ÐÉÓÅÍ ÉÚ %s × %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "ïÛÉÂËÁ ÞÔÅÎÉÑ mbox-ÆÁÊÌÁ.\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÆÏÒÍÁÔ ÑÝÉËÁ: %s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "ÉÓÐÏÒÞÅÎÎÙÊ ÐÏÞÔÏ×ÙÊ ÑÝÉË: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "ÏÛÉÂËÁ ÐÒÉ ÏÔËÒÙÔÉÉ ×ÒÅÍÅÎÎÏÇÏ ÆÁÊÌÁ \n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" +"ÎÁÊÄÅÎÁ ÎÅÚÁÝÉÝÅÎÎÁÑ ÓÔÒÏËÁ From:\n" +"%s" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ×Ï ×ÒÅÍÅÎÎÙÊ ÆÁÊÌ\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "ÎÁÊÄÅÎÏ %d ÐÉÓÅÍ.\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ lock-ÆÁÊÌÁ %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "ÉÓÐÏÌØÚÕÊÔÅ 'flock' ×ÍÅÓÔÏ 'file', ÅÓÌÉ ×ÏÚÍÏÖÎÏ.\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÏÚÄÁÔØ %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "ÐÏÞÔÏ×ÙÊ ÑÝÉË ÚÁÎÑÔ ÄÒÕÇÉÍ ÐÒÏÃÅÓÓÏÍ, ÏÖÉÄÁÎÉÅ...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÕÓÔÁÎÏ×ÉÔØ ÂÌÏËÉÒÏ×ËÕ %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÔÉÐ ÂÌÏËÉÒÏ×ËÉ\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓÎÑÔØ ÂÌÏËÉÒÏ×ËÕ %s\n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÏÂÒÅÚÁÔØ ÐÏÞÔÏ×ÙÊ ÑÝÉË ÄÏ ÎÕÌÑ.\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÓÏÏÂÝÅÎÉÑ...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÓËÏÐÉÒÏ×ÁÔØ ÓÏÏÂÝÅÎÉÅ %s × %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÐÏÍÅÔÏË.\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "%s ÕÖÅ ÓÕÝÅÓÔ×ÕÅÔ." + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "ðÏÓÌÅÄÎÉÊ ÎÏÍÅÒ × ËÁÔÁÌÏÇÅ %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tðÏÉÓË ÎÅËÅÛÉÒÏ×ÁÎÎÙÈ ÐÉÓÅÍ... " + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "ÎÁÊÄÅÎÏ ÎÅËÅÛÉÒÏ×ÁÎÎÙÈ ÐÉÓÅÍ: %d.\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tóÏÒÔÉÒÏ×ËÁ ÎÅËÅÛÉÒÏ×ÁÎÎÙÈ ÐÉÓÅÍ ÐÏ ÎÏÍÅÒÁÍ... " + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/ïÔËÒÙÔØ" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/ðÏËÁÚÁÔØ ËÁË ÔÅËÓÔ" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "/óÏÈÒÁÎÉÔØ ËÁË..." + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "ôÉÐ MIME" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ MIME...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "ïÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÏÄÎÏÇÏ ÉÚ ËÏÍÐÏÎÅÎÔÏ× ÐÉÓØÍÁ." + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "ïÛÉÂËÁ ÐÒÉ ÓÏÈÒÁÎÅÎÉÉ ÏÄÎÏÇÏ ÉÚ ËÏÍÐÏÎÅÎÔÏ× ÐÉÓØÍÁ." + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "óÏÈÒÁÎÉÔØ ËÁË" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "ðÅÒÅÐÉÓÁÔØ" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "ðÅÒÅÐÉÓÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÆÁÊÌ?" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ ÐÒÏÓÍÏÔÒÁ MIME: `%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "ÓÏÅÄÉÎÅÎÉÅ NNTP Ó %s:%d ...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "ðÏÔÅÒÑÎÏ ÓÏÅÄÉÎÅÎÉÅ NNTP Ó %s:%d. ðÏÐÙÔËÁ ×ÏÓÓÔÁÎÏ×ÌÅÎÉÑ...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "ÓÔÁÔØÑ %d ÕÖÅ × ËÅÛÅ.\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "ÐÏÌÕÞÅÎÉÅ ÓÔÁÔØÉ %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "ÏÛÉÂËÁ ÞÔÅÎÉÑ ÓÔÁÔØÉ %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "ÏÛÉÂËÁ ÏÔÐÒÁ×ËÉ ÓÔÁÔØÉ.\n" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "ÏÛÉÂËÁ ÐÏÌÕÞÅÎÉÑ ÓÔÁÔØÉ %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "ÏÛÉÂËÁ ÕÓÔÁÎÏ×ËÉ ÇÒÕÐÐÙ: %s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "ÎÅ×ÅÒÎÙÊ ÄÉÁÐÁÚÏÎ ÓÔÁÔÅÊ: %d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "ÎÏ×ÙÈ ÓÔÁÔÅÊ ÎÅÔ.\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "ÚÁÇÒÕÚËÁ xover %d - %d × %s...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "ÎÅ ÕÄÁÌÏÓØ ÚÁÇÒÕÚÉÔØ xover\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ xover.\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "ÎÅ×ÅÒÎÁÑ ÓÔÒÏËÁ xover: %s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "ÕÄÁÌÅÎÉÅ ÓÔÁÔØÉ %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tõÄÁÌÅÎÉÅ ×ÓÅÈ ËÅÛÉÒÏ×ÁÎÎÙÈ ÓÔÁÔÅÊ... " + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "ïÛÉÂËÁ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ NNTP: %s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "ÏÛÉÂËÁ ÐÒÏÔÏËÏÌÁ: %s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "ÏÛÉÂËÁ ÐÒÏÔÏËÏÌÁ\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "ðÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ ÓÔÁÔØÉ\n" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "ðÁÒÏÌØÎÁÑ ÆÒÁÚÁ" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "[ÎÅÔ ÉÄÅÎÔÉÆÉËÁÔÏÒÁ ÐÏÌØÚÏ×ÁÔÅÌÑ]" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" +"%sðÏÖÁÌÕÊÓÔÁ, ××ÅÄÉÔÅ ÐÁÒÏÌØÎÕÀ ÆÒÁÚÕ ÄÌÑ:\n" +"\n" +" %.*s \n" +"(%.*s)\n" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" +"îÅ×ÅÒÎÏ! ðÏ×ÔÏÒÉÔÅ...\n" +"\n" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "ÏÛÉÂËÁ Á×ÔÏÒÉÚÁÃÉÉ\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "÷ ÓÏÏÂÝÅÎÉÉ ÓÅÒ×ÅÒÁ ÎÅ ÎÁÊÄÅÎÁ ÔÒÅÂÕÅÍÁÑ ÍÅÔËÁ ×ÒÅÍÅÎÉ APOP\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "ïÛÉÂËÁ ÓÉÎÔÁËÓÉÓÁ ÍÅÔËÉ ×ÒÅÍÅÎÉ × ÓÏÏÂÝÅÎÉÉ ÓÅÒ×ÅÒÁ\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "ïÛÉÂËÁ ÐÒÏÔÏËÏÌÁ POP3\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "þÔÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "îÁÊÄÅÎÏ %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "þÔÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÚÁ×ÅÒÛÅÎÏ.\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "ÏÛÉÂËÁ ÚÁÐÉÓÉ ÎÁÓÔÒÏÅË × ÆÁÊÌ\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "îÁÓÔÒÏÊËÉ ÓÏÈÒÁÎÅÎÙ.\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "ðÒÉÍÅÎÉÔØ" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "ïÔËÒÙÔÉÅ ÏËÎÁ ÎÁÓÔÒÏÅË ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ %d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "îÁÓÔÒÏÊËÉ ÎÏ×ÏÊ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "îÁÓÔÒÏÊËÉ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÎÁÓÔÒÏÅË ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "ïÓÎÏ×ÎÙÅ" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "ðÒÉÅÍ" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "äÏÐÏÌÎÉÔÅÌØÎÙÅ" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "éÍÑ ÕÞÅÔÎÏÊ ÚÁÐÉÓÉ" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "ðÏ ÕÍÏÌÞÁÎÉÀ" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "ìÉÞÎÁÑ ÉÎÆÏÒÍÁÃÉÑ" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "ðÏÌÎÏÅ ÉÍÑ" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "áÄÒÅÓ" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "ïÒÇÁÎÉÚÁÃÉÑ" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "ó×ÅÄÅÎÉÑ Ï ÓÅÒ×ÅÒÁÈ" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (ÏÂÙÞÎÙÊ)" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (ÐÒÏ×ÅÒËÁ ÐÁÒÏÌÑ APOP)" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "IMAP4" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "îÏ×ÏÓÔÎÏÊ (NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "îÅÔ (ÌÏËÁÌØÎÙÊ)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "óÅÒ×ÅÒ ÎÏ×ÏÓÔÅÊ" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "óÅÒ×ÅÒ ÄÌÑ ÐÒÉÅÍÁ" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "óÅÒ×ÅÒ SMTP (ÏÔÐÒÁ×ËÁ)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "ID ÐÏÌØÚÏ×ÁÔÅÌÑ" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "ðÁÒÏÌØ" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "POP3" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "õÄÁÌÑÔØ ÐÉÓØÍÁ Ó ÓÅÒ×ÅÒÁ ÐÏÓÌÅ ÐÒÉÅÍÁ" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "ðÒÉÎÉÍÁÔØ ×ÓÅ ÐÉÓØÍÁ Ó ÓÅÒ×ÅÒÁ" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "ðÒÉÎÉÍÁÔØ ÐÒÉ ÐÒÉÅÍÅ ÓÏ ×ÓÅÈ ÕÞÅÔÎÙÈ ÚÁÐÉÓÅÊ" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "æÉÌØÔÒÏ×ÁÔØ ÐÉÓØÍÁ ÐÒÉ ÐÒÉÅÍÅ" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "úÁÇÏÌÏ×ÏË" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "äÏÂÁ×ÉÔØ × ÚÁÇÏÌÏ×ÏË ÐÏÌÅ Date" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "óÏÚÄÁ×ÁÔØ Message-ID" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "äÏÂÁ×ÉÔØ ÚÁÇÏÌÏ×ËÉ, ÏÐÒÅÄÅÌÅÎÎÙÅ ÐÏÌØÚÏ×ÁÔÅÌÅÍ" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "ïÐÒÅÄÅÌÉÔØ..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ ÕÓÔÁÎÁ×ÌÉ×ÁÔØ ÁÄÒÅÓÁ:" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "ëÏÐÉÑ" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "óËÒÙÔÎÏ" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "ïÂÒÁÔÎÙÊ ÁÄÒÅÓ" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "áÕÔÅÎÔÉÆÉËÁÃÉÑ SMTP (SMTP AUTH)" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "ðÒÏ×ÅÒËÁ ÐÁÒÏÌÑ ÞÅÒÅÚ POP3 ÐÅÒÅÄ ÏÔÐÒÁ×ËÏÊ" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "æÁÊÌ ÐÏÄÐÉÓÉ" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "ðÏÒÔ SMTP" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "ðÏÒÔ POP3" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "éÍÑ ÄÏÍÅÎÁ" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "îÅ ÕËÁÚÁÎ ÁÄÒÅÓ." + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ SMTP." + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "îÅ ÕËÁÚÁÎ ÉÄÅÎÔÉÆÉËÁÔÏÒ ÐÏÌØÚÏ×ÁÔÅÌÑ." + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ POP3." + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ IMAP4." + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "îÅ ÕËÁÚÁÎ ÓÅÒ×ÅÒ NNTP." + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÏÂÝÉÈ ÎÁÓÔÒÏÅË...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "ïÂÝÉÅ ÎÁÓÔÒÏÊËÉ" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "ïÔÏÂÒÁÖÅÎÉÅ" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "æÉÌØÔÒÁÃÉÑ" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "úÁÝÉÔÁ" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "éÎÔÅÒÆÅÊÓ" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "äÒÕÇÏÅ" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "÷ÎÅÛÎÑÑ ÐÒÏÇÒÁÍÍÁ" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ ÄÌÑ ÐÒÉÅÍÁ" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "ðÕÔØ Ë ÐÒÏÇÒÁÍÍÅ" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "ìÏËÁÌØÎÙÊ ÓÐÕÌ" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "ðÒÉÎÉÍÁÔØ ÉÚ ÓÐÕÌÁ" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "æÉÌØÔÒÏ×ÁÔØ ÐÒÉ ÐÒÉÅÍÅ" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "ëÁÔÁÌÏÇ ÓÐÕÌÁ" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "ðÒÏ×ÅÒÑÔØ ÐÒÉÈÏÄ ÐÉÓÅÍ" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "ËÁÖÄÙÅ" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "ÍÉÎÕÔ" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "ðÒÏ×ÅÒËÁ ÐÉÓÅÍ ÐÒÉ ÚÁÐÕÓËÅ" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "îÏ×ÏÓÔÉ" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"îÁÉÂÏÌØÛÅÅ ÞÉÓÌÏ ÓÔÁÔÅÊ ÄÌÑ ÚÁÇÒÕÚËÉ\n" +"(ÎÅ ÏÇÒÁÎÉÞÅÎÏ, ÅÓÌÉ ÕËÁÚÁÎ 0)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ ×ÎÅÛÎÀÀ ÐÒÏÇÒÁÍÍÕ ÄÌÑ ÏÔÐÒÁ×ËÉ" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "óÏÈÒÁÎÑÔØ ÏÔÐÒÁ×ÌÅÎÎÙÅ ÐÉÓØÍÁ × ÐÁÐËÅ" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "÷ ÓÌÕÞÁÅ ÏÛÉÂËÉ ÐÒÉ ÏÔÐÒÁ×ËÅ ÐÏÍÅÝÁÔØ ÐÉÓØÍÏ × ÏÞÅÒÅÄØ" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "ëÏÄÉÒÏ×ËÁ ÏÔÐÒÁ×ÌÑÅÍÙÈ ÐÉÓÅÍ" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7 ÂÉÔ ascii (US-ASCII)" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "Unicode (UTF-8)" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "úÁÐÁÄÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "ãÅÎÔÒÁÌØÎÏÅ×ÒÏÐÅÊÓËÁÑ (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "âÁÌÔÉÊÓËÁÑ (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "âÁÌÔÉÊÓËÁÑ (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "çÒÅÞÅÓËÁÑ (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "ôÕÒÅÃËÁÑ (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "ëÉÒÉÌÌÉÃÁ (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "òÕÓÓËÁÑ (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "ëÉÒÉÌÌÉÃÁ Win (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "õËÒÁÉÎÓËÁÑ (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "ñÐÏÎÓËÁÑ (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "ñÐÏÎÓËÁÑ (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "ñÐÏÎÓËÁÑ (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "õÐÒÏÝÅÎÎÁÑ ËÉÔÁÊÓËÁÑ (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "ôÒÁÄÉÃÉÏÎÎÁÑ ËÉÔÁÊÓËÁÑ (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "ëÉÔÁÊÓËÁÑ (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "ëÏÒÅÊÓËÁÑ (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "ãÉÔÉÒÏ×ÁÎÉÅ" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "ãÉÔÉÒÏ×ÁÔØ ÐÒÉ ÏÔ×ÅÔÅ" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "úÎÁË ÃÉÔÁÔÙ" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "æÏÒÍÁÔ ÃÉÔÁÔÙ:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr " ïÐÉÓÁÎÉÅ ÓÉÍ×ÏÌÏ× " + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "á×ÔÏÍÁÔÉÞÅÓËÉ ×ÓÔÁ×ÌÑÔØ ÐÏÄÐÉÓØ" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "òÁÚÄÅÌÉÔÅÌØ ÐÏÄÐÉÓÉ" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "ðÅÒÅÎÏÓÉÔØ ÓÔÒÏËÉ Ó" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "ÓÉÍ×ÏÌÁ" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "ðÅÒÅÎÏÓÉÔØ ÃÉÔÁÔÙ" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "ðÅÒÅÎÏÓÉÔØ ÐÅÒÅÄ ÏÔÐÒÁ×ËÏÊ" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "úÁÒÅÇÉÓÔÒÉÒÏ×ÁÎÎÙÅ ÐÒÁ×ÉÌÁ" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "ïÐÅÒÁÔÏÒ" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(ÎÅÔ)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "ëÌÀÞÅ×ÏÅ ÓÌÏ×Ï" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "õÓÌÏ×ÉÅ" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "ÓÏÄÅÒÖÉÔ" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "ÎÅ ÓÏÄÅÒÖÉÔ" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "ðÏÍÅÓÔÉÔØ ×" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "éÓÐÏÌØÚÏ×ÁÔØ regex" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "îÅ ÐÒÉÎÉÍÁÔØ" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "äÏÂÁ×ÉÔØ" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr "úÁÍÅÎÉÔØ" + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "ûÒÉÆÔ" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "ðÉÓØÍÏ" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "ðÏËÁÚÙ×ÁÔØ ÞÉÓÌÏ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÐÉÓÅÍ ÒÑÄÏÍ Ó ÉÍÅÎÅÍ ÐÁÐËÉ" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "òÁÚÒÅÛÉÔØ ÒÁÓËÒÁÓËÕ ÐÉÓÅÍ" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "ïÔÏÂÒÁÖÁÔØ 2-ÂÁÊÔÎÙÊ ÁÌÆÁ×ÉÔ É ÞÉÓÌÁ 1-ÂÁÊÔÎÙÍ ÓÉÍ×ÏÌÏÍ" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "ðÏËÁÚÙ×ÁÔØ ÓÏËÒÁÝÅÎÎÙÅ ÚÁÇÏÌÏ×ËÉ ÐÒÉ ÐÒÏÍÏÔÒÅ ÐÉÓÅÍ" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "òÁÓÓÔÏÑÎÉÅ ÍÅÖÄÕ ÓÔÒÏËÁÍÉ" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "ÐÉËÓÅÌÅÊ" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "ïÓÔÁ×ÌÑÔØ ÍÅÓÔÏ × ÚÁÇÏÌÏ×ËÅ" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "ðÅÒÅ×ÏÄÉÔØ ÉÍÅÎÁ ÚÁÇÏÌÏ×ËÏ× (`From:', `Subject:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "ðÏËÁÚÙ×ÁÔØ ÐÏÌÕÞÁÔÅÌÑ × ËÏÌÏÎËÅ `ïÔ', ÅÓÌÉ ÏÔÐÒÁ×ÉÔÅÌØ - ÷Ù" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "òÁÚÒÅÛÉÔØ ÇÏÒÉÚÏÎÔÁÌØÎÕÀ ÐÒÏËÒÕÔËÕ" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr "õÓÔÁÎÏ×ÉÔØ ÐÏËÁÚÙ×ÁÅÍÙÅ ÐÏÌÑ..." + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "ûÉÆÒÏ×ÁÔØ ÐÉÓØÍÁ ÐÏ ÕÍÏÌÞÁÎÉÀ" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "ðÏÄÐÉÓÙ×ÁÔØ ÐÉÓØÍÁ ÐÏ ÕÍÏÌÞÁÎÉÀ" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "úÁÈ×ÁÔÉÔØ ××ÏÄ ÐÒÉ ÚÁÐÒÏÓÅ ÐÁÒÏÌÑ" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" +"üÍÕÌÉÒÏ×ÁÔØ ÐÏ×ÅÄÅÎÉÅ ÍÙÛÉ × ÐÏÞÔÏ×ÏÊ ÐÒÏÇÒÁÍÍÅ\n" +"Emacs" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "ïÔËÒÙÔØ ÐÅÒ×ÏÅ ÎÅÐÒÏÞÉÔÁÎÎÏÅ ÐÉÓØÍÏ ÐÒÉ ×ÈÏÄÅ × ÐÁÐËÕ" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "îÅÍÅÄÌÅÎÎÏ ×ÙÐÏÌÎÑÔØ ÐÅÒÅÍÅÝÅÎÉÅ É ÕÄÁÌÅÎÉÅ ÐÉÓÅÍ" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" +"(ðÉÓØÍÁ ÂÕÄÕÔ ÐÒÏÓÔÏ ÐÏÍÅÞÅÎÙ ÄÏ ×ÙÐÏÌÎÅÎÉÑ, ÅÓÌÉ\n" +" ÜÔÁ ÏÐÃÉÑ ÎÅ ×ËÌÀÞÅÎÁ)" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "ðÒÉ ×ÙÈÏÄÅ" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "ðÏÄÔ×ÅÒÖÄÅÎÉÅ ÐÒÉ ×ÙÈÏÄÅ" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "ïÞÉÝÁÔØ ËÏÒÚÉÎÕ ÐÒÉ ×ÙÈÏÄÅ" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "óÐÒÁÛÉ×ÁÔØ ÐÅÒÅÄ ÏÞÉÓÔËÏÊ" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "÷ÎÅÛÎÉÊ ÂÒÏÕÚÅÒ (%s ÂÕÄÅÔ ÚÁÍÅÎÅÎ ÎÁ URI)" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "ëÏÍÁÎÄÁ" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "ðÅÞÁÔØ (%s ÂÕÄÅÔ ÚÁÍÅÎÅÎ ÎÁ ÉÍÑ ÆÁÊÌÁ)" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "÷ÎÅÛÎÉÊ ÒÅÄÁËÔÏÒ (%s ÂÕÄÅÔ ÚÁÍÅÎÅÎ ÎÁ ÉÍÑ ÆÁÊÌÁ)" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "ïÐÉÓÁÎÉÅ ÓÉÍ×ÏÌÏ×" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"äÁÔÁ\n" +"ïÔ\n" +"ðÏÌÎÏÅ ÉÍÑ ÏÔÐÒÁ×ÉÔÅÌÑ\n" +"ðÅÒ×ÏÅ ÉÍÑ ÏÔÐÒÁ×ÉÔÅÌÑ\n" +"éÎÉÃÉÁÌÙ ÏÔÐÒÁ×ÉÔÅÌÑ\n" +"ôÅÍÁ\n" +"ëÕÄÁ\n" +"Message-ID\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "þÔÅÎÉÅ ËÏÎÆÉÇÕÒÁÃÉÉ ÆÉÌØÔÒÏ×...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "úÁÐÉÓØ ËÏÎÆÉÇÕÒÁÃÉÉ ÆÉÌØÔÒÏ×...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "(îÏ×ÏÅ)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "ðÁÐËÁ ÎÁÚÎÁÞÅÎÉÑ ÎÅ ÕËÁÚÁÎÁ." + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "éÍÑ ÚÁÇÏÌÏ×ËÁ ÎÅ ÕËÁÚÁÎÏ." + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "õÄÁÌÅÎÉÅ ÐÒÁ×ÉÌÁ" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "÷Ù ÈÏÔÉÔÅ ÕÄÁÌÉÔØ ÐÒÁ×ÉÌÏ?" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "õÓÔÁÎÏ×ËÁ ÏÔÏÂÒÁÖÁÅÍÙÈ ÐÏÌÅÊ" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "íÅÔËÁ" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "MIME" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "îÏÍÅÒ" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "äÁÔÁ" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "ïÔ" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "ôÅÍÁ" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "÷ÙÂÏÒ ÛÒÉÆÔÁ" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "÷ÓËðÏÎ÷ÔÒóÒÄþÔ×ðÔÎóÕÂ" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "ïÛÉÂËÁ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ËÏÄÉÒÏ×ËÉ.\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "äÁÎÎÙÅ × ËÅÛÅ ÉÓÐÏÒÞÅÎÙ\n" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tîÅÔ ÆÁÊÌÁ ËÅÛÁ\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tþÔÅÎÉÅ ËÅÛÁ ÓÐÉÓËÁ..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "÷ÅÒÓÉÑ ÆÁÊÌÁ ËÅÛÁ ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÔÒÅÂÕÅÍÏÊ. æÁÊÌ ÕÄÁÌÅÎ.\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tðÏÍÅÔËÁ ÓÏÏÂÝÅÎÉÊ..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\tîÏ×ÙÈ ÓÏÏÂÝÅÎÉÊ: %d\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "æÁÊÌ ÐÏÍÅÔÏË ÎÅ ÎÁÊÄÅÎ.\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "" +"÷ÅÒÓÉÑ ÆÁÊÌÁ ÐÏÍÅÔÏË ÎÅ ÓÏ×ÐÁÄÁÅÔ Ó ÔÒÅÂÕÅÍÏÊ (%d != %d). æÁÊÌ ÕÄÁÌÅÎ.\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÐÏÍÅÔÏË × ÒÅÖÉÍÅ ÄÏÂÁ×ÌÅÎÉÑ.\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "îÅ ÕÄÁÌÏÓØ ÏÔËÒÙÔØ ÆÁÊÌ ÐÏÍÅÔÏË × ÒÅÖÉÍÅ ÚÁÐÉÓÉ.\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "ïÛÉÂËÁ ÐÒÉ ÏÔÓÙÌËÅ ÓÏÏÂÝÅÎÉÑ ÉÚ ÏÞÅÒÅÄÉ.\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ ÐÅÞÁÔÉ: `%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "óÏÚÄÁÎÉÅ ÄÉÁÌÏÇÏ×ÏÇÏ ÏËÎÁ ÐÒÏÇÒÅÓÓÁ...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "ÐÒÏÉÚÏÛÌÁ ÏÛÉÂËÁ ÐÒÉ ÐÏÌÕÞÅÎÉÉ ÄÁÎÎÙÈ.\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "ïÛÉÂËÁ ÚÁÐÉÓÉ × ÆÁÊÌ.\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "Oops: ðÏÄÐÉÓØ ÎÅ ÐÒÏ×ÅÒÅÎÁ" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "îÅÔ ÐÏÄÐÉÓÉ" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "èÏÒÏÛÁÑ ÐÏÄÐÉÓØ" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "ðÌÏÈÁÑ ÐÏÄÐÉÓØ" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "îÅÔ ËÌÀÞÁ ÄÌÑ ÐÒÏ×ÅÒËÉ ÐÏÄÐÉÓÉ" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "ïÛÉÂËÁ ÐÒÏ×ÅÒËÉ ÐÏÄÐÉÓÉ" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "÷ÙÂÏÒ ËÌÀÞÁ" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "÷ÙÂÏÒ ËÌÀÞÁ ÄÌÑ: " + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "ID ËÌÀÞÁ" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "÷ÙÂÒÁÔØ" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "úÁÇÏÌÏ×ÏË ÓÏÏÂÝÅÎÉÑ × ÏÞÅÒÅÄÉ ÉÓÐÏÒÞÅÎ.\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ ÎÅ ÎÁÊÄÅÎÁ. éÓÐÏÌØÚÕÀ ÔÅËÕÝÕÀ...\n" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "õÞÅÔÎÁÑ ÚÁÐÉÓØ ÎÅ ÎÁÊÄÅÎÁ.\n" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "óÏÅÄÉÎÅÎÉÅ Ó ÓÅÒ×ÅÒÏÍ SMTP: %s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "ïÛÉÂËÁ ÓÏÅÄÉÎÅÎÉÑ Ó ÓÅÒ×ÅÒÏÍ SMTP: %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "ïÛÉÂËÁ ÐÒÉ ÏÔÐÒÁ×ËÅ HELO\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "õÓÔÁÎÏ×ËÉ ÐÏÞÔÏ×ÏÇÏ ÑÝÉËÁ" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"÷ÎÁÞÁÌÅ ÕËÁÖÉÔÅ ÍÅÓÔÏÎÁÈÏÖÄÅÎÉÅ ÑÝÉËÁ.\n" +"÷Ù ÍÏÖÅÔÅ ÉÓÐÏÌØÚÏ×ÁÔØ ÓÕÝÅÓÔ×ÕÀÝÉÊ ÑÝÉË × ÆÏÒÍÁÔÅ MH,\n" +"ÅÓÌÉ Õ ×ÁÓ ÅÓÔØ ÔÁËÏ×ÏÊ.\n" +"åÓÌÉ ÎÅ Õ×ÅÒÅÎÙ, ÔÏ ÐÒÏÓÔÏ ÎÁÖÍÉÔÅ OK." + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "óÏÚÄÁÎÉÅ ÏËÎÁ ÐÒÏÓÍÏÔÒÁ ÉÓÈÏÄÎÏÇÏ ÔÅËÓÔÁ...\n" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "éÓÈÏÄÎÙÊ ÔÅËÓÔ ÓÏÏÂÝÅÎÉÑ" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "ïÔÏÂÒÁÖÅÎÉÅ ÉÓÈÏÄÎÏÇÏ ÔÅËÓÔÁ %s ...\n" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - éÓÈÏÄÎÙÊ ÔÅËÓÔ" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "ðÏÉÓË" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "õÞÉÔÙ×ÁÔØ ÒÅÇÉÓÔÒ" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "ïÂÒÁÔÎÙÊ ÐÏÉÓË" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "÷ÙÂÒÁÔØ ×ÓÅ ×ÈÏÖÄÅÎÉÑ" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "ïÞÉÓÔÉÔØ" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "ðÏÉÓË ÎÅ ÕÄÁÌÓÑ" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "óÔÒÏËÁ ÎÅ ÎÁÊÄÅÎÁ." + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "äÏÓÔÉÇÎÕÔÏ ÎÁÞÁÌÏ ÓÐÉÓËÁ; ÐÒÏÄÏÌÖÉÔØ Ó ËÏÎÃÁ?" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "äÏÓÔÉÇÎÕÔ ËÏÎÅà ÓÐÉÓËÁ; ÐÒÏÄÏÌÖÉÔØ Ó ÎÁÞÁÌÁ?" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "ðÏÉÓË ÚÁËÏÎÞÅÎ" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/ðÅÒÅÍÅÓÔÉÔØ" + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/ëÏÐÉÒÏ×ÁÔØ" + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/÷ÙÐÏÌÎÉÔØ" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/ïÔÍÅÔÉÔØ" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/ïÔÍÅÔÉÔØ/ïÔÍÅÔÉÔØ" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/ïÔÍÅÔÉÔØ/óÎÑÔØ ÏÔÍÅÔËÕ" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/ïÔÍÅÔÉÔØ/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÏÅ" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/ïÔÍÅÔÉÔØ/ðÏÍÅÔÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÏÅ" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/ïÔ×ÅÔÉÔØ" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/ïÔ×ÅÔÉÔØ ×ÓÅÍ" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/ðÅÒÅÓÌÁÔØ" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/ðÅÒÅÓÌÁÔØ ËÁË ÐÒÉÌÏÖÅÎÉÅ" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/ïÔËÒÙÔØ × ÎÏ×ÏÍ ÏËÎÅ" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/ðÏËÁÚÁÔØ ÉÓÈÏÄÎÙÊ ÔÅËÓÔ" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/ðÏËÁÚÁÔØ ×ÓÅ ÚÁÇÏÌÏ×ËÉ" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/éÚÍÅÎÉÔØ" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/ðÅÞÁÔÁÔØ..." + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/÷ÙÂÒÁÔØ ×ÓÅ" + +#: src/summaryview.c:320 +msgid "M" +msgstr "í" + +#: src/summaryview.c:320 +msgid "U" +msgstr "þ" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÓÐÉÓËÁ...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "îÏÍÅÒ" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "ïÂÒÁÂÏÔËÁ ÍÅÔÏË" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "îÅÓËÏÌØËÏ ÍÅÔÏË ÏÓÔÁÌÏÓØ. ïÂÒÁÂÏÔÁÔØ ÉÈ?" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" +"ÐÕÓÔÁÑ ÐÁÐËÁ\n" +"\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "ðÒÏÓÍÏÔÒ ÐÁÐËÉ (%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "ÇÏÔÏ×Ï." + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "îÅÔ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÐÉÓÅÍ" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "îÅ ÎÁÊÄÅÎÏ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÐÉÓÅÍ. ðÅÒÅÊÔÉ Ë ÓÌÅÄÕÀÝÅÊ ÐÁÐËÅ?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "çÒÕÐÐÉÒÏ×ËÁ ÐÉÓÅÍ ÐÏ ÔÅÍÁÍ..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d ÕÄÁÌÅÎÏ" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d ÐÅÒÅÍÅÝÅÎÏ" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr ", " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr " ÐÉÓÅÍ ×ÙÂÒÁÎÏ" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d ÎÏ×ÙÈ, %d ÎÅÐÒÏÞÉÔÁÎÎÙÈ, %d ×ÓÅÇÏ (%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d ÎÏ×ÙÈ, %d ÎÅÐÒÏÞÉÔÁÎÎÙÈ, %d ×ÓÅÇÏ" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "óÏÒÔÉÒÏ×ËÁ..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tæÏÒÍÉÒÏ×ÁÎÉÅ ÓÐÉÓËÁ ÐÉÓÅÍ..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "æÏÒÍÉÒÏ×ÁÎÉÅ ÓÐÉÓËÁ ÐÉÓÅÍ..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "úÁÐÉÓØ ËÅÛÁ ÓÐÉÓËÁ (%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(îÅÔ ÄÁÔÙ)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "ðÉÓØÍÏ %d ÐÏÍÅÞÅÎÏ\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "ðÉÓØÍÏ %d ÐÏÍÅÞÅÎÏ ËÁË ÐÒÏÞÔÅÎÎÏÅ\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "ðÉÓØÍÏ %d ÐÏÍÅÞÅÎÏ ËÁË ÎÅÐÒÏÞÔÅÎÎÏÅ\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "ðÉÓØÍÏ %s/%d ÐÏÍÅÞÅÎÏ ËÁË ÕÄÁÌÅÎÎÏÅ\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "ôÅËÕÝÁÑ ÐÁÐËÁ -- ËÏÒÚÉÎÁ." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "õÎÉÞÔÏÖÅÎÉÅ ÐÏ×ÔÏÒÑÀÝÉÈÓÑ ÐÉÓÅÍ..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "ó ÐÉÓØÍÁ %s/%d ÓÎÑÔÙ ÐÏÍÅÔËÉ\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "ðÉÓØÍÏ %d ÐÏÍÅÞÅÎÏ ÄÌÑ ÐÅÒÅÍÅÝÅÎÉÑ × %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "íÅÓÔÏ ÎÁÚÎÁÞÅÎÉÑ ÓÏ×ÐÁÄÁÅÔ Ó ÔÅËÕÝÅÊ ÐÁÐËÏÊ." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "÷ÙÂÉÒÁÀÔÓÑ ×ÓÅ ÓÏÏÂÝÅÎÉÑ..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "ðÅÞÁÔØ" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"÷×ÅÄÉÔÅ ËÏÍÁÎÄÕ ÐÅÞÁÔÉ:\n" +"(`%s' ÂÕÄÅÔ ÚÁÍÅÎÅÎÏ ÎÁ ÉÍÑ ÆÁÊÌÁ)" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"îÅÐÒÁ×ÉÌØÎÁÑ ËÏÍÁÎÄÁ ÐÅÞÁÔÉ:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "ó×ÑÚÙ×ÁÎÉÅ ÏÂÓÕÖÄÅÎÉÊ..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "ïÔÍÅÎÁ Ó×ÑÚÙ×ÁÎÉÑ ÏÂÓÕÖÄÅÎÉÊ..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "ïÔÍÅÎÁ Ó×ÑÚÙ×ÁÎÉÑ ÏÂÓÕÖÄÅÎÉÑ ÄÌÑ ÉÓÐÏÌÎÅÎÉÑ..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "ÆÉÌØÔÒÁÃÉÑ..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "æÉÌØÔÒÁÃÉÑ..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "ðÅÒÅÊÔÉ Ë %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "óÏÚÄÁÎÉÅ ÏÂÌÁÓÔÉ ÐÒÏÓÍÏÔÒÁ ÔÅËÓÔÁ...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "þÔÏÂÙ ÓÏÈÒÁÎÉÔØ ÜÔÕ ÞÁÓÔØ, ×ÙÚÏ×ÉÔÅ ËÏÎÔÅËÓÔÎÏÅ ÍÅÎÀ, ÝÅÌËÎÕ× ÐÒÁ×ÏÊ\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"ËÎÏÐËÏÊ ÍÙÛÉ, É ×ÙÂÅÒÉÔÅ `óÏÈÒÁÎÉÔØ ËÁË...', ÉÌÉ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ `y'.\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "äÌÑ ÏÔÏÂÒÁÖÅÎÉÑ ÜÔÏÇÏ ×ÌÏÖÅÎÉÑ ËÁË ÔÅËÓÔÁ, ×ÙÂÅÒÉÔÅ\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`ðÏËÁÚÁÔØ ËÁË ÔÅËÓÔ', ÉÌÉ ÎÁÖÍÉÔÅ ËÌÁ×ÉÛÕ `t'.\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "äÌÑ ÏÔËÒÙÔÉÑ ÜÔÏÇÏ ×ÌÏÖÅÎÉÑ ×ÎÅÛÎÅÊ ÐÒÏÇÒÁÍÍÏÊ, ×ÙÂÅÒÉÔÅ `Open',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" +"ÉÌÉ ÝÅÌËÎÉÔÅ Ä×ÁÖÄÙ, ÉÌÉ ÎÁÖÍÉÔÅ ÎÁ ÓÒÅÄÎÀÀ ËÎÏÐËÕ, ÉÌÉ ÎÁ ËÌÁ×ÉÛÕ `l'." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "ÚÁÐÉÓØ × %s ÎÅ ÕÄÁÌÁÓØ.\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "îÅ×ÅÒÎÁÑ ËÏÍÁÎÄÁ ÏÔËÒÙÔÉÑ URI: `%s'" diff --git a/po/stamp-cat-id b/po/stamp-cat-id new file mode 100644 index 000000000..9788f7023 --- /dev/null +++ b/po/stamp-cat-id @@ -0,0 +1 @@ +timestamp diff --git a/po/sylpheed.pot b/po/sylpheed.pot new file mode 100644 index 000000000..b0a6ce59e --- /dev/null +++ b/po/sylpheed.pot @@ -0,0 +1,3621 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR Free Software Foundation, Inc. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2001-04-19 17:34+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING\n" + +#: src/about.c:86 +msgid "About" +msgstr "" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:293 src/mainwindow.c:1642 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1699 src/prefs_common.c:1918 src/prefs_common.c:2034 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "" + +#: src/account.c:382 +msgid "Server" +msgstr "" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "" + +#: src/account.c:407 +msgid "Edit" +msgstr "" + +#: src/account.c:413 +msgid " Delete " +msgstr "" + +#: src/account.c:419 src/prefs_filter.c:432 +msgid "Down" +msgstr "" + +#: src/account.c:425 src/prefs_filter.c:426 +msgid "Up" +msgstr "" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr "" + +#: src/account.c:445 src/prefs_filter.c:192 src/summary_search.c:192 +msgid "Close" +msgstr "" + +#: src/account.c:498 +msgid "Delete account" +msgstr "" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:938 src/prefs_filter.c:715 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:329 +msgid "/_File" +msgstr "" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:339 src/mainwindow.c:342 +msgid "/_File/---" +msgstr "" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:343 +msgid "/_File/_Close" +msgstr "" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:515 +msgid "/_Help" +msgstr "" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:520 +msgid "/_Help/_About" +msgstr "" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:346 +msgid "/_Edit" +msgstr "" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1391 +#: src/prefs_filter.c:392 +msgid "Delete" +msgstr "" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:938 +#: src/prefs_filter.c:715 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "" + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "" + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:293 src/mainwindow.c:1642 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2035 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "" + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:670 src/mainwindow.c:1274 src/mh.c:842 src/mh.c:849 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "" + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:291 +msgid "Notice" +msgstr "" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "" + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "" + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:349 +msgid "/_Edit/---" +msgstr "" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "" + +#: src/compose.c:385 src/mainwindow.c:347 +msgid "/_Edit/_Copy" +msgstr "" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "" + +#: src/compose.c:387 src/mainwindow.c:348 +msgid "/_Edit/Select _all" +msgstr "" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "" + +#: src/compose.c:393 src/mainwindow.c:439 +msgid "/_Message" +msgstr "" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:443 src/mainwindow.c:446 src/mainwindow.c:453 +#: src/mainwindow.c:464 +msgid "/_Message/---" +msgstr "" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "" + +#: src/compose.c:414 src/mainwindow.c:496 +msgid "/_Tool" +msgstr "" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "" + +#: src/compose.c:416 src/mainwindow.c:497 +msgid "/_Tool/_Address book" +msgstr "" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr "" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "" + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "" + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "" + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "" + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2029 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "" + +#: src/compose.c:2668 src/mainwindow.c:1345 src/prefs_account.c:459 +#: src/prefs_common.c:595 +msgid "Send" +msgstr "" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "" + +#: src/compose.c:2712 src/prefs_common.c:996 +msgid "Signature" +msgstr "" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "" + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "" + +#: src/compose.c:3022 +msgid "Property" +msgstr "" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "" + +#: src/compose.c:3065 +msgid "Path" +msgstr "" + +#: src/compose.c:3066 +msgid "File name" +msgstr "" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "" + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "" + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "" + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "" + +#: src/folderview.c:234 +msgid "New" +msgstr "" + +#: src/folderview.c:235 src/prefs_common.c:2026 +msgid "Unread" +msgstr "" + +#: src/folderview.c:235 +msgid "#" +msgstr "" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "" + +#: src/folderview.c:516 src/mainwindow.c:2060 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "" + +#: src/folderview.c:521 src/mainwindow.c:2065 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "" + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "" + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "" + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "" + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "" + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "" + +#: src/headerview.c:173 src/summaryview.c:1379 +msgid "(No From)" +msgstr "" + +#: src/headerview.c:188 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "" + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:264 src/mh.c:335 +#: src/mh.c:419 +msgid "the src folder is identical to the dest.\n" +msgstr "" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:267 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "" + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "" + +#: src/import.c:158 src/import.c:164 src/prefs_filter.c:343 +msgid " Select... " +msgstr "" + +#: src/import.c:201 +msgid "Select importing file" +msgstr "" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "" + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "" + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "" + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "" + +#. for gettext +#: src/main.c:101 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" + +#: src/main.c:140 +msgid "g_thread is not supported by glib.\n" +msgstr "" + +#: src/main.c:271 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:273 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:274 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:275 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:276 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:277 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:278 +msgid " --version output version information and exit" +msgstr "" + +#: src/main.c:292 +msgid "Composing message exists. Really quit?" +msgstr "" + +#. remote command mode +#: src/main.c:362 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:330 +msgid "/_File/_Add mailbox..." +msgstr "" + +#: src/mainwindow.c:331 +msgid "/_File/_Update folder tree" +msgstr "" + +#: src/mainwindow.c:332 +msgid "/_File/_Folder" +msgstr "" + +#: src/mainwindow.c:333 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +#: src/mainwindow.c:335 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +#: src/mainwindow.c:336 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +#: src/mainwindow.c:337 +msgid "/_File/_Import mbox file..." +msgstr "" + +#: src/mainwindow.c:338 +msgid "/_File/Empty _trash" +msgstr "" + +#: src/mainwindow.c:340 +msgid "/_File/_Save as..." +msgstr "" + +#: src/mainwindow.c:341 +msgid "/_File/_Print..." +msgstr "" + +#: src/mainwindow.c:344 +msgid "/_File/E_xit" +msgstr "" + +#: src/mainwindow.c:350 +msgid "/_Edit/_Search" +msgstr "" + +#: src/mainwindow.c:352 +msgid "/_View" +msgstr "" + +#: src/mainwindow.c:353 +msgid "/_View/_Folder tree" +msgstr "" + +#: src/mainwindow.c:354 +msgid "/_View/_Message view" +msgstr "" + +#: src/mainwindow.c:355 +msgid "/_View/_Toolbar" +msgstr "" + +#: src/mainwindow.c:356 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "" + +#: src/mainwindow.c:357 +msgid "/_View/_Toolbar/_Icon" +msgstr "" + +#: src/mainwindow.c:358 +msgid "/_View/_Toolbar/_Text" +msgstr "" + +#: src/mainwindow.c:359 +msgid "/_View/_Toolbar/_Non-display" +msgstr "" + +#: src/mainwindow.c:360 +msgid "/_View/_Status bar" +msgstr "" + +#: src/mainwindow.c:361 src/mainwindow.c:364 +msgid "/_View/---" +msgstr "" + +#: src/mainwindow.c:362 +msgid "/_View/Separate f_older tree" +msgstr "" + +#: src/mainwindow.c:363 +msgid "/_View/Separate m_essage view" +msgstr "" + +#: src/mainwindow.c:365 +msgid "/_View/_Code set" +msgstr "" + +#: src/mainwindow.c:366 +msgid "/_View/_Code set/_Auto detect" +msgstr "" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/---" +msgstr "" + +#: src/mainwindow.c:375 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "" + +#: src/mainwindow.c:379 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "" + +#: src/mainwindow.c:383 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "" + +#: src/mainwindow.c:392 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "" + +#: src/mainwindow.c:395 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "" + +#: src/mainwindow.c:401 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "" + +#: src/mainwindow.c:403 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "" + +#: src/mainwindow.c:405 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "" + +#: src/mainwindow.c:409 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "" + +#: src/mainwindow.c:415 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "" + +#: src/mainwindow.c:417 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "" + +#: src/mainwindow.c:421 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "" + +#: src/mainwindow.c:423 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "" + +#: src/mainwindow.c:430 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "" + +#: src/mainwindow.c:432 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "" + +#: src/mainwindow.c:440 +msgid "/_Message/Rece_ive new mail" +msgstr "" + +#: src/mainwindow.c:441 +msgid "/_Message/Receive from _all accounts" +msgstr "" + +#: src/mainwindow.c:444 +msgid "/_Message/Send queued messa_ges" +msgstr "" + +#: src/mainwindow.c:447 +msgid "/_Message/Compose _new message" +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Reply" +msgstr "" + +#: src/mainwindow.c:449 +msgid "/_Message/Reply to a_ll" +msgstr "" + +#: src/mainwindow.c:450 +msgid "/_Message/_Forward" +msgstr "" + +#: src/mainwindow.c:451 +msgid "/_Message/Forward as an a_ttachment" +msgstr "" + +#: src/mainwindow.c:454 +msgid "/_Message/M_ove..." +msgstr "" + +#: src/mainwindow.c:455 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:456 +msgid "/_Message/_Delete" +msgstr "" + +#: src/mainwindow.c:457 +msgid "/_Message/_Mark" +msgstr "" + +#: src/mainwindow.c:458 +msgid "/_Message/_Mark/_Mark" +msgstr "" + +#: src/mainwindow.c:459 +msgid "/_Message/_Mark/_Unmark" +msgstr "" + +#: src/mainwindow.c:460 +msgid "/_Message/_Mark/---" +msgstr "" + +#: src/mainwindow.c:461 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "" + +#: src/mainwindow.c:462 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "" + +#: src/mainwindow.c:465 +msgid "/_Message/Open in new _window" +msgstr "" + +#: src/mainwindow.c:466 +msgid "/_Message/View _source" +msgstr "" + +#: src/mainwindow.c:467 +msgid "/_Message/Show all _header" +msgstr "" + +#: src/mainwindow.c:468 +msgid "/_Message/Re_edit" +msgstr "" + +#: src/mainwindow.c:470 +msgid "/_Summary" +msgstr "" + +#: src/mainwindow.c:471 +msgid "/_Summary/_Delete duplicated messages" +msgstr "" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Filter messages" +msgstr "" + +#: src/mainwindow.c:474 +msgid "/_Summary/E_xecute" +msgstr "" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Update" +msgstr "" + +#: src/mainwindow.c:476 src/mainwindow.c:480 src/mainwindow.c:482 +msgid "/_Summary/---" +msgstr "" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Prev message" +msgstr "" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Next message" +msgstr "" + +#: src/mainwindow.c:479 +msgid "/_Summary/N_ext unread message" +msgstr "" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Go to other folder" +msgstr "" + +#: src/mainwindow.c:483 +msgid "/_Summary/_Sort" +msgstr "" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "" + +#: src/mainwindow.c:485 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "" + +#: src/mainwindow.c:486 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "" + +#: src/mainwindow.c:487 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "" + +#: src/mainwindow.c:488 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "" + +#: src/mainwindow.c:489 +msgid "/_Summary/_Sort/---" +msgstr "" + +#: src/mainwindow.c:490 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "" + +#: src/mainwindow.c:492 +msgid "/_Summary/_Thread view" +msgstr "" + +#: src/mainwindow.c:493 +msgid "/_Summary/Unt_hread view" +msgstr "" + +#: src/mainwindow.c:494 +msgid "/_Summary/Set display _item..." +msgstr "" + +#: src/mainwindow.c:498 +msgid "/_Tool/_Log window" +msgstr "" + +#: src/mainwindow.c:500 +msgid "/_Configuration" +msgstr "" + +#: src/mainwindow.c:501 +msgid "/_Configuration/_Common preferences..." +msgstr "" + +#: src/mainwindow.c:503 +msgid "/_Configuration/_Filter setting..." +msgstr "" + +#: src/mainwindow.c:505 +msgid "/_Configuration/_Preferences per account..." +msgstr "" + +#: src/mainwindow.c:507 +msgid "/_Configuration/---" +msgstr "" + +#: src/mainwindow.c:508 +msgid "/_Configuration/Create _new account..." +msgstr "" + +#: src/mainwindow.c:510 +msgid "/_Configuration/_Edit accounts..." +msgstr "" + +#: src/mainwindow.c:512 +msgid "/_Configuration/C_hange current account" +msgstr "" + +#: src/mainwindow.c:516 +msgid "/_Help/_Manual" +msgstr "" + +#: src/mainwindow.c:517 +msgid "/_Help/_Manual/_English" +msgstr "" + +#: src/mainwindow.c:518 +msgid "/_Help/_Manual/_Japanese" +msgstr "" + +#: src/mainwindow.c:519 +msgid "/_Help/---" +msgstr "" + +#: src/mainwindow.c:548 +msgid "Creating main window...\n" +msgstr "" + +#: src/mainwindow.c:667 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "" + +#: src/mainwindow.c:810 src/mainwindow.c:827 +msgid "Untitled" +msgstr "" + +#: src/mainwindow.c:828 +msgid "none" +msgstr "" + +#: src/mainwindow.c:837 +#, c-format +msgid "Current account: %s" +msgstr "" + +#: src/mainwindow.c:928 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "" + +#: src/mainwindow.c:936 +msgid "Empty trash" +msgstr "" + +#: src/mainwindow.c:937 +msgid "Empty all messages in trash?" +msgstr "" + +#: src/mainwindow.c:964 +msgid "Add mailbox" +msgstr "" + +#: src/mainwindow.c:965 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" + +#: src/mainwindow.c:971 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "" + +#: src/mainwindow.c:976 src/setup.c:57 +msgid "Mailbox" +msgstr "" + +#: src/mainwindow.c:982 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" + +#: src/mainwindow.c:1127 +msgid "Setting widgets..." +msgstr "" + +#: src/mainwindow.c:1328 +msgid "Get" +msgstr "" + +#: src/mainwindow.c:1329 +msgid "Incorporate new mail" +msgstr "" + +#: src/mainwindow.c:1334 +msgid "Get all" +msgstr "" + +#: src/mainwindow.c:1335 +msgid "Incorporate new mail of all accounts" +msgstr "" + +#: src/mainwindow.c:1346 +msgid "Send queued message(s)" +msgstr "" + +#: src/mainwindow.c:1356 src/prefs_account.c:461 src/prefs_common.c:597 +msgid "Compose" +msgstr "" + +#: src/mainwindow.c:1357 +msgid "Compose new message" +msgstr "" + +#: src/mainwindow.c:1364 +msgid "Reply" +msgstr "" + +#: src/mainwindow.c:1365 +msgid "Reply to the message" +msgstr "" + +#: src/mainwindow.c:1372 +msgid "Reply all" +msgstr "" + +#: src/mainwindow.c:1373 +msgid "Reply to all" +msgstr "" + +#: src/mainwindow.c:1380 +msgid "Forward" +msgstr "" + +#: src/mainwindow.c:1381 +msgid "Forward the message" +msgstr "" + +#: src/mainwindow.c:1392 +msgid "Delete the message" +msgstr "" + +#: src/mainwindow.c:1400 +msgid "Execute" +msgstr "" + +#: src/mainwindow.c:1401 +msgid "Execute marked process" +msgstr "" + +#: src/mainwindow.c:1411 +msgid "Next" +msgstr "" + +#: src/mainwindow.c:1412 +msgid "Next unread message" +msgstr "" + +#: src/mainwindow.c:1422 +msgid "Prefs" +msgstr "" + +#: src/mainwindow.c:1423 +msgid "Common preference" +msgstr "" + +#: src/mainwindow.c:1430 +msgid "Account" +msgstr "" + +#: src/mainwindow.c:1431 +msgid "Account setting" +msgstr "" + +#: src/mainwindow.c:1641 src/summaryview.c:2517 +msgid "Exit" +msgstr "" + +#: src/mainwindow.c:1641 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "" + +#: src/mainwindow.c:1775 +msgid "Sending queued message failed." +msgstr "" + +#: src/mainwindow.c:1892 +#, c-format +msgid "forced charset: %s\n" +msgstr "" + +#: src/mbox.c:68 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "" + +#: src/mbox.c:78 +msgid "can't read mbox file.\n" +msgstr "" + +#: src/mbox.c:85 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "" + +#: src/mbox.c:92 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "" + +#: src/mbox.c:109 +msgid "can't open temporary file\n" +msgstr "" + +#: src/mbox.c:159 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" + +#: src/mbox.c:194 +msgid "can't write to temporary file\n" +msgstr "" + +#: src/mbox.c:226 +#, c-format +msgid "%d messages found.\n" +msgstr "" + +#: src/mbox.c:243 +#, c-format +msgid "can't create lock file %s\n" +msgstr "" + +#: src/mbox.c:244 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "" + +#: src/mbox.c:256 +#, c-format +msgid "can't create %s\n" +msgstr "" + +#: src/mbox.c:262 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "" + +#: src/mbox.c:291 +#, c-format +msgid "can't lock %s\n" +msgstr "" + +#: src/mbox.c:298 src/mbox.c:345 +msgid "invalid lock type\n" +msgstr "" + +#: src/mbox.c:331 +#, c-format +msgid "can't unlock %s\n" +msgstr "" + +#: src/mbox.c:362 +msgid "can't truncate mailbox to zero.\n" +msgstr "" + +#: src/mbox.c:383 +#, c-format +msgid "Exporting messages from %s into %s...\n" +msgstr "" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "" + +#: src/mh.c:181 src/mh.c:258 src/mh.c:346 src/mh.c:413 +msgid "Can't open mark file.\n" +msgstr "" + +#: src/mh.c:192 src/mh.c:276 src/mh.c:357 src/mh.c:431 +#, c-format +msgid "%s already exists." +msgstr "" + +#: src/mh.c:348 src/mh.c:422 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:586 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "" + +#: src/mh.c:785 +msgid "\tSearching uncached messages... " +msgstr "" + +#: src/mh.c:840 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "" + +#: src/mh.c:846 +msgid "\tSorting uncached messages in numerical order... " +msgstr "" + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "" + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "" + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "" + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_filter.c:512 src/prefs_filter.c:536 +msgid "failed to write configuration to file\n" +msgstr "" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "" + +#: src/prefs_account.c:457 src/prefs_common.c:593 +msgid "Receive" +msgstr "" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "" + +#: src/prefs_account.c:777 src/prefs_filter.c:238 +msgid "Header" +msgstr "" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "" + +#: src/prefs_account.c:796 src/prefs_common.c:1200 +msgid " Edit... " +msgstr "" + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "" + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "" + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "" + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "" + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "" + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "" + +#: src/prefs_common.c:570 +msgid "Creating common preferences window...\n" +msgstr "" + +#: src/prefs_common.c:574 +msgid "Common Preferences" +msgstr "" + +#: src/prefs_common.c:599 +msgid "Display" +msgstr "" + +#: src/prefs_common.c:601 +msgid "Message" +msgstr "" + +#: src/prefs_common.c:604 +msgid "Privacy" +msgstr "" + +#: src/prefs_common.c:607 +msgid "Interface" +msgstr "" + +#: src/prefs_common.c:609 +msgid "Other" +msgstr "" + +#: src/prefs_common.c:649 src/prefs_common.c:809 +msgid "External program" +msgstr "" + +#: src/prefs_common.c:658 +msgid "Use external program for incorporation" +msgstr "" + +#: src/prefs_common.c:665 src/prefs_common.c:826 +msgid "Program path" +msgstr "" + +#: src/prefs_common.c:677 +msgid "Local spool" +msgstr "" + +#: src/prefs_common.c:688 +msgid "Incorporate from spool" +msgstr "" + +#: src/prefs_common.c:690 +msgid "Filter on incorporation" +msgstr "" + +#: src/prefs_common.c:698 +msgid "Spool directory" +msgstr "" + +#: src/prefs_common.c:718 +msgid "Auto-check new mail" +msgstr "" + +#: src/prefs_common.c:720 +msgid "each" +msgstr "" + +#: src/prefs_common.c:732 +msgid "minute(s)" +msgstr "" + +#: src/prefs_common.c:741 +msgid "Check new mail on startup" +msgstr "" + +#: src/prefs_common.c:743 +msgid "News" +msgstr "" + +#: src/prefs_common.c:751 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" + +#: src/prefs_common.c:819 +msgid "Use external program for sending" +msgstr "" + +#: src/prefs_common.c:843 +msgid "Save sent message to outbox" +msgstr "" + +#: src/prefs_common.c:845 +msgid "Queue message that failed to send" +msgstr "" + +#: src/prefs_common.c:851 +msgid "Outgoing codeset" +msgstr "" + +#: src/prefs_common.c:866 +msgid "Automatic" +msgstr "" + +#: src/prefs_common.c:867 +msgid "7bit ascii (US-ASCII)" +msgstr "" + +#: src/prefs_common.c:869 +msgid "Unicode (UTF-8)" +msgstr "" + +#: src/prefs_common.c:871 +msgid "Western European (ISO-8859-1)" +msgstr "" + +#: src/prefs_common.c:873 +msgid "Central European (ISO-8859-2)" +msgstr "" + +#: src/prefs_common.c:874 +msgid "Baltic (ISO-8859-13)" +msgstr "" + +#: src/prefs_common.c:875 +msgid "Baltic (ISO-8859-4)" +msgstr "" + +#: src/prefs_common.c:876 +msgid "Greek (ISO-8859-7)" +msgstr "" + +#: src/prefs_common.c:877 +msgid "Turkish (ISO-8859-9)" +msgstr "" + +#: src/prefs_common.c:878 +msgid "Cyrillic (ISO-8859-5)" +msgstr "" + +#: src/prefs_common.c:879 +msgid "Cyrillic (KOI8-R)" +msgstr "" + +#: src/prefs_common.c:880 +msgid "Cyrillic (Windows-1251)" +msgstr "" + +#: src/prefs_common.c:881 +msgid "Cyrillic (KOI8-U)" +msgstr "" + +#: src/prefs_common.c:883 +msgid "Japanese (ISO-2022-JP)" +msgstr "" + +#: src/prefs_common.c:885 +msgid "Japanese (EUC-JP)" +msgstr "" + +#: src/prefs_common.c:886 +msgid "Japanese (Shift_JIS)" +msgstr "" + +#: src/prefs_common.c:889 +msgid "Simplified Chinese (GB2312)" +msgstr "" + +#: src/prefs_common.c:890 +msgid "Traditional Chinese (Big5)" +msgstr "" + +#: src/prefs_common.c:892 +msgid "Traditional Chinese (EUC-TW)" +msgstr "" + +#: src/prefs_common.c:893 +msgid "Chinese (ISO-2022-CN)" +msgstr "" + +#: src/prefs_common.c:895 +msgid "Korean (EUC-KR)" +msgstr "" + +#: src/prefs_common.c:945 +msgid "Quotation" +msgstr "" + +#: src/prefs_common.c:953 +msgid "Quote message when replying" +msgstr "" + +#: src/prefs_common.c:959 +msgid "Quotation mark" +msgstr "" + +#: src/prefs_common.c:972 +msgid "Quotation format:" +msgstr "" + +#: src/prefs_common.c:977 +msgid " Description of symbols " +msgstr "" + +#: src/prefs_common.c:1004 +msgid "Insert signature automatically" +msgstr "" + +#: src/prefs_common.c:1010 +msgid "Signature separator" +msgstr "" + +#: src/prefs_common.c:1028 +msgid "Wrap messages at" +msgstr "" + +#: src/prefs_common.c:1040 +msgid "characters" +msgstr "" + +#: src/prefs_common.c:1048 +msgid "Wrap quotation" +msgstr "" + +#: src/prefs_common.c:1050 +msgid "Wrap before sending" +msgstr "" + +#: src/prefs_common.c:1086 +msgid "Font" +msgstr "" + +#: src/prefs_common.c:1095 +msgid "Text" +msgstr "" + +#: src/prefs_common.c:1118 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "" + +#: src/prefs_common.c:1121 +msgid "Display unread number next to folder name" +msgstr "" + +#. ---- Summary ---- +#: src/prefs_common.c:1125 +msgid "Summary View" +msgstr "" + +#: src/prefs_common.c:1134 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "" + +#: src/prefs_common.c:1136 +msgid "Enable horizontal scroll bar" +msgstr "" + +#: src/prefs_common.c:1143 +msgid " Set display item of summary... " +msgstr "" + +#: src/prefs_common.c:1195 +msgid "Enable coloration of message" +msgstr "" + +#: src/prefs_common.c:1214 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "" + +#: src/prefs_common.c:1216 +msgid "Display header pane above message view" +msgstr "" + +#: src/prefs_common.c:1218 +msgid "Display short headers on message view" +msgstr "" + +#: src/prefs_common.c:1228 +msgid "Line space" +msgstr "" + +#: src/prefs_common.c:1242 src/prefs_common.c:1282 +msgid "pixel(s)" +msgstr "" + +#: src/prefs_common.c:1247 +msgid "Leave space on head" +msgstr "" + +#: src/prefs_common.c:1249 +msgid "Scroll" +msgstr "" + +#: src/prefs_common.c:1256 +msgid "Half page" +msgstr "" + +#: src/prefs_common.c:1262 +msgid "Smooth scroll" +msgstr "" + +#: src/prefs_common.c:1268 +msgid "Step" +msgstr "" + +#: src/prefs_common.c:1327 +msgid "Encrypt message by default" +msgstr "" + +#: src/prefs_common.c:1330 +msgid "Sign message by default" +msgstr "" + +#: src/prefs_common.c:1333 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1336 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1343 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1440 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "" + +#: src/prefs_common.c:1447 +msgid "Open first unread message when entering a folder" +msgstr "" + +#: src/prefs_common.c:1451 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1459 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1466 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" + +#: src/prefs_common.c:1471 +msgid "On exit" +msgstr "" + +#: src/prefs_common.c:1479 +msgid "Confirm on exit" +msgstr "" + +#: src/prefs_common.c:1486 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1488 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1525 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "" + +#: src/prefs_common.c:1532 src/prefs_common.c:1556 src/prefs_common.c:1572 +msgid "Command" +msgstr "" + +#: src/prefs_common.c:1549 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "" + +#: src/prefs_common.c:1565 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "" + +#: src/prefs_common.c:1626 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1634 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1672 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1678 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1684 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1690 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1697 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:1745 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:1748 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:1751 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:1754 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:1878 +msgid "Description of symbols" +msgstr "" + +#: src/prefs_common.c:1905 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" + +#: src/prefs_common.c:2008 +msgid "Set display item" +msgstr "" + +#: src/prefs_common.c:2025 +msgid "Mark" +msgstr "" + +#: src/prefs_common.c:2027 +msgid "MIME" +msgstr "" + +#: src/prefs_common.c:2028 +msgid "Number" +msgstr "" + +#: src/prefs_common.c:2030 src/summaryview.c:351 +msgid "Date" +msgstr "" + +#: src/prefs_common.c:2031 src/summaryview.c:352 +msgid "From" +msgstr "" + +#: src/prefs_common.c:2032 src/summaryview.c:353 +msgid "Subject" +msgstr "" + +#: src/prefs_common.c:2085 +msgid "Font selection" +msgstr "" + +#: src/prefs_filter.c:178 +msgid "Registered rules" +msgstr "" + +#: src/prefs_filter.c:180 +msgid "Creating filter setting window...\n" +msgstr "" + +#: src/prefs_filter.c:199 +msgid "Filter setting" +msgstr "" + +#: src/prefs_filter.c:222 +msgid "Operator" +msgstr "" + +#: src/prefs_filter.c:260 src/prefs_filter.c:620 src/prefs_filter.c:759 +#: src/prefs_filter.c:771 +msgid "(none)" +msgstr "" + +#: src/prefs_filter.c:266 +msgid "Keyword" +msgstr "" + +#: src/prefs_filter.c:287 +msgid "Predicate" +msgstr "" + +#: src/prefs_filter.c:299 src/prefs_filter.c:310 src/prefs_filter.c:629 +#: src/prefs_filter.c:632 src/prefs_filter.c:776 src/prefs_filter.c:779 +msgid "contains" +msgstr "" + +#: src/prefs_filter.c:299 src/prefs_filter.c:310 src/prefs_filter.c:776 +#: src/prefs_filter.c:779 +msgid "not contain" +msgstr "" + +#: src/prefs_filter.c:326 +msgid "Destination" +msgstr "" + +#: src/prefs_filter.c:350 +msgid "Use regex" +msgstr "" + +#: src/prefs_filter.c:354 +msgid "Don't receive" +msgstr "" + +#: src/prefs_filter.c:379 +msgid "Register" +msgstr "" + +#: src/prefs_filter.c:385 +msgid " Substitute " +msgstr "" + +#: src/prefs_filter.c:472 +msgid "Reading filter configuration...\n" +msgstr "" + +#: src/prefs_filter.c:508 +msgid "Writing filter configuration...\n" +msgstr "" + +#: src/prefs_filter.c:551 +msgid "(New)" +msgstr "" + +#: src/prefs_filter.c:602 +msgid "Destination is not set." +msgstr "" + +#: src/prefs_filter.c:607 +msgid "Header name is not set." +msgstr "" + +#: src/prefs_filter.c:713 +msgid "Delete rule" +msgstr "" + +#: src/prefs_filter.c:714 +msgid "Do you really want to delete this rule?" +msgstr "" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "" + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "" + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "" + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "" + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "" + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "" + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "" + +#: src/summaryview.c:320 +msgid "M" +msgstr "" + +#: src/summaryview.c:320 +msgid "U" +msgstr "" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "" + +#: src/summaryview.c:350 +msgid "No." +msgstr "" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "" + +#: src/summaryview.c:673 +msgid "done." +msgstr "" + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "" + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr "" + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr "" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "" + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "" + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "" + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "" + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "" + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "" + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "" + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "" + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "" + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "" + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "" + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "" + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "" + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "" + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "" diff --git a/po/zh_CN.GB2312.gmo b/po/zh_CN.GB2312.gmo new file mode 100644 index 0000000000000000000000000000000000000000..262d4f6e5e6a41de211fd3592828fcdddfe03181 GIT binary patch literal 42290 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 literal 0 HcmV?d00001 diff --git a/po/zh_CN.GB2312.po b/po/zh_CN.GB2312.po new file mode 100644 index 000000000..fe42e3b7b --- /dev/null +++ b/po/zh_CN.GB2312.po @@ -0,0 +1,3734 @@ +# Chinese translation of Sylpheed. +# Copyright (C) 2000 Free Software Foundation, Inc. +# Xiangxin Luo <benluo@etang.com>, 2000 for initial GB2312 translation +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2000-12-21 21:49+0900\n" +"Last-Translator: Xiangxin Luo <benluo@etang.com>\n" +"Language-Team: Xiangxin Luo <benluo@etang.com>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=GB2312\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "¹ØÓÚ" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "È·¶¨" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "ÕýÔÚΪÿ¸öÕÊ»§¶ÁÈ¡ÅäÖÃ...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "ÕÒµ½±êÇ©£º%s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "ÕýÔÚ´ò¿ªÕÊ»§±à¼­´°¿Ú...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "ÕýÔÚ´´½¨ÕÊ»§±à¼­´°¿Ú...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "±à¼­ÕÊ»§" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "ÐÕÃû" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "ЭÒé" + +#: src/account.c:382 +msgid "Server" +msgstr "·þÎñÆ÷" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "Ìí¼Ó" + +#: src/account.c:407 +msgid "Edit" +msgstr "±à¼­" + +#: src/account.c:413 +msgid " Delete " +msgstr "ɾ³ý" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "ÍùÏÂ" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "ÍùÉÏ" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr "É趨Ϊͨ³£Ê¹ÓõÄÕÊ»§" + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "¹Ø±Õ" + +#: src/account.c:498 +msgid "Delete account" +msgstr "ɾ³ýÕÊ»§" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "ÄãȷʵÏëҪɾ³ý¸ÃÕÊ»§Âð£¿" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "ÊÇ" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+²»ÊÇ" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/Îļþ(_F)" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/Îļþ(_F)/еØÖ·(_a)" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/Îļþ(_F)/ÐÂ×é(_g)" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/Îļþ(_F)/ÐÂÎļþ¼Ð(_f)" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/Îļþ(_F)/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/Îļþ(_F)/±à¼­(_E)" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/Îļþ(_F)/ɾ³ý(_D)" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/Îļþ(_F)/¹Ø±Õ(_C)" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/°ïÖú(_H)" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/°ïÖú(_H)/¹ØÓÚ(_A)" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/еØÖ·(_a)" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/ÐÂ×é(_g)" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/ÐÂÎļþ¼Ð(_f)" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/±à¼­(_E)" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/ɾ³ý(_D)" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "E-MailµØÖ·" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "ÖØбê¼Ç" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "µØÖ·²¾" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "ÐÕÃû£º" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "ɾ³ý" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "²éÕÒ" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "ÖÂ(To)£º" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "³­ËÍ(Cc)£º" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "°µ³­ËÍ(Bcc)£º" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "¹«¹²µØÖ·" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "˽È˵ØÖ·" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "ɾ³ýµØÖ·" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "ȷʵҪɾ³ýµØÖ·£¿" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "²»" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "ÐÂÎļþ¼Ð" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "ÊäÈëÐÂÎļþ¼ÐµÄÃû×Ö£º" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "ÐÂÎļþ¼Ð" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "¸ÃÃû×ÖÒÑ´æÔÚ¡£" + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "ÐÂȺ×é" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "ÊäÈëÐÂȺ×éµÄÃû×Ö" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "ÐÂȺ×é" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "±à¼­Èº×é" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "ÊäÈëȺ×éµÄÐÂÃû×Ö" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "±à¼­Îļþ¼Ð" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "ÊäÈëÎļþ¼ÐµÄÐÂÃû×Ö£º" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "ȷʵҪɾ³ý `%s' ? " + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "±à¼­µØÖ·" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "µØÖ·" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "È¡Ïû" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "¶ÁÈ¡µØÖ·²¾Îļþ..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s ²»´æÔÚ¡£\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "Íê³É¡£\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "µ¼³öµØÖ·²¾µ½Îļþ..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "дµØÖ·²¾Êý¾Ýʧ°Ü¡£\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "×¢Òâ" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "¾¯¸æ" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "´íÎó" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "ÕýÔÚ´´½¨¾¯¸æÃæ°å¶Ô»°¿ò... \n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "²»ÄÜ»ñµÃÄÚ´æ \n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/Ìí¼Ó...(_A)" + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/ÒÆÈ¥(_R)" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/ÊôÐÔ...(_P)" + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/Îļþ(_F)/¸½¼ÓÎļþ(_A)" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/Îļþ(_F)/²åÈëÎļþ(_I)" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/Îļþ(_F)/²åÈëÇ©Ãû(_g)" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/±à¼­(_E)/³·Ïú(_U)" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/±à¼­(_E)/Öظ´(_R)" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/±à¼­(_E)/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/±à¼­(_E)/¼ôÇÐ(_t)" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/±à¼­(_E)/¸´ÖÆ(_C)" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/±à¼­(_E)/Õ³Ìù(_P)" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/±à¼­(_E)/È«Ñ¡(_a)" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/±à¼­(_E)/³¤ÐÐ×Ô¶¯»»ÐÐ(_l)" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/±à¼­(_E)/ÓÃÍⲿ±à¼­Æ÷±à¼­(_x)" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/Óʼþ(_M)" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/Óʼþ(_M)/·¢ËÍ(_S)" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/Óʼþ(_M)/ÒÔºó·¢ËÍ(_l)" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/Óʼþ(_M)/±£´æµ½²Ý¸åÎļþ¼Ð(_d)" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/Óʼþ(_M)/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/Óʼþ(_M)/°µ³­ËÍ(_B)" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/Óʼþ(_M)/»Ø¸´(_R)" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/Óʼþ(_M)/¸½¼þ(_A)" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/¹¤¾ß(_T)" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/¹¤¾ß(_T)/ÏÔʾ±ê³ß(_r)" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/¹¤¾ß(_T)/µØÖ·²¾(_A)" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "%s: ²»Äܵõ½Îı¾²¿·Ö\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: Îļþ²»´æÔÚ\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"¿ªÊ¼×ª·¢µÄÐżþ£º\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "Îļþ %s ²»´æÔÚ \n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "²»ÄÜ»ñµÃÎļþ %s µÄ´óС \n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "Îļþ %s ÊÇ¿ÕµÄ \n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "Óʼþ£º%s" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr "" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - ׫дÓʼþ%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "׫дÓʼþ%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "ÊÕÐÅÈËûָ¶¨¡£" + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "ÕýÔÚÅŶÓ" + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"ÔÚ·¢ËÍÓʼþʱ·¢Éú´íÎó¡£\n" +"ÊÇ·ñ½«¸ÃÓʼþ·Åµ½ÅŶÓÎļþ¼ÐÖУ¿" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "¸ÃÓʼþ²»ÄÜÅŶӡ£" + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "ÔÚ·¢ËÍÓʼþʱ·¢Éú´íÎó¡£" + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "²»Äܽ«¸ÃÓʼþ±£´æµ½·¢¼þÏä¡£" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "²»ÄܸıäÎļþÊôÐÔ \n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "²»Äܸıä¸ÃÓʼþµÄ×Ö·û¼¯" + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "²»ÄÜд±êÌâ\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "±£´æÒÑ·¢Ë͵ÄÓʼþ... \n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "²»Äܱ£´æÓʼþ\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "²»ÄÜ´ò¿ª±ê¼ÇÎļþ \n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "ÕýÔÚÅŶÓÓʼþ...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "¸ÃÓʼþ²»ÄÜÅŶÓ\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "²»ÄÜ´ò¿ªÎļþ%s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "ÒÑÉú³ÉÓʼþ±êʶºÅ£º%s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME ÀàÐÍ" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "´óС" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "´´½¨×«Ð´´°¿Ú...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "·¢¼þÈË£º" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "·¢ËÍ" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "·¢ËÍÓʼþ" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "ÒÔºó·¢ËÍ" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "·ÅÈëÅŶÓÎļþ¼ÐÒÔºó·¢ËÍ" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "²Ý¸å" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "±£´æµ½²Ý¸åÎļþ¼Ð" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "²åÈë" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "²åÈëÎļþ" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "¸½¼þ" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "¸½¼ÓÎļþ" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "Ç©Ãû" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "²åÈëÇ©Ãû" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "±à¼­Æ÷" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "ÓÃÍⲿ±à¼­Æ÷±à¼­" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "»»ÐÐ" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "³¤ÐÐ×Ô¶¯»»ÐÐ" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "ÎÞЧMIMEÀàÐÍ" + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Îļþ²»´æÔÚ»òΪ¿Õ¡£" + +#: src/compose.c:3022 +msgid "Property" +msgstr "ÊôÐÔ" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "±àÂë" + +#: src/compose.c:3065 +msgid "Path" +msgstr "·¾¶" + +#: src/compose.c:3066 +msgid "File name" +msgstr "ÎļþÃû" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "Íⲿ±à¼­Æ÷ÃüÁîÐÐÎÞЧ£º`%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"Íⲿ±à¼­Æ÷ÈÔÔÚ¹¤×÷¡£\n" +"Ç¿ÖƽáÊø³ÌÐò£¿\n" +"³ÌÐò×é±êʶºÅ£º%d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "ÒѽáÊø³ÌÐò×é±êʶºÅ£º%d" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "ÁÙʱÎļþ£º%s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "׫д£º´Ó¼àÌý½ø³ÌÖÐÊäÈë\n" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "²»ÄÜÖ´ÐÐÍⲿ±à¼­Æ÷\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "²»ÄÜдÈëÎļþ\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "¹ÜµÀ¶Áȡʧ°Ü\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "Ñ¡ÔñÎļþ" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "¶ªÆúÎļþ" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "¸ÃÓʼþÒѸü¸Ä¡£¶ªÆúËü£¿" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "¶ªÆú" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "È¥²Ý¸å" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "Ñ¡ÔñÎļþ¼Ð" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/´´½¨ÐÂÎļþ¼Ð(_N)..." + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/Îļþ¼ÐÖØÃüÃû(_R)..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/ɾ³ýÎļþ¼Ð(_D)" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/¶©ÔÄÐÂÎÅ×é(_S)..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/ÐÂÎÅ×éÖØÃüÃû(_R)" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "ÒÆÈ¥ÐÂÎÅ×é·þÎñÆ÷(_n)" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "Îļþ¼Ð" + +#: src/folderview.c:234 +msgid "New" +msgstr "н¨" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "δ¶ÁÈ¡" + +#: src/folderview.c:235 +msgid "#" +msgstr "" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "´´½¨Îļþ¼ÐÊÓͼ...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "ÉèÖÃÎļþ¼ÐÐÅÏ¢...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "ÉèÖÃÎļþ¼ÐÐÅÏ¢..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "ɨÃèÎļþ¼Ð %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "ɨÃèÎļþ¼Ð %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "" + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "ÊÕ¼þÏä" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "·¢¼þÏä" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "¶ÓÁÐ" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "À¬»øÏä" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "Îļþ¼Ð %s Ñ¡ÔñÁË\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "×Ö·û`%c'²»ÄÜ°üº¬ÔÚÎļþ¼ÐÃû×ÖÖС£" + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "Îļþ¼Ð`%s'ÒÑ´æÔÚ¡£" + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "Ϊ`%s'ÊäÈëÐÂÃû×Ö£º" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "Îļþ¼ÐÖØÃüÃû" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"ËùÓÐÔÚ`%s'ϵÄÎļþ¼ÐºÍÓʼþ½«±»É¾³ý¡£\n" +"ÄãȷʵϣÍûɾ³ýÂð£¿" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "ɾ³ýÎļþ¼Ð" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "²»ÄÜÒÆÈ¥Îļþ¼Ð `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "¶©ÔÄÐÂÎÅ×é" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "ÊäÈëÒª¶©ÔĵÄÐÂÎÅ×飺" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "ÐÂÎÅ×é`%s'ÒÑ´æÔÚ¡£" + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "ȷʵҪɾ³ýÐÂÎÅ×é `%s'£¿" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "ɾ³ýÐÂÎÅ×é" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "ȷʵҪɾ³ýÐÂÎÅ·þÎñÆ÷ `%s'£¿" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "ɾ³ýÐÂÎÅ·þÎñÆ÷" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "ÐÂÎÅ×飺" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "±êÌ⣺" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "ÕýÔÚ´´½¨±êÌâÊÓͼ...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "£¨Ã»Óз¢¼þÈË£©" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "£¨Ã»ÓÐÖ÷Ì⣩" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "´´½¨±êÌâ´°¿Ú...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "ËùÓбêÌâ" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "ÏÔʾ %s µÄ±êÌâ...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - ËùÓбêÌâ" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "ÕýÔÚ´´½¨Í¼ÏñÊÓͼ...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "²»ÄܼÓÔظÃͼÏñ¡£" + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "µ½ %s:%d µÄ IMAP4Á¬½ÓÒѶϿª¡£ÖØÐÂÁ¬½Ó...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "ÕýÔÚ´´½¨µ½ %s:%d µÄ IMAP4Á¬½Ó...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "Óʼþ %d ÒÑ»º´æ¹ý¡£\n" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "ÕýÔÚÈ¡µÃÓʼþ %d...\n" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "Ô´Îļþ¼ÐÓëÄ¿µÄÎļþ¼ÐÊÇͬһ¸ö¡£\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "ÕýÔÚÒƶ¯ %s%c%d µ½ %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "²»ÄÜ»ñµÃÐÅ·â\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "»ñÈ¡ÐÅ·âʱ·¢Éú´íÎó¡£\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "²»ÄܽâÎöÐŷ⣺%s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "ÕýÔÚɾ³ýÓʼþ %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\tÕýÔÚɾ³ýËùÓлº´æ´íµÄÓʼþ... " + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "²»ÄÜÁ¬½Óµ½IMAP4·þÎñÆ÷£º%s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "IMAP4 ×¢²áʧ°Ü¡£\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "µ¼Èë" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "µ¼ÈëÎļþ£º" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "Ä¿±êĿ¼£º" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "Ñ¡Ôñ..." + +#: src/import.c:201 +msgid "Select importing file" +msgstr "Ñ¡Ôñµ¼ÈëÎļþ" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "È¡µÃÐÂÓʼþ" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "" + +#: src/inc.c:336 +msgid "Input password" +msgstr "ÊäÈëÃÜÂë" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "ÕýÔÚ´Ó %s ÕÊ»§È¡µÃÐÂÓʼþ...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s£ºÕýÔÚÈ¡»ØÐÂÓʼþ" + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "ÕýÔÚÁ¬½ÓPOP3·þÎñÆ÷£º%s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "²»ÄÜÁ¬½ÓPOP3·þÎñÆ÷£º%s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "²»ÄÜÁ¬½ÓPOP3·þÎñÆ÷£º%s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "ÕýÔÚÑéÖ¤" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "ÕýÔÚÈ¡µÃÐÂÓʼþµÄÊýÁ¿" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "ÕýÔÚÈ¡»ØÓʼþ (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "ɾ³ýÓʼþ" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Í˳ö" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "ûÓÐÊÕµ½Óʼþ\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "ÔÚ´¦ÀíÓʼþʱ·¢Éú´íÎó¡£" + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "ûÓÐÊ£Óà´ÅÅ̿ռ䡣" + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "ûÓÐÓʼþÔÚ±¾µØÓÊÏä¡£\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "´Ó %s È¡ÐÂÓʼþµ½ %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "´´½¨ÈÕÖ¾´°¿Ú...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "ЭÒéÈÕÖ¾Îļþ" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"Îļþ`%s'ÒÑ´æÔÚ¡£\n" +"²»ÄÜ´´½¨Îļþ¼Ð¡£" + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "glib ²»Ö§³Ö g_thread¡£\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "ÓÐÕýÔÚ׫дµÄÓʼþ¡£È·¶¨ÒªÍ˳öÂð£¿" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "" + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/Îļþ(_F)/¸üÐÂÎļþ¼ÐÊ÷(_U)" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "" + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/Îļþ(_F)/µ¼ÈëmboxÎļþ..." + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/Îļþ(_F)/Áí´æΪ(_S)..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/Îļþ(_F)/´òÓ¡(_P)..." + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/Îļþ(_F)/Í˳ö(_X)" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/±à¼­(_E)/²éÕÒ(_S)" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/ÊÓͼ(_V)" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/ÊÓͼ(_V)/Îļþ¼ÐÊ÷(_F)" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/ÊÓͼ(_V)/ÓʼþÊÓͼ(_M)" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ͼ±êºÍÎÄ×Ö(_A)" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ͼ±ê(_I)" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/ÎÄ×Ö(_T)" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/ÊÓͼ(_V)/¹¤¾ßÌõ(_T)/²»ÏÔʾ(_N)" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/ÊÓͼ(_V)/״̬À¸(_S)" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/ÊÓͼ(_V)/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/ÊÓͼ(_V)/µ¥¶ÀµÄÎļþ¼ÐÊ÷(_o)" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/ÊÓͼ(_V)/µ¥¶ÀµÄÓʼþÊÓͼ(_e)" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/×Ô¶¯¼ì²â(_A)" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/7λ ascii (US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Î÷Å· (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Î÷Å· (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/²¨ÂÞµÄÓï (ISO-8859-13)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/²¨ÂÞµÄÓï (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/Ï£À°Óï (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÍÁ¶úÆäÓï (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/˹À­·òÓï (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/˹À­·òÓï (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/˹À­·òÓï (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÈÕÓï (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/¼òÌåÖÐÎÄ (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/·±ÌåÖÐÎÄ (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/·±ÌåÖÐÎÄ (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/ÖÐÎÄ (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/³¯ÏÊÎÄ (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/ÊÓͼ(_V)/×Ö·û¼¯(_C)/³¯ÏÊÎÄ (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/Óʼþ(_M)/½ÓÊÕÐÂÓʼþ(_i)" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/Óʼþ(_M)/½ÓÊÕËùÓÐÕÊ»§µÄÐÂÓʼþ(_a)" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/Óʼþ(_M)/·¢ËͶÓÁÐÖеÄÓʼþ(_g)" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/Óʼþ(_M)/׫дÐÂÓʼþ(_n)" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/Óʼþ(_M)/»Ø¸´(_R)" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/Óʼþ(_M)/»Ø¸´ËùÓÐÓʼþ(_l)" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/Óʼþ(_M)/ת·¢(_F)" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/Óʼþ(_M)/×÷Ϊ¸½¼þת·¢(_t)" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/Óʼþ(_M)/ÒƵ½...(_o)" + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/Óʼþ(_M)/ɾ³ý(_D)" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/Óʼþ(_M)/±ê¼Ç(_M)" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼Ç(_M)" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/È¡Ïû±ê¼Ç(_U)" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼ÇΪδ¶Á(_e)" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/Óʼþ(_M)/±ê¼Ç(_M)/±ê¼ÇΪÒѶÁ(_b)" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/Óʼþ(_M)/ÔÚд°¿Ú´ò¿ª(_w)" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/Óʼþ(_M)/ÏÔʾËùÓÐÍ·(_h)" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/Óʼþ(_M)/ÖØб༭(_e)" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/ÕªÒª(_S)" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/ÕªÒª(_S)/ɾ³ýÖظ´Óʼþ(_D)" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/ÕªÒª(_S)/Óʼþ¹ýÂËÆ÷(_F)" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/ÕªÒª(_S)/Ö´ÐÐ(_x)" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/ÕªÒª(_S)/¸üÐÂ(_U)" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/ÕªÒª(_S)/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/ÕªÒª(_S)/ÉÏÒ»ÌõÓʼþ(_P)" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/ÕªÒª(_S)/ÏÂÒ»ÌõÓʼþ(_N)" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/ÕªÒª(_S)/ÏÂÒ»Ìõδ¶ÁÓʼþ(_e)" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/ÕªÒª(_S)/µ½ÁíÒ»¸öÎļþ¼Ð(_G)" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´ÐòºÅÅÅÐò(_n)" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´´óСÅÅÐò(_i)" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´ÈÕÆÚÅÅÐò(_d)" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´·¢ÐÅÈËÅÅÐò(_f)" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/°´±êÌâÅÅÐò(_s)" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/ÕªÒª(_S)/ÅÅÐò(_S)/¹ØÐĵıêÌâ(_A)" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/ÕªÒª(_S)/ÂÛÌâÊÓͼ(_T)" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/ÕªÒª(_S)/È¡ÏûÂÛÌâÊÓͼ(_h)" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/ÕªÒª(_S)/ÉèÖÃÏÔʾÏî...(_i)" + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/¹¤¾ß(_T)/ÈÕÖ¾´°¿Ú(_L)" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/ÅäÖÃ(_C)" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/ÅäÖÃ(_C)/ͨÓÃÅäÖÃ...(_C)" + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/ÅäÖÃ(_C)/ÿ¸öÕÊ»§µÄÅäÖÃ(_P)" + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/ÅäÖÃ(_C)/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/ÅäÖÃ(_C)/´´½¨ÐÂÕÊ»§(_n)" + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/ÅäÖÃ(_C)/±à¼­ÕÊ»§...(_E)" + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/ÅäÖÃ(_C)/¸Ä±äµ±Ç°ÕÊ»§(_h)" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/°ïÖú(_H)/ÊÖ²á(_M)" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/°ïÖú(_H)/ÊÖ²á(_M)/Ó¢Óï(_E)" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/°ïÖú(_H)/ÊÖ²á(_M)/ÈÕÓï(_J)" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/°ïÖú(_H)/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "ÕýÔÚ´´½¨Ö÷´°¿Ú...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "Ö÷´°¿Ú£º»ñÈ¡ %d ÑÕɫʧ°Ü\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "ÎÞ±êÌâ" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "ûÓÐ" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "µ±Ç°ÕË»§£º%s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "´°¿ÚλÖãºx = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "" + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "ÉèÖà widgets..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "»ñÈ¡" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "ÊÕÈ¡ÐÂÓʼþ" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "»ñÈ¡ËùÓеÄ" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "ÊÕÈ¡ËùÓÐÕË»§µÄÐÂÓʼþ" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "·¢ËÍÒÑÅŶӵÄÓʼþ" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "׫д" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "׫дÐÂÓʼþ" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "»ØÐÅ" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "»Ø¸´±¾Óʼþ" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "»Ø¸´ËùÓÐÓʼþ" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "»Ø¸´ËùÓÐÓʼþ" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "ת·¢" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "ת·¢¸ÃÓʼþ" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "ɾ³ý¸ÃÓʼþ" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "Ö´ÐÐ" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "Ö´Ðбê¼ÇµÄ½ø³Ì" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "ÏÂÒ»¸öδ¶ÁµÄÓʼþ" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "Æ«ºÃ" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "ͨÓÃÅäÖÃ" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "ÕË»§" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "ÉèÖÃÕË»§" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Í˳ö" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "ÒªÍ˳ö±¾³ÌÐò£¿" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "·¢ËÍÅŶÓÓʼþʧ°Ü¡£" + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "Ç¿ÖÆ×Ö·û¼¯£º%s\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "´Ó %s »ñÈ¡Óʼþµ½ %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "²»ÄܶÁ mbox Îļþ¡£\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "ÎÞЧ mbox ¸ñʽ£º%s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "»ûÐ뵀 mbox: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "²»ÄÜ´ò¿ªÁÙʱÎļþ\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "²»ÄÜдÈëÁÙʱÎļþ\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "ÕÒµ½ %d ·âÓʼþ¡£\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "²»ÄÜ´´½¨ËøÎļþ %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "Èç¹û¿ÉÄÜÓà 'flock' ´úÌæ 'file'¡£\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "²»ÄÜ´´½¨ %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "ÁíÒ»¸ö½ø³ÌÓµÓиÃÓÊÏ䣬µÈ´ý...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "²»ÄÜËø %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "ÎÞЧËøÀàÐÍ\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "%s ²»ÄÜ¿ªËø \n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "²»ÄÜ°ÑÓÊÏäɾµ½Áã¡£\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "´´½¨ÓʼþÊÓͼ...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "²»ÄÜ°ÑÓʼþ %s ¸´ÖƵ½ %s\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "²»ÄÜ´ò¿ª±ê¼ÇÎļþ¡£\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "" + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "±¾Ä¿Â¼µÄ×îºóÒ»¸öºÅÂë %s = %d\n" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "\tËÑË÷믧´æµÄÓʼþ... " + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "·¢ÏÖ %d ¸ö믧´æµÄÓʼþ\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "\tÕýÔÚ¸ù¾Ý±àºÅÅÅÁÐ믧´æµÄÓʼþ... " + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/´ò¿ª(_O)" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/×÷ΪÎı¾ÎļþÏÔʾ(_D)" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "Áí´æΪ...(_S)" + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME ÀàÐÍ" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "´´½¨ MIME ÊÓͼ...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "²»ÄÜ»ñµÃ¶à²¿·ÖÓʼþµÄÕâÒ»²¿·Ö¡£" + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "²»Äܱ£´æ¶à²¿·ÖÓʼþµÄÕâÒ»²¿·Ö¡£" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "Áí´æΪ" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "¸²¸Ç" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "¸²¸ÇÒÑ´æÔÚµÄÎļþ£¿" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "MIME ²ì¿´Æ÷ÃüÁîÐÐÎÞЧ`%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "´´½¨µ½ %s:%d µÄNNTPÁ¬½Ó...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "µ½ %s:%d µÄNNTPÁ¬½ÓÒ»¶Ï¿ª¡£ÖØÐÂÁ¬½Ó...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "ÎÄÕ %d ÒÑ»º´æ¹ý¡£\n" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "ÕýÔÚÈ¡µÃÎÄÕ %d...\n" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "²»ÄܶÁÎÄÕ %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "²»ÄÜÕÒµ½ÎÄÕ %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "²»ÄÜÉèÖÃ×飺%s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "ÎÞЧÎÄÕ·¶Î§£º%d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "ûÓÐÐÂÎÄÕ¡£\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "ÕýÔÚ»ñµÃ%sÀïµÄxover %d - %d ...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "²»ÄÜ»ñµÃxover\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "µ±»ñµÃxoverʱ·¢Éú´íÎó¡£\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "ÎÞЧxoverÐУº%s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "ÕýÔÚɾ³ýÎÄÕ %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\tɾ³ýËùÓлº´æ¹ýµÄÎÄÕÂ..." + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "²»ÄÜÁ¬½ÓNNTP·þÎñÆ÷£º%s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "ЭÒé´íÎó£º%s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "ЭÒé´íÎó\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "Ñé֤ʱ³ö´í\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "ÔÚÎʺòÐÅÏ¢ÖÐûÓз¢ÏÖÐèÒªµÄAPOPʱ¼ä±êÇ©¡£\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "ÔÚÎʺòÐÅÏ¢ÖÐʱ¼ä±êÇ©Óï·¨´í\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "POP3 ЭÒé´í\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "ÕýÔÚ¶ÁÈ¡ÅäÖÃÎļþ...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "·¢ÏÖ%s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "¶ÁÈ¡ÅäÖÃÎļþÒÑÍê³É¡£\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "дÈëÅäÖÃÎļþʧ°Ü\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "±£´æÅäÖÃÎļþ¡£\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "Ó¦ÓÃ" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "ÕýÔÚ´ò¿ªÕÊ»§ÅäÖô°¿Ú...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "ÕÊ»§%d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "ÐÂÕÊ»§µÄÅäÖÃ" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "Ϊÿһ¸öÕÊ»§µÄÅäÖÃ" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "ÕýÔÚ´´½¨ÕÊ»§ÅäÖô°¿Ú...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "»ù±¾ÐÅÏ¢" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "½ÓÊÕ" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "¸ß¼¶" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "ÕÊ»§Ãû³Æ" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "ͨ³£Ê¹ÓÃ" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "¸öÈË×ÊÁÏ" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "È«Ãû" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "ÓʼþµØÖ·" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "×éÖ¯" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "·þÎñÆ÷×ÊÁÏ" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 £¨ÆÕͨ£©" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "ûÓÐ(±¾µØ)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "½ÓÊÕ·þÎñÆ÷" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "SMTP ·þÎñÆ÷ (·¢ËÍ)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "Óû§Ãû" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "ÃÜÂë" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "Óʼþ½ÓÊÕÍêÒÔºó´Ó·þÎñÆ÷ɾ³ýÕâЩÓʼþ" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "½ÓÊÕËùÓÐÔÚ·þÎñÆ÷ÉϵÄÓʼþ" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "½ÓÊÕ´ÓËùÓÐÕÊ»§ÉÏÈ¡µÃµÄÓʼþ" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "ÔÚ½ÓÊÕÓʼþʱ¹ýÂË" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "Í·" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "Ìí¼ÓÈÕÆÚÍ·Óò" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "Éú³ÉÓʼþʶ±ðºÅ" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "Ìí¼ÓÓû§¶¨ÒåµÄÍ·" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "±à¼­..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "×Ô¶¯ÉèÖÃÒÔϵØÖ·" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "³­ËÍ" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "°µ³­ËÍ" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "»Ö¸´¸ø" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "Ç©ÃûÎļþ" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "ÌØÊâµÄSMTP¶Ë¿Ú" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "ÌØÊâµÄPOP3¶Ë¿Ú" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "ÌØÊâÓòÃû" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "ÓʼþµØַûÊäÈë¡£" + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "SMTP·þÎñÆ÷ûÊäÈë¡£" + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "Óû§ÃûûÊäÈë¡£" + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "POP3·þÎñÆ÷ûÊäÈë¡£" + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "IMAP4·þÎñÆ÷ûÊäÈë¡£" + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "NNTP·þÎñÆ÷ûÊäÈë¡£" + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "´´½¨Í¨ÓÃÅäÖô°¿Ú...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "ͨÓÃÅäÖÃ" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "ÏÔʾ" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "¹ýÂË" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "½çÃæ" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "ÆäËû" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "Íⲿ³ÌÐò" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "ÓÃÍⲿ³ÌÐòºÏ²¢" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "³ÌÐò·¾¶" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "±¾µØ spool" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "´ÓspoolºÏ²¢" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "Ôںϲ¢ÉϵĹýÂËÆ÷" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Spool Ŀ¼" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "×Ô¶¯¼ì²éÐÂÓʼþ" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "ÿһ¸ö" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "·ÖÖÓ" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "ÔÚÆô¶¯Ê±¼à²éÓʼþ" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "н¨" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "ÓÃÍⲿ³ÌÐò·¢ËÍ" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "½«ÒÑ·¢³öµÄÓʼþ±£´æÔÚ·¢¼þÏä" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "½«·¢ËÍʧ°ÜµÄÓʼþÅŶÓ" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "ËͳöµÄ×Ö·û¼¯" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "×Ô¶¯" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7λ ascii (US-ASCII) " + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "Î÷Å· (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "ÖÐÅ· (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "²¨ÂÞµÄÓï (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "²¨ÂÞµÄÓï (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "Ï£À°Óï (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "ÍÁ¶úÆäÓï (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "˹À­·òÓï (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "˹À­·òÓï (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "˹À­·òÓï (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "˹À­·òÓï (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "ÈÕÓï (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "ÈÕÓï (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "ÈÕÓï (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "¼òÌåÖÐÎÄ (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "·±ÌåÖÐÎÄ (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "·±ÌåÖÐÎÄ (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "ÖÐÎÄ (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "³¯ÏÊÎÄ (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "¸½¼ÓÔ­ÎÄ" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "µ±»ØÐÅʱ¸½¼ÓÔ­ÎÄ" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "¸½¼ÓÔ­ÎĵıêÖ¾" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "¸½¼ÓÔ­Îĵĸñʽ:" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr "·ûºÅµÄÃèÊö" + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "×Ô¶¯²åÈëÇ©Ãû" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "Ç©Ãû·Ö¸î·û" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "°ü×°Óʼþ" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "×Ö·û" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "°ü×°Ô­ÎÄ" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "ÔÚ·¢ËÍÇ°°ü×°" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "ÒÑ×¢²áµÄ¹æÔò" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "²Ù×÷·û" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(ÎÞ)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "¹Ø¼ü´Ê" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "ν´Ê" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "°üº¬" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "ûÓаüº¬" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "Ä¿µÄÎļþ" + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "ʹÓÃÕý¹æ±í´ïʽ" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "²»ÄܽÓÊÜ" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "×¢²á" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr "Ìæ´ú" + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "×ÖÌå" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "Óʼþ" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "ʹÓʼþ²ÊÉ«±íʾÉúЧ" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "ÓÃ1-×Ö½Ú×Ö·ûÏÔʾ2-×Ö½Ú×ÖĸºÍÊý×Ö" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "ÔÚÓʼþÊÓͼÉÏÏÔʾ¶ÌÍ·" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "Ðмä¾à" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "ÔÚÍ·ÉÏÁô³ö¿Õ¼ä" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "·­ÒëÍ·Ãû(Èç`·¢ÐÅÈË', `±êÌâ:')" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "Èç¹û·¢ÐÅÕßÊÇÄã×Ô¼º£¬ÔÚ `´Ó' ÁÐÏÔʾ½ÓÊÜÕß" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr "ÉèÖÃÕªÒªµÄÏÔʾÌõÄ¿... " + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "Ä£·Â Emacs ÀàÓʼþÈí¼þµÄÊó±ê²Ù×÷ÐÐΪ" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "ÔÚ½øÈëÎļþ¼Ðʱ´ò¿ªµÚÒ»¸öûÓжÁ¹ýµÄÓʼþ" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "µ±Í˳öʱ" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "µ±Í˳öʱȷÈÏ" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "Íⲿä¯ÀÀÆ÷£¨%s ½«±»URLÈ¡´ú£©" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "ÃüÁî" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "´òÓ¡ £¨%s ½«±»ÎļþÃûÈ¡´ú£©" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "Íⲿ±à¼­Æ÷£¨%s ½«±»ÎļþÃûÈ¡´ú£©" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "·ûºÅÃèÊö" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" +"ÈÕÆÚ\n" +"´Ó\n" +"·¢ÐÅÈ˵ÄÈ«Ãû\n" +"·¢ÐÅÈ˵ÄÃû\n" +"·¢ÐÅÈ˵ÄÐÕ\n" +"±êÌâ\n" +"ÖÂ\n" +"Óʼþ-ID\n" +"%" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "ÕýÔÚ¶ÁÈ¡¹ýÂËÆ÷ÅäÖÃ...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "ÕýÔÚд¹ýÂËÆ÷ÅäÖÃ...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "( Р)" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "Ä¿µÄûÓÐÉ趨¡£" + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "Í·ÃûûÉ趨¡£" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "ɾ³ý¹æÔò" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "ÄãȷʵÏëҪɾ³ý¸Ã¹æÔòÂð£¿" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "É趨ÏÔʾµÄÏîÄ¿" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "±ê¼Ç" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "ÐòºÅ" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "ÈÕÆÚ" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "´Ó(From)" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "±êÌâ" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "×ÖÌåÑ¡Ôñ" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "ÈÕÒ»¶þÈýËÄÎåÁù" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "´úÂëת»»Ê§°Ü\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "\tûÓлº´æÎļþ\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "\tÕýÔÚ¶ÁÈ¡ÕªÒª»º´æ..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "»º´æ°æ±¾²»Í¬¡£¶ªµôËü¡£\n" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "\tÕýÔÚ±ê¼ÇÓʼþ..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "\t%d ¸öÐÂÓʼþ\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "û·¢ÏÖ±ê¼ÇµÄÎļþ¡£\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "±ê¼Ç°æ±¾²»Í¬£¨%d != %d£©¡£¶ªµôËü¡£\n" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "²»ÄÜÓÃÌí¼Óģʽ´ò¿ª±ê¼ÇÎļþ¡£\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "²»ÄÜÓÃдģʽ´ò¿ª±ê¼ÇÎļþ¡£\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "·¢ËÍÅŶӵÄÓʼþʧ°Ü¡£\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "´òÓ¡ÃüÁîÐв»´æÔÚ£º`%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "ÕýÔÚ´´½¨¹ý³Ì¶Ô»°¿ò...\n" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "ÔÚÕÒ»ØÊý¾Ýʱ·¢Éú´íÎó¡£\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "²»ÄÜдÎļþ¡£\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "ÅŶӵÄÓʼþÍ·±»´ò¶Ï¡£\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "ÕýÔÚÁª½Ó SMTP ·þÎñÆ÷£º%s ...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "²»ÄÜÁª½Ó SMTP ·þÎñÆ÷£º%s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "ÔÚ·¢ËÍHELOʱ·¢Éú´íÎó\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "ËÑË÷" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "´óСдÃô¸Ð" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "·´ÏòËÑË÷" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "Çå³ý" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "ËÑË÷ʧ°Ü" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "ÒªËÑË÷µÄ×Ö·û´®Ã»ÕÒµ½¡£" + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "Òѵ½´ïÁбíµÄ¿ªÊ¼£»¼ÌÐø´Ó×îºó¿ªÊ¼Âð£¿" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "Òѵ½´ïÁбíµÄ×îºó£»¼ÌÐø´ÓÍ·¿ªÊ¼Âð£¿" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "ËÑË÷½áÊø" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/Òƶ¯...(_o)" + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/¸´ÖÆ...(_C)" + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/Ö´ÐÐ(_x)" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/±ê¼Ç(_M)" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/±ê¼Ç(_M)/±ê¼Ç(_M)" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/±ê¼Ç(_M)/È¡Ïû±ê¼Ç(_U)" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/±ê¼Ç(_M)/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/±ê¼Ç(_M)/±ê¼Ç³Éδ¶Á(_e)" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/±ê¼Ç(_M)/±ê¼Ç³ÉÒѶÁ(_M)" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/»Ø¸´(_R)" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/»Ø¸´ËùÓеÄ(_l)" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/ת·¢(_F)" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "×÷Ϊ¸½¼þת·¢(_t)" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/ÔÚд°¿ÚÖдò¿ª(_w)" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/ÏÔʾËùÓÐÍ·(_h)" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/ÖØб༭(_e)" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/´òÓ¡...(_P)" + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "È«Ñ¡(_a)" + +#: src/summaryview.c:320 +msgid "M" +msgstr "" + +#: src/summaryview.c:320 +msgid "U" +msgstr "" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "´´½¨ÕªÒªÊÓͼ...\n" + +#: src/summaryview.c:350 +msgid "No." +msgstr "" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "½ø³Ì±êÖ¾" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "ÓÐЩ±ê¼ÇÁôÏÂÀ´ÁË¡£Ö´ÐÐÂð£¿" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "¿ÕÎļþ¼Ð\n" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "ɨÃèÎļþ¼Ð(%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "Íê³É¡£" + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "ûÓÐδ¶ÁµÄÓʼþ" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "û·¢ÏÖδ¶ÁµÄÓʼþ¡£µ½ÏÂÒ»¸öÎļþ¼Ð?" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "ÕýÔÚ°´±êÌâÊÕ¼¯¸ÐÐËȤµÄÓʼþ..." + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d ¸öɾ³ý" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d ¸öÒƶ¯" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr "£¬ " + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr "ÏîÑ¡ÔñÁË" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d ¸öеÄ, %d ¸öδ¶Á, ¹² %d ¸ö(%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d ¸öеÄ, %d ¸öδ¶Á, ¹² %d ¸ö" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "ÕýÔÚÅÅÁÐÕªÒª..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "\tÕýÔÚ´ÓÓʼþÊý¾ÝÖÐÉèÖÃÕªÒª..." + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "ÕýÔÚ´ÓÓʼþÊý¾ÝÖÐÉèÖÃÕªÒª..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "ÕýÔÚдժҪ»º´æ(%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(ûÓÐÊý¾Ý)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "Óʼþ %d ±»±ê¼Ç\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "Óʼþ %d ±»±ê¼ÇΪÒѶÁ\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "Óʼþ %d ±»±ê¼Ç³Éδ¶Á\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "Óʼþ %s/%d ÉèÖÃΪɾ³ý\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "µ±Ç°µÄÎļþ¼ÐÊÇÀ¬»øÏä." + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "ÕýÔÚɾ³ýÖظ´Îļþ..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "Óʼþ %s/%d È¡Ïû±ê¼Ç\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "Óʼþ %d ÉèÖÃΪÒƵ½ %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "Ä¿±êÓ뵱ǰÎļþ¼ÐÏàͬ." + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "Ñ¡ÔñËùÓÐÓʼþ..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "´òÓ¡" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"ÊäÈë´òÓ¡ÃüÁîÐÐ:\n" +"(ÓÃÎļþÃûÌæ´ú `%s')" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"´òÓ¡ÃüÁîÐÐÎÞЧ:\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "ÕýÔÚ´´½¨ÂÛÌâ..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "ÕýÔÚÈ¡ÏûÂÛÌâ..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "ÕýÔÚΪִÐÐÈ¡ÏûÂÛÌâ..." + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "ÕýÔÚ¹ýÂË..." + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "ÕýÔÚ¹ýÂË..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "µ½ %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "´´½¨Îı¾ÊÓͼ...\n" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "±£´æ¸Ã²¿·ÖÐèҪʹÓÃÉÏÏÂÎÄÃô¸ÐµÄµ¯³ö²Ëµ¥\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"ÓÒ»÷²¢Ñ¡Ôñ`Áí´æΪ...', »ò°´`y'¼ü.\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "ÒÔÎı¾Óʼþ·½Ê½ÏÔʾ¸Ã²¿·Ö, Ñ¡Ôñ\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"`ÒÔÎı¾·½Ê½ÏÔʾ', »ò°´`t'¼ü. \n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "ΪÁËÓÃÍⲿ³ÌÐò´ò¿ª¸Ã²¿·Ö, Ñ¡Ôñ`´ò¿ª',\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "»òË«»÷, »ò»÷Öмü, »ò°´`l'¼ü." + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "Ïò %s дÈëʧ°Ü¡£\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "´ò¿ª URL ÃüÁîÐÐÎÞЧ£º`%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/ÕªÒª(_S)/È«Ñ¡(_l)" + +#~ msgid "Clean trash" +#~ msgstr "Çå¿ÕÀ¬»øÏä" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/±ê¼Ç(_M)/±ê¼Ç³ÉÖØÒªµÄ(_i)" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: »ñÈ¡ÑÕɫʧ°Ü\n" + +#~ msgid "*** Warning: code conversion failed ***\n" +#~ msgstr "*** ¾¯¸æ: ´úÂëת»»Ê§°Ü ***\n" + +#~ msgid "can't set mailbox: %s\n" +#~ msgstr "²»ÄÜÉèÖÃÓÊÏ䣺%s\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "ÎÞЧµÄMIMEÀàÐÍ \n" + +#~ msgid "Reply-To:" +#~ msgstr "»ØПø£º" + +#~ msgid "%s - Compose message [Edited]" +#~ msgstr "%s - ׫дÓʼþ [Edited]" + +#~ msgid "/_Add news server" +#~ msgstr "Ìí¼ÓÐÂÎÅ×é·þÎñÆ÷(_A)" + +#~ msgid "deleting folder %s ...\n" +#~ msgstr "ÕýÔÚɾ³ýÎļþ¼Ð %s ...\n" + +#~ msgid "deleting newsgroup %s ...\n" +#~ msgstr "ÕýÔÚɾ³ýÐÂÎÅ×é %s ...\n" + +#~ msgid "Input adding news server:" +#~ msgstr "ÊäÈëÒªÌí¼ÓµÄÐÂÎÅ·þÎñÆ÷£º" + +#~ msgid "The news server `%s' already exists." +#~ msgstr "ÐÂÎÅ·þÎñÆ÷`%s'ÒÑ´æÔÚ¡£" + +#~ msgid "deleting cache folder of %s ...\n" +#~ msgstr "ÕýÔÚɾ³ý»º³åÎļþ¼Ð %s ...\n" + +#~ msgid "IMAP login command is invalid.\n" +#~ msgstr "IMAP ×¢²áÃüÁîÎÞЧ¡£\n" + +#~ msgid "Next unread" +#~ msgstr "ÏÂÒ»¸öδ¶ÁµÄ" + +#~ msgid "Previously selected folder: %s\n" +#~ msgstr "ÉÏÒ»¸öÑ¡Ôñ¹ýµÄÎļþ¼Ð£º%s\n" + +#~ msgid "New directory" +#~ msgstr "ÐÂĿ¼" + +#~ msgid "The directory not found. Create it?" +#~ msgstr "¸ÃĿ¼δ·¢ÏÖ¡£´´½¨Ëü£¿" + +#~ msgid "Can't create directory." +#~ msgstr "²»ÄÜ´´½¨Ä¿Â¼¡£" + +#~ msgid "Selected name isn't a directory." +#~ msgstr "Ñ¡ÔñµÄÃû×Ö²»ÊÇĿ¼¡£" + +#~ msgid "Writing mail folder list..." +#~ msgstr "дÓʼþÎļþ¼ÐÁбí..." + +#~ msgid "Writing imap folder list..." +#~ msgstr "дimapÎļþ¼ÐÁбí..." + +#~ msgid "Writing news folder list..." +#~ msgstr "дÐÂÎÅ×éÎļþ¼ÐÁбí..." + +#~ msgid "Reading folder %s ..." +#~ msgstr "ÕýÔÚ¶ÁÎļþ¼Ð %s ..." + +#~ msgid "Mail Server (IMAP4)" +#~ msgstr "Óʼþ·þÎñÆ÷ (IMAP4)" + +#~ msgid "NetNews" +#~ msgstr "ÍøÂçÐÂÎÅ" + +#~ msgid "reading folder list %s ..." +#~ msgstr "ÕýÔÚ¶ÁÎļþ¼ÐÁбí %s ..." + +#~ msgid "Broken folder list cache.\n" +#~ msgstr "²»ÍêÕûµÄÎļþ¼ÐÁÐ±í»º³åÇø¡£\n" + +#~ msgid "Select destination directory" +#~ msgstr "Ñ¡ÔñÄ¿±êĿ¼" + +#~ msgid "can't drop message into %s\n" +#~ msgstr "²»Äܽ«Óʼþ·Å½ø %s\n" + +#~ msgid "%s exists\n" +#~ msgstr "%s ÒÑ´æÔÚ\n" + +#~ msgid "can't move tmpmsg to %s\n" +#~ msgstr "²»ÄÜ°Ñ tmpmsg ÒƵ½ %s\n" + +#~ msgid "IMAP session is not established\n" +#~ msgstr "IMAP ²¿·Ö»¹Ã»ÊµÏÖ\n" + +#~ msgid "news session is not established\n" +#~ msgstr "ÐÂÎÅ×鲿·Ö»¹Ã»ÊµÏÖ\n" + +#~ msgid "Unlinking message %s in trash...\n" +#~ msgstr "ÕýÔÚÈ¡ÏûÀ¬»øÏäÀïÓʼþ %s µÄÁ´½Ó...\n" + +#~ msgid "Connecting to %s ..." +#~ msgstr "Áª½Óµ½ %s..." + +#~ msgid "Enable thread view on summary" +#~ msgstr "ÔÚÕªÒªÉÏʹÂÛÌâÊÓͼÉúЧ" + +#~ msgid "Not yet implemented." +#~ msgstr "»¹Î´ÊµÏÖ¡£" + +#~ msgid "/_Summary/Unsele_ct all" +#~ msgstr "/ÕªÒª(_S)/È«¶¼²»Ñ¡(_c)" diff --git a/po/zh_TW.Big5.gmo b/po/zh_TW.Big5.gmo new file mode 100644 index 0000000000000000000000000000000000000000..1a1191e86caf90c619d28cc2d0d027baf3d29772 GIT binary patch literal 47842 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 literal 0 HcmV?d00001 diff --git a/po/zh_TW.Big5.po b/po/zh_TW.Big5.po new file mode 100644 index 000000000..f237f5260 --- /dev/null +++ b/po/zh_TW.Big5.po @@ -0,0 +1,3730 @@ +# Chinese translation of Sylpheed. +# Copyright (C) 2000 Free Software Foundation, Inc. +# Xiangxin Luo <benluo@etang.com>, 2000 for initial GB2312 translation +# +msgid "" +msgstr "" +"Project-Id-Version: sylpheed\n" +"POT-Creation-Date: 2001-04-17 01:56+0900\n" +"PO-Revision-Date: 2000-11-18 14:39+0900\n" +"Last-Translator: Frank J. J. Weng <franklin@hyweb.com.tw>\n" +"Language-Team: Frank J. J. Weng <franklin@hyweb.com.tw>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=big5\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/about.c:86 +msgid "About" +msgstr "Ãö©ó" + +#: src/about.c:189 +msgid "" +"The portions applied from fetchmail is Copyright 1997 by Eric S. Raymond. " +"Portions of those are also copyrighted by Carl Harris, 1993 and 1995. " +"Copyright retained for the purpose of protecting free redistribution of " +"source.\n" +"\n" +msgstr "" + +#: src/about.c:195 +msgid "" +"The MD5 support is copyright by RSA Data Security, Inc. See the header " +"comment of the md5.c module for license terms.\n" +"\n" +msgstr "" + +#: src/about.c:199 +msgid "" +"Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, and libkcc is " +"copyright by takeshi@SoftAgency.co.jp.\n" +"\n" +msgstr "" + +#: src/about.c:204 +msgid "" +"GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n" +"\n" +msgstr "" + +#: src/about.c:208 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:214 +msgid "" +"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.\n" +"\n" +msgstr "" + +#: src/about.c:220 +msgid "" +"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." +msgstr "" + +#: src/about.c:227 src/addressbook.c:1289 src/alertpanel.c:209 +#: src/compose.c:1460 src/compose.c:3068 src/foldersel.c:175 src/import.c:171 +#: src/inputdialog.c:155 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:115 src/prefs.c:467 +#: src/prefs_common.c:1988 src/prefs_common.c:2207 src/prefs_common.c:2663 +#: src/summaryview.c:2012 src/summaryview.c:2518 +msgid "OK" +msgstr "½T©w" + +#: src/account.c:97 +msgid "Reading all config for each account...\n" +msgstr "Ū¨ú©Ò¦³±b¸¹ªº³]©w¤¤...\n" + +#: src/account.c:112 +#, c-format +msgid "Found label: %s\n" +msgstr "§ä¨ì¼ÐÅÒ: %s\n" + +#: src/account.c:202 +msgid "" +"Some composing windows are open.\n" +"Please close all the composing windows before editing the accounts." +msgstr "" +"±z¥¿¦b¼¶¼g¶l¥ó¡A\n" +"½ÐÃö±¼©Ò¦³¼¶¼g¤¤ªº¶l¥ó¦A¶i¦æ±b¸¹³]©w¡C" + +#: src/account.c:207 +msgid "Opening account edit window...\n" +msgstr "¶}±Ò±b¸¹½s¿èµøµ¡¤¤...\n" + +#: src/account.c:347 +msgid "Creating account edit window...\n" +msgstr "²£¥Í±b¸¹½s¿èµøµ¡¤¤...\n" + +#: src/account.c:352 +msgid "Edit accounts" +msgstr "½s¿è±b¸¹³]©w" + +#: src/account.c:380 src/addressbook.c:318 src/addressbook.c:1285 +#: src/compose.c:2185 src/mimeview.c:135 src/select-keys.c:272 +msgid "Name" +msgstr "¦WºÙ" + +#: src/account.c:381 src/prefs_account.c:585 +msgid "Protocol" +msgstr "³q°T¨ó©w" + +#: src/account.c:382 +msgid "Server" +msgstr "¦øªA¾¹" + +#: src/account.c:401 src/addressbook.c:439 +msgid "Add" +msgstr "·s¼W" + +#: src/account.c:407 +msgid "Edit" +msgstr "½s¿è" + +#: src/account.c:413 +msgid " Delete " +msgstr "§R°£" + +#: src/account.c:419 src/prefs_common.c:1365 +msgid "Down" +msgstr "¦V¤U" + +#: src/account.c:425 src/prefs_common.c:1359 +msgid "Up" +msgstr "¦V¤W" + +#: src/account.c:439 +msgid " Set as usually used account " +msgstr "³]¬°¹w³]±b¸¹" + +#: src/account.c:445 src/summary_search.c:192 +msgid "Close" +msgstr "Ãö³¬" + +#: src/account.c:498 +msgid "Delete account" +msgstr "§R°£±b¸¹" + +#: src/account.c:499 +msgid "Do you really want to delete this account?" +msgstr "±z½T©w­n§R°£³o­Ó±b¸¹¶Ü¡H" + +#: src/account.c:500 src/addressbook.c:579 src/addressbook.c:1220 +#: src/compose.c:3240 src/folderview.c:1263 src/folderview.c:1305 +#: src/folderview.c:1394 src/folderview.c:1427 src/folderview.c:1526 +#: src/folderview.c:1559 src/mainwindow.c:926 src/prefs_common.c:2473 +#: src/summary_search.c:297 src/summaryview.c:569 src/summaryview.c:809 +msgid "Yes" +msgstr "¬Oªº" + +#: src/account.c:500 src/compose.c:3240 src/folderview.c:1263 +#: src/folderview.c:1305 src/folderview.c:1394 src/folderview.c:1427 +#: src/folderview.c:1526 src/folderview.c:1559 +msgid "+No" +msgstr "+¤£­n" + +#: src/addressbook.c:229 src/compose.c:373 src/mainwindow.c:324 +msgid "/_File" +msgstr "/ÀÉ®×(_F)" + +#: src/addressbook.c:230 +msgid "/_File/New _address" +msgstr "/ÀÉ®×(_F)/·s¼W¦ì§}¬ö¿ý(_a)" + +#: src/addressbook.c:231 +msgid "/_File/New _group" +msgstr "/ÀÉ®×(_F)/·s¼W¸s²Õ(_g)" + +#: src/addressbook.c:232 +msgid "/_File/New _folder" +msgstr "/ÀÉ®×(_F)/·s¼W¸ê®Æ§¨(_f)" + +#: src/addressbook.c:233 src/addressbook.c:236 src/compose.c:377 +#: src/mainwindow.c:334 src/mainwindow.c:337 +msgid "/_File/---" +msgstr "/ÀÉ®×(_F)/---" + +#: src/addressbook.c:234 +msgid "/_File/_Edit" +msgstr "/ÀÉ®×(_F)/½s¿è(_E)" + +#: src/addressbook.c:235 +msgid "/_File/_Delete" +msgstr "/ÀÉ®×(_F)/§R°£(_D)" + +#: src/addressbook.c:237 src/compose.c:378 src/mainwindow.c:338 +msgid "/_File/_Close" +msgstr "/ÀÉ®×(_F)/Ãö³¬(_C)" + +#: src/addressbook.c:238 src/compose.c:417 src/mainwindow.c:505 +msgid "/_Help" +msgstr "/»¡©ú(_H)" + +#: src/addressbook.c:239 src/compose.c:418 src/mainwindow.c:510 +msgid "/_Help/_About" +msgstr "/»¡©ú(_H)/Ãö©ó(_A)" + +#: src/addressbook.c:244 src/addressbook.c:254 +msgid "/New _address" +msgstr "/·s¼WÀÉ®×(_a)" + +#: src/addressbook.c:245 src/addressbook.c:255 +msgid "/New _group" +msgstr "/·s¼W¸s²Õ(_g)" + +#: src/addressbook.c:246 src/addressbook.c:256 +msgid "/New _folder" +msgstr "/·s¼W¸ê®Æ§¨(_f)" + +#: src/addressbook.c:247 src/addressbook.c:257 src/compose.c:367 +#: src/folderview.c:200 src/folderview.c:202 src/folderview.c:211 +#: src/folderview.c:213 src/folderview.c:222 src/folderview.c:224 +#: src/summaryview.c:299 src/summaryview.c:305 src/summaryview.c:310 +#: src/summaryview.c:313 +msgid "/---" +msgstr "/---" + +#: src/addressbook.c:248 src/addressbook.c:258 src/compose.c:380 +#: src/mainwindow.c:341 +msgid "/_Edit" +msgstr "/½s¿è(_E)" + +#: src/addressbook.c:249 src/addressbook.c:259 src/summaryview.c:290 +msgid "/_Delete" +msgstr "/§R°£(_D)" + +#: src/addressbook.c:318 +msgid "E-Mail address" +msgstr "E-Mail¦ì§}" + +#: src/addressbook.c:318 src/addressbook.c:1287 +msgid "Remarks" +msgstr "³Æµù" + +#: src/addressbook.c:325 src/compose.c:2742 +msgid "Address book" +msgstr "¦ì§}ï" + +#: src/addressbook.c:413 +msgid "Name:" +msgstr "©m¦W¡G" + +#: src/addressbook.c:436 src/addressbook.c:1220 src/mainwindow.c:1379 +#: src/prefs_common.c:1326 +msgid "Delete" +msgstr "§R°£" + +#: src/addressbook.c:442 +msgid "Lookup" +msgstr "´M§ä" + +#: src/addressbook.c:452 src/headerview.c:55 src/summary_search.c:152 +msgid "To:" +msgstr "¦¬¥ó¤H" + +#: src/addressbook.c:456 +msgid "Cc:" +msgstr "°Æ¥»" + +#: src/addressbook.c:460 +msgid "Bcc:" +msgstr "±K¥ó°Æ¥»" + +#: src/addressbook.c:479 +msgid "Common address" +msgstr "¦@¥Î¦ì§}¬ö¿ý" + +#: src/addressbook.c:486 +msgid "Personal address" +msgstr "¨p¤H¦ì§}¬ö¿ý" + +#: src/addressbook.c:577 +msgid "Delete address(es)" +msgstr "§R°£¦ì§}¬ö¿ý" + +#: src/addressbook.c:578 +msgid "Really delete the address(es)?" +msgstr "±z½T©w­n§R°£³o¨Ç¬ö¿ý¶Ü¡H" + +#: src/addressbook.c:579 src/addressbook.c:1220 src/mainwindow.c:926 +#: src/prefs_common.c:2473 src/summary_search.c:297 src/summaryview.c:569 +#: src/summaryview.c:809 +msgid "No" +msgstr "¤£­n" + +#: src/addressbook.c:996 src/folderview.c:1141 src/folderview.c:1334 +msgid "New folder" +msgstr "·s¸ê®Æ§¨" + +#: src/addressbook.c:997 src/folderview.c:1142 src/folderview.c:1335 +msgid "Input the name of new folder:" +msgstr "½Ð¿é¤J·s¸ê®Æ§¨ªº¦WºÙ¡G" + +#: src/addressbook.c:998 src/folderview.c:1143 src/folderview.c:1336 +msgid "NewFolder" +msgstr "·s¸ê®Æ§¨" + +#: src/addressbook.c:1009 src/addressbook.c:1054 src/addressbook.c:1131 +#: src/addressbook.c:1183 +msgid "The name already exists." +msgstr "³o­Ó¦W¦r¤w¸g¦s¦b" + +#: src/addressbook.c:1041 +msgid "New group" +msgstr "·s¸s²Õ" + +#: src/addressbook.c:1042 +msgid "Input the name of new group:" +msgstr "½Ð¿é¤J·sªº¸s²Õ¦WºÙ¡G" + +#: src/addressbook.c:1043 +msgid "NewGroup" +msgstr "·s¸s²Õ" + +#: src/addressbook.c:1118 +msgid "Edit group" +msgstr "½s¿è¸s²Õ" + +#: src/addressbook.c:1119 +msgid "Input the new name of group:" +msgstr "½Ð¿é¤J·sªº¸s²Õ¦WºÙ¡G" + +#: src/addressbook.c:1169 +msgid "Edit folder" +msgstr "½s¿è¸ê®Æ§¨" + +#: src/addressbook.c:1170 +msgid "Input the new name of folder:" +msgstr "½Ð¿é¤J·sªº¸ê®Æ§¨¦WºÙ¡G" + +#: src/addressbook.c:1219 +#, c-format +msgid "Really delete `%s' ?" +msgstr "±z½T©w­n§R°£ `%s' ? " + +#: src/addressbook.c:1267 +msgid "Edit address" +msgstr "½s¿è¦ì§}¬ö¿ý" + +#: src/addressbook.c:1286 src/compose.c:2741 src/select-keys.c:273 +msgid "Address" +msgstr "¦ì§}" + +#: src/addressbook.c:1290 src/compose.c:1460 src/compose.c:3069 +#: src/compose.c:3638 src/foldersel.c:176 src/import.c:172 +#: src/inputdialog.c:156 src/main.c:286 src/mainwindow.c:1630 +#: src/mimeview.c:705 src/passphrase.c:119 src/prefs.c:468 +#: src/prefs_common.c:2664 src/progressdialog.c:70 src/select-keys.c:289 +#: src/summaryview.c:569 src/summaryview.c:2012 src/summaryview.c:2518 +msgid "Cancel" +msgstr "¨ú®ø" + +#: src/addressbook.c:1520 +msgid "Reading addressbook file..." +msgstr "Ū¨ú¦ì§}ïÀɮפ¤, ½Ðµy­Ô..." + +#: src/addressbook.c:1524 +#, c-format +msgid "%s doesn't exist.\n" +msgstr "%s ¤£¦s¦b¡C\n" + +#: src/addressbook.c:1546 src/addressbook.c:1839 src/imap.c:618 +#: src/mainwindow.c:660 src/mainwindow.c:1262 src/mh.c:840 src/mh.c:847 +#: src/news.c:483 src/procmsg.c:257 src/procmsg.c:321 src/summaryview.c:990 +#: src/summaryview.c:1196 src/summaryview.c:1278 src/summaryview.c:1339 +#: src/summaryview.c:1796 src/summaryview.c:2269 src/summaryview.c:2292 +#: src/summaryview.c:2313 src/summaryview.c:2406 +msgid "done.\n" +msgstr "§¹¦¨¡C\n" + +#: src/addressbook.c:1817 +msgid "Exporting addressbook to file..." +msgstr "±N¦ì§}ï¿é¥X¦ÜÀɮפ¤, ½Ðµy­Ô..." + +#: src/addressbook.c:1835 +msgid "failed to write addressbook data.\n" +msgstr "¦ì§}ï¸ê®Æ¼g¤J¥¢±Ñ¡C\n" + +#: src/alertpanel.c:98 src/compose.c:3240 src/main.c:284 +msgid "Notice" +msgstr "ª`·N" + +#: src/alertpanel.c:111 +msgid "Warning" +msgstr "ĵ§i" + +#: src/alertpanel.c:124 +msgid "Error" +msgstr "¿ù»~" + +#: src/alertpanel.c:160 +msgid "Creating alert panel dialog...\n" +msgstr "²£¥Íĵ§i¹ï¸Ü®Ø¤¤... \n" + +#: src/codeconv.c:76 src/codeconv.c:87 +msgid "can't allocate memory\n" +msgstr "µLªk°t¸m°O¾ÐÅé \n" + +#: src/compose.c:365 +msgid "/_Add..." +msgstr "/·s¼W...(_A)" + +#: src/compose.c:366 +msgid "/_Remove" +msgstr "/§R°£(_R)" + +#: src/compose.c:368 src/folderview.c:203 src/folderview.c:214 +#: src/folderview.c:225 +msgid "/_Property..." +msgstr "/¤º®e...(_P)" + +#: src/compose.c:374 +msgid "/_File/_Attach file" +msgstr "/ÀÉ®×(_F)/ªþ¥[ÀÉ®×(_A)" + +#: src/compose.c:375 +msgid "/_File/_Insert file" +msgstr "/ÀÉ®×(_F)/´¡¤JÀÉ®×(_I)" + +#: src/compose.c:376 +msgid "/_File/Insert si_gnature" +msgstr "/ÀÉ®×(_F)/´¡¤Jñ¦W(_g)" + +#: src/compose.c:381 +msgid "/_Edit/_Undo" +msgstr "/½s¿è(_E)/´_­ì(_U)" + +#: src/compose.c:382 +msgid "/_Edit/_Redo" +msgstr "/½s¿è(_E)/­«½Æ«e¤@­Ó°Ê§@(_R)" + +#: src/compose.c:383 src/compose.c:388 src/mainwindow.c:344 +msgid "/_Edit/---" +msgstr "/½s¿è(_E)/---" + +#: src/compose.c:384 +msgid "/_Edit/Cu_t" +msgstr "/½s¿è(_E)/°Å¤U(_t)" + +#: src/compose.c:385 src/mainwindow.c:342 +msgid "/_Edit/_Copy" +msgstr "/½s¿è(_E)/½Æ»s(_C)" + +#: src/compose.c:386 +msgid "/_Edit/_Paste" +msgstr "/½s¿è(_E)/¶K¤W(_P)" + +#: src/compose.c:387 src/mainwindow.c:343 +msgid "/_Edit/Select _all" +msgstr "/½s¿è(_E)/¥þ¿ï(_a)" + +#: src/compose.c:389 +msgid "/_Edit/Wrap long _lines" +msgstr "/½s¿è(_E)/¤Á³Î(_l)" + +#: src/compose.c:390 +msgid "/_Edit/Edit with e_xternal editor" +msgstr "/½s¿è(_E)/¨Ï¥Î¨ä¥Lªº½s¿è¾¹(_x)" + +#: src/compose.c:393 src/mainwindow.c:431 +msgid "/_Message" +msgstr "/«H¥ó(_M)" + +#: src/compose.c:394 +msgid "/_Message/_Send" +msgstr "/«H¥ó(_M)/°e¥X(_S)" + +#: src/compose.c:396 +msgid "/_Message/Send _later" +msgstr "/«H¥ó(_M)/«Ý·|°e¥X(_l)" + +#: src/compose.c:398 +msgid "/_Message/Save to _draft folder" +msgstr "/«H¥ó(_M)/Àx¦s¦Ü¯ó½Z¸ê®Æ§¨(_d)" + +#: src/compose.c:400 src/compose.c:405 src/compose.c:407 src/compose.c:410 +#: src/mainwindow.c:435 src/mainwindow.c:438 src/mainwindow.c:445 +#: src/mainwindow.c:456 +msgid "/_Message/---" +msgstr "/«H¥ó(_M)/---" + +#: src/compose.c:401 +msgid "/_Message/_To" +msgstr "/«H¥ó(_M)/¦¬¥ó¤H(_To)" + +#: src/compose.c:402 +msgid "/_Message/_Cc" +msgstr "/«H¥ó(_M)/°Æ¥»(_Cc)" + +#: src/compose.c:403 +msgid "/_Message/_Bcc" +msgstr "/«H¥ó(_M)/±K¥ó°Æ¥»(_Bcc)" + +#: src/compose.c:404 +msgid "/_Message/_Reply to" +msgstr "/«H¥ó(_M)/¦^ÂÐ(_R)" + +#: src/compose.c:406 +msgid "/_Message/_Followup to" +msgstr "" + +#: src/compose.c:408 +msgid "/_Message/_Attach" +msgstr "/«H¥ó(_M)/ªþ¥[ÀÉ®×(_A)" + +#: src/compose.c:411 +msgid "/_Message/Si_gn" +msgstr "/«H¥ó(_M)/¼Æ¦ìñ³¹(_g)" + +#: src/compose.c:412 +msgid "/_Message/_Encrypt" +msgstr "/«H¥ó(_M)/¥[±K(_E)" + +#: src/compose.c:414 src/mainwindow.c:488 +msgid "/_Tool" +msgstr "/¤u¨ã(_T)" + +#: src/compose.c:415 +msgid "/_Tool/Show _ruler" +msgstr "/¤u¨ã(_T)/Åã¥Ü¤Ø³W(_r)" + +#: src/compose.c:416 src/mainwindow.c:489 +msgid "/_Tool/_Address book" +msgstr "/¤u¨ã(_T)/¦ì§}ï(_A)" + +#: src/compose.c:486 src/compose.c:556 src/compose.c:614 src/procmsg.c:675 +msgid "Can't get text part\n" +msgstr "¨S¦³¤å¦r\n" + +#: src/compose.c:548 +#, c-format +msgid "%s: file not exist\n" +msgstr "%s: Àɮפ£¦s¦b\n" + +#: src/compose.c:560 +msgid "" +"\n" +"\n" +"Begin forwarded message:\n" +"\n" +msgstr "" +"\n" +"\n" +"Âà±H¤º®e¡G\n" + +#: src/compose.c:1224 +#, c-format +msgid "File %s doesn't exist\n" +msgstr "ÀÉ®× %s ¤£¦s¦b \n" + +#: src/compose.c:1228 +#, c-format +msgid "Can't get file size of %s\n" +msgstr "µLªk¨ú±oÀÉ®× %s ªº¤j¤p \n" + +#: src/compose.c:1232 +#, c-format +msgid "File %s is empty\n" +msgstr "ÀÉ®× %s ¬OªÅªº \n" + +#: src/compose.c:1253 +#, c-format +msgid "Message: %s" +msgstr "" + +#: src/compose.c:1359 +msgid " [Edited]" +msgstr " [¤w­×§ï]" + +#: src/compose.c:1361 +#, c-format +msgid "%s - Compose message%s" +msgstr "%s - ·s¶l¥ó%s" + +#: src/compose.c:1364 +#, c-format +msgid "Compose message%s" +msgstr "·s¶l¥ó%s" + +#: src/compose.c:1386 src/compose.c:3530 +msgid "Recipient is not specified." +msgstr "¨S¦³«ü©w¦¬¥ó¤H¡C" + +#: src/compose.c:1404 +msgid "can't get recipient list." +msgstr "µLªk¨ú±o¦¬¥ó¤H©Î¦¬¥ó·s»D¸s²Õ¦W³æ¡C" + +#: src/compose.c:1422 +msgid "" +"Account for sending mail is not specified.\n" +"Please select a mail account before sending." +msgstr "" +"±z¿ï¥Îªº±b¸¹¨Ã«D¤@­Ó¹q¤l¶l¥ó±b¸¹¡A¥i¯à¬O¥Î¨Ó¦b·s»D¸s²Õ¤Wµoªí¤å³¹¥Îªº¡C\n" +"­nµo°e¶l¥ó½Ð¿ï¾Ü¹q¤l¶l¥ó±b¸¹¡C" + +#: src/compose.c:1443 +#, c-format +msgid "Error occurred while posting the message to %s ." +msgstr "¦V %s µo¥X¤å³¹®É¥X²{¿ù»~¡C" + +#: src/compose.c:1457 +msgid "Queueing" +msgstr "°e¶i¼È¦s¸ê®Æ§¨..." + +#: src/compose.c:1458 +msgid "" +"Error occurred while sending the message.\n" +"Put this message into queue folder?" +msgstr "" +"°e«H®Éµo¥Í¿ù»~¡C\n" +"­n§â«H¥ó©ñ¶i¼È¦s¸ê®Æ§¨¤¤¶Ü¡H" + +#: src/compose.c:1464 src/compose.c:3542 +msgid "Can't queue the message." +msgstr "µLªk©ñ¶i¼È¦s¸ê®Æ§¨¡C" + +#: src/compose.c:1467 +msgid "Error occurred while sending the message." +msgstr "°e«H®Éµo¥Í¿ù»~¡C" + +#: src/compose.c:1474 src/compose.c:3549 +msgid "Can't save the message to outbox." +msgstr "µLªk±N«H¥ó°e¦Ü±H¥ó³Æ¥÷¤¤¡C" + +#: src/compose.c:1500 src/compose.c:1621 src/compose.c:1707 src/utils.c:1446 +msgid "can't change file mode\n" +msgstr "µLªk§ïÅÜÀɮ׫¬ºA \n" + +#: src/compose.c:1526 +msgid "Can't convert the codeset of the message." +msgstr "µLªkÂà´««H¥óªº¤º½X³]©w¡C" + +#: src/compose.c:1535 +msgid "can't write headers\n" +msgstr "µLªk¼g¤J¼ÐÀY\n" + +#: src/compose.c:1653 +msgid "saving sent message...\n" +msgstr "±H¥ó³Æ¥÷¶i¦æ¤¤, ½Ðµy­Ô... \n" + +#: src/compose.c:1658 +msgid "can't save message\n" +msgstr "µLªkÀx¦s±H¥ó³Æ¥÷\n" + +#: src/compose.c:1664 src/compose.c:1772 +msgid "can't open mark file\n" +msgstr "µLªk¶}±Ò¼Ð¥ÜªºÀÉ®× \n" + +#: src/compose.c:1687 +msgid "queueing message...\n" +msgstr "°e¶i¼È¦s¸ê®Æ§¨¤¤...\n" + +#: src/compose.c:1762 +msgid "can't queue the message\n" +msgstr "µLªk©ñ¶i¼È¦s¸ê®Æ§¨¡C\n" + +#: src/compose.c:1798 +#, c-format +msgid "Can't open file %s\n" +msgstr "µLªk¶}±ÒÀÉ®× %s\n" + +#: src/compose.c:2111 +#, c-format +msgid "generated Message-ID: %s\n" +msgstr "²£¥Í«H¥óªº½s¸¹¡G%s\n" + +#: src/compose.c:2185 src/compose.c:3040 +msgid "MIME type" +msgstr "MIME «¬ºA" + +#: src/compose.c:2185 src/mimeview.c:135 src/prefs_common.c:2658 +#: src/select-keys.c:270 src/summaryview.c:360 +msgid "Size" +msgstr "¤j¤p" + +#: src/compose.c:2202 +msgid "Creating compose window...\n" +msgstr "²£¥Í·s¶l¥ó...\n" + +#: src/compose.c:2248 src/headerview.c:54 src/summary_search.c:145 +msgid "From:" +msgstr "¨Ó¦Û¡G" + +#: src/compose.c:2668 src/mainwindow.c:1333 src/prefs_account.c:459 +#: src/prefs_common.c:630 +msgid "Send" +msgstr "°e¥X" + +#: src/compose.c:2669 +msgid "Send message" +msgstr "°e¥X«H¥ó" + +#: src/compose.c:2676 +msgid "Send later" +msgstr "«Ý·|¦A°e¥X" + +#: src/compose.c:2677 +msgid "Put into queue folder and send later" +msgstr "©ñ¨ì±H¥ó§¨¤¤«Ý·|¦A°e¥X" + +#: src/compose.c:2684 src/folderview.c:619 +msgid "Draft" +msgstr "¯ó½Z" + +#: src/compose.c:2685 +msgid "Save to draft folder" +msgstr "Àx¦s¦Ü¯ó½Z¸ê®Æ§¨" + +#: src/compose.c:2694 +msgid "Insert" +msgstr "´¡¤J" + +#: src/compose.c:2695 +msgid "Insert file" +msgstr "´¡¤JÀÉ®×" + +#: src/compose.c:2702 +msgid "Attach" +msgstr "ªþ¥[" + +#: src/compose.c:2703 +msgid "Attach file" +msgstr "ªþ¥[ÀÉ®×" + +#: src/compose.c:2712 src/prefs_common.c:1031 +msgid "Signature" +msgstr "ñ¦W" + +#: src/compose.c:2713 +msgid "Insert signature" +msgstr "´¡¤Jñ¦W" + +#: src/compose.c:2721 +msgid "Editor" +msgstr "½s¿è¾¹" + +#: src/compose.c:2722 +msgid "Edit with external editor" +msgstr "¨Ï¥Î¨ä¥Lªº½s¿è¾¹" + +#: src/compose.c:2730 +msgid "Linewrap" +msgstr "¤Á³Î" + +#: src/compose.c:2731 +msgid "Wrap long lines" +msgstr "¤Á³Î¹Lªøªº¤å¦r¦æ" + +#: src/compose.c:2936 +msgid "Invalid MIME type." +msgstr "¤£¦Xªkªº MIME «¬ºA" + +#: src/compose.c:2954 +msgid "File doesn't exist or is empty." +msgstr "Àɮפ£¦s¦b, ©ÎÀɮ׬OªÅªº" + +#: src/compose.c:3022 +msgid "Property" +msgstr "¤º®e" + +#: src/compose.c:3042 +msgid "Encoding" +msgstr "½s½X" + +#: src/compose.c:3065 +msgid "Path" +msgstr "¸ô®|" + +#: src/compose.c:3066 +msgid "File name" +msgstr "ÀɦW" + +#: src/compose.c:3211 +#, c-format +msgid "External editor command line is invalid: `%s'\n" +msgstr "¥~¥Î½s¿è¾¹ªº©R¥O¬O¿ù»~ªº¡G`%s'\n" + +#: src/compose.c:3237 +#, c-format +msgid "" +"The external editor is still working.\n" +"Force terminating the process?\n" +"process group id: %d" +msgstr "" +"¥~¥Î½s¿è¾¹¤´µM¦b¤u§@¤¤¡C\n" +"­n±j­¢µ²§ô¸Ó¦æµ{¶Ü¡H\n" +"¦æµ{ªº¸s²Õ¥N½X¬O¡G%d" + +#: src/compose.c:3250 +#, c-format +msgid "Terminated process group id: %d" +msgstr "µ²§ô¸s²Õ¥N½X¬° %d ªº¦æµ{" + +#: src/compose.c:3251 +#, c-format +msgid "Temporary file: %s" +msgstr "¼È¦sÀɮסG%s" + +#: src/compose.c:3275 +msgid "Compose: input from monitoring process\n" +msgstr "" + +#. failed +#: src/compose.c:3308 +msgid "Couldn't exec external editor\n" +msgstr "µLªk°õ¦æ¥~³¡½s¿è¾¹¡C\n" + +#: src/compose.c:3312 +msgid "Couldn't write to file\n" +msgstr "µLªk¼g¤JÀɮסC\n" + +#: src/compose.c:3314 +msgid "Pipe read failed\n" +msgstr "ºÞ½uŪ¨ú¥¢±Ñ¡C\n" + +#: src/compose.c:3571 +msgid "can't remove the old draft message\n" +msgstr "µLªk§R°£­ì¦³ªº¯ó½Z«H¥ó¡C\n" + +#: src/compose.c:3600 src/compose.c:3612 +msgid "Select file" +msgstr "¿ï¾ÜÀÉ®×" + +#: src/compose.c:3636 +msgid "Discard message" +msgstr "©ñ±ó«H¥ó" + +#: src/compose.c:3637 +msgid "This message has been modified. discard it?" +msgstr "«H¥ó¤w³Q­×§ï¹L¡C­n©ñ±ó¥¦¶Ü¡H" + +#: src/compose.c:3638 +msgid "Discard" +msgstr "©ñ±ó" + +#: src/compose.c:3638 +msgid "to Draft" +msgstr "©ñ¤J¯ó½Z¸ê®Æ§¨" + +#: src/foldersel.c:130 +msgid "Select folder" +msgstr "¿ï¾Ü¸ê®Æ§¨" + +#: src/folderview.c:197 src/folderview.c:208 +msgid "/Create _new folder..." +msgstr "/²£¥Í·sªº¸ê®Æ§¨ (_n)" + +#: src/folderview.c:198 src/folderview.c:209 +msgid "/_Rename folder..." +msgstr "/­«·s©R¦W¸ê®Æ§¨(_R)..." + +#: src/folderview.c:199 src/folderview.c:210 +msgid "/_Delete folder" +msgstr "/§R°£¸ê®Æ§¨(_D)" + +#: src/folderview.c:201 +msgid "/Remove _mailbox" +msgstr "/§R°£«H½c (_m)" + +#: src/folderview.c:212 +msgid "/Remove _IMAP4 server" +msgstr "§R°£ IMAP4 ¦øªA¾¹ (_I)" + +#: src/folderview.c:219 +msgid "/_Subscribe to newsgroup..." +msgstr "/­q¾\\·s»D¸s²Õ(_S)..." + +#: src/folderview.c:221 +msgid "/_Remove newsgroup" +msgstr "/²¾°£·s»D¸s²Õ(_R)" + +#: src/folderview.c:223 +msgid "/Remove _news server" +msgstr "/²¾°£·s»D¦øªA¾¹(_n)" + +#: src/folderview.c:234 +msgid "Folder" +msgstr "¸ê®Æ§¨" + +#: src/folderview.c:234 +msgid "New" +msgstr "·sªº" + +#: src/folderview.c:235 src/prefs_common.c:2655 +msgid "Unread" +msgstr "¥¼Åªªº" + +#: src/folderview.c:235 +msgid "#" +msgstr "" + +#: src/folderview.c:245 +msgid "Creating folder view...\n" +msgstr "²£¥Í¸ê®Æ§¨...\n" + +#: src/folderview.c:382 +msgid "Setting folder info...\n" +msgstr "³]©w¸ê®Æ§¨...\n" + +#: src/folderview.c:383 +msgid "Setting folder info..." +msgstr "³]©w¸ê®Æ§¨..." + +#: src/folderview.c:516 src/mainwindow.c:2042 src/setup.c:81 +#, c-format +msgid "Scanning folder %s%c%s ..." +msgstr "±½´y¸ê®Æ§¨ %s%c%s ..." + +#: src/folderview.c:521 src/mainwindow.c:2047 src/setup.c:86 +#, c-format +msgid "Scanning folder %s ..." +msgstr "±½´y¸ê®Æ§¨ %s ..." + +#: src/folderview.c:558 +msgid "Updating all folders..." +msgstr "§ó·s©Ò¦³ªº¸ê®Æ§¨..." + +#: src/folderview.c:597 src/prefs_account.c:608 +msgid "Inbox" +msgstr "¦¬¥ó§¨" + +#: src/folderview.c:602 +msgid "Outbox" +msgstr "±H¥ó§¨" + +#: src/folderview.c:607 +msgid "Queue" +msgstr "¼È¦s¸ê®Æ§¨" + +#: src/folderview.c:612 +msgid "Trash" +msgstr "§R°£ªº¶l¥ó" + +#: src/folderview.c:1057 +#, c-format +msgid "Folder %s is selected\n" +msgstr "¤w¿ï¨ú %s ¸ê®Æ§¨\n" + +#: src/folderview.c:1147 src/folderview.c:1205 src/folderview.c:1340 +#, c-format +msgid "`%c' can't be included in folder name." +msgstr "¸ê®Æ§¨¦WºÙ¤¤¤£À³§t¦³ `%c' ³o­Ó¦r¤¸¡C" + +#: src/folderview.c:1155 src/folderview.c:1214 src/folderview.c:1348 +#, c-format +msgid "The folder `%s' already exists." +msgstr "¸ê®Æ§¨ `%s' ¤w¦s¦b¡C" + +#: src/folderview.c:1197 +#, c-format +msgid "Input new name for `%s':" +msgstr "½Ð¿é¤J `%s' ªº·s¦WºÙ¡G" + +#: src/folderview.c:1199 +msgid "Rename folder" +msgstr "­«·s©R¦W¸ê®Æ§¨" + +#: src/folderview.c:1259 +#, c-format +msgid "" +"All folder(s) and message(s) under `%s' will be deleted.\n" +"Do you really want to delete?" +msgstr "" +"©Ò¦³¦b `%s' ¸ê®Æ§¨¤U­±ªº«H¥ó»P¤l¸ê®Æ§¨³£±N·|³Q§R°£¡C\n" +"±z½T©w­n§R°£¥¦¶Ü¡H" + +#: src/folderview.c:1262 src/folderview.c:1393 +msgid "Delete folder" +msgstr "§R°£¸ê®Æ§¨" + +#: src/folderview.c:1268 +#, c-format +msgid "can't remove folder `%s'\n" +msgstr "µLªk§R°£¸ê®Æ§¨ `%s'\n" + +#: src/folderview.c:1301 +#, c-format +msgid "" +"Really remove the mailbox `%s' ?\n" +"(The messages are NOT deleted from disk)" +msgstr "" +"½T©w­n§R°£ %s «H½c¡H\n" +"ª`·N¡G«H½c¤¤ªº¶l¥ó±N¤£·|±qµwºÐ¤¤³Q§R°£¡C" + +#: src/folderview.c:1304 +msgid "Remove folder" +msgstr "§R°£¸ê®Æ§¨" + +#: src/folderview.c:1391 +#, c-format +msgid "Really delete folder `%s'?" +msgstr "±z½T©w­n§R°£ %s ¸ê®Æ§¨¡H" + +#: src/folderview.c:1424 +#, c-format +msgid "Really delete IMAP4 server `%s'?" +msgstr "±z½T©w­n§R°£ %s ³o­Ó IMAP4 ¦øªA¾¹¡H" + +#: src/folderview.c:1426 +msgid "Delete IMAP4 server" +msgstr "§R°£ IMAP4 ¦øªA¾¹" + +#: src/folderview.c:1467 +msgid "Subscribe newsgroup" +msgstr "­q¾\\·s»D¸s²Õ" + +#: src/folderview.c:1468 +msgid "Input subscribing newsgroup:" +msgstr "½Ð¿é¤J­n­q¾\\ªº·s»D¸s²Õ¦WºÙ¡G" + +#: src/folderview.c:1477 +#, c-format +msgid "The newsgroup `%s' already exists." +msgstr "·s»D¸s²Õ `%s' ¤w¦s¦b¡C" + +#: src/folderview.c:1523 +#, c-format +msgid "Really delete newsgroup `%s'?" +msgstr "±z½T©w­n§R°£·s»D¸s²Õ `%s' ¶Ü¡H" + +#: src/folderview.c:1525 +msgid "Delete newsgroup" +msgstr "§R°£·s»D¸s²Õ" + +#: src/folderview.c:1556 +#, c-format +msgid "Really delete news server `%s'?" +msgstr "±z½T©w­n§R°£·s»D¦øªA¾¹ `%s' ¶Ü¡H" + +#: src/folderview.c:1558 +msgid "Delete news server" +msgstr "§R°£·s»D¦øªA¾¹" + +#: src/gtkutils.c:50 src/gtkutils.c:66 +msgid "Abcdef" +msgstr "" + +#: src/headerview.c:56 +msgid "Newsgroups:" +msgstr "·s»D¸s²Õ¡G" + +#: src/headerview.c:57 src/summary_search.c:159 +msgid "Subject:" +msgstr "¼ÐÃD¡G" + +#: src/headerview.c:87 +msgid "Creating header view...\n" +msgstr "²£¥Í¼ÐÀYµøµ¡...\n" + +#: src/headerview.c:172 src/summaryview.c:1379 +msgid "(No From)" +msgstr "¡]¨S¦³¨Ó·½¡^" + +#: src/headerview.c:187 src/summaryview.c:1395 +msgid "(No Subject)" +msgstr "¡]¨S¦³¼ÐÃD¡^" + +#: src/headerwindow.c:55 +msgid "Creating header window...\n" +msgstr "²£¥Í¼ÐÀYµøµ¡...\n" + +#: src/headerwindow.c:59 +msgid "All header" +msgstr "©Ò¦³ªº¼ÐÀY" + +#: src/headerwindow.c:113 +#, c-format +msgid "Displaying the header of %s ...\n" +msgstr "®i¥Ü %s ªº¼ÐÀY...\n" + +#: src/headerwindow.c:115 +#, c-format +msgid "%s - All header" +msgstr "%s - ©Ò¦³ªº¼ÐÀY" + +#: src/imageview.c:48 +msgid "Creating image view...\n" +msgstr "²£¥Í¹Ï¹³ªºµøµ¡...\n" + +#: src/imageview.c:80 src/imageview.c:117 +msgid "Can't load the image." +msgstr "µLªk¸ü¤J¹Ï¹³¡C" + +#: src/imap.c:141 +#, c-format +msgid "IMAP4 connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "¨ì %s:%d ªº IMAP4 ³s½u³Q¤¤Â_¤F¡C­«·s³s½u¤¤...\n" + +#: src/imap.c:164 +#, c-format +msgid "creating IMAP4 connection to %s:%d ...\n" +msgstr "¥¿¦b²£¥Í IMAP4 ³s½u¨ì %s:%d ...\n" + +#: src/imap.c:231 src/imap.c:419 src/imap.c:455 +#, c-format +msgid "can't select folder: %s\n" +msgstr "" + +#: src/imap.c:304 +#, c-format +msgid "message %d has been already cached.\n" +msgstr "" + +#: src/imap.c:313 +#, c-format +msgid "getting message %d...\n" +msgstr "" + +#: src/imap.c:319 src/procmsg.c:575 +#, c-format +msgid "can't fetch message %d\n" +msgstr "µLªk§ì¨ú«H¥ó %d\n" + +#: src/imap.c:340 src/imap.c:381 src/mh.c:170 src/mh.c:263 src/mh.c:334 +#: src/mh.c:417 +msgid "the src folder is identical to the dest.\n" +msgstr "¨Ó·½»P¥Øªº¸ê®Æ§¨¬Û¦P¡C\n" + +#: src/imap.c:350 src/imap.c:390 src/mh.c:183 src/mh.c:266 +#, c-format +msgid "Moving message %s%c%d to %s ...\n" +msgstr "²¾°Ê«H¥ó %s%c%d ¨ì %s ...\n" + +#: src/imap.c:426 +#, c-format +msgid "can't set deleted flags: %d\n" +msgstr "" + +#: src/imap.c:432 src/imap.c:468 +msgid "can't expunge\n" +msgstr "" + +#: src/imap.c:462 +#, c-format +msgid "can't set deleted flags: 1:%d\n" +msgstr "" + +#: src/imap.c:521 +msgid "can't get envelope\n" +msgstr "µLªk¨ú±o«H«Ê¡C\n" + +#: src/imap.c:527 +msgid "error occurred while getting envelope.\n" +msgstr "¨ú±o«H«Ê®Éµo¥Í¿ù»~¡C\n" + +#: src/imap.c:535 +#, c-format +msgid "can't parse envelope: %s\n" +msgstr "µLªk¸ÑªR«H«Ê¡G%s\n" + +#: src/imap.c:565 +#, c-format +msgid "deleting message %d...\n" +msgstr "§R°£¶l¥ó %d...\n" + +#: src/imap.c:600 +msgid "\tDeleting all cached messages... " +msgstr "\t§R°£©Ò¦³§Ö¨ú¶l¥ó..." + +#: src/imap.c:628 +#, c-format +msgid "Can't connect to IMAP4 server: %s:%d\n" +msgstr "µLªk³s½u¨ì IMAP4 ¦øªA¾¹¡G%s:%d\n" + +#: src/imap.c:653 +msgid "IMAP4 login failed.\n" +msgstr "IMAP4 µn¤J¥¢±Ñ¡C\n" + +#: src/imap.c:794 +#, c-format +msgid "can't copy %d to %s\n" +msgstr "" + +#: src/imap.c:1101 +#, c-format +msgid "error while imap command: STORE %d:%d %s\n" +msgstr "" + +#: src/imap.c:1149 +msgid "error while imap command: EXPUNGE\n" +msgstr "" + +#: src/import.c:116 +msgid "Import" +msgstr "¶×¤J" + +#: src/import.c:140 +msgid "Importing file:" +msgstr "¶×¤JÀɮסG" + +#: src/import.c:145 +msgid "Destination dir:" +msgstr "¥Ø¼Ð¥Ø¿ý¡G" + +#: src/import.c:158 src/import.c:164 src/prefs_common.c:1277 +msgid " Select... " +msgstr "¿ï¾Ü..." + +#: src/import.c:201 +msgid "Select importing file" +msgstr "¿ï¾Ü¶×¤JÀÉ®×" + +#: src/inc.c:214 +msgid "Retrieving new messages" +msgstr "¨ú±o·s¶l¥ó¤¤" + +#: src/inc.c:332 +#, c-format +msgid "Input password for %s on %s:" +msgstr "½Ð¿é¤J %s ¦b %s ¤Wªº±K½X¡G" + +#: src/inc.c:336 +msgid "Input password" +msgstr "¿é¤J±K½X" + +#: src/inc.c:358 +#, c-format +msgid "Authorization for %s on %s failed" +msgstr "%s ¦b %s ¤Wªº»{ÃÒ¥¢±Ñ" + +#: src/inc.c:420 +#, c-format +msgid "getting new messages of account %s...\n" +msgstr "¨ú±o %s ªº·s¶l¥ó¤¤, ½Ðµy­Ô...\n" + +#: src/inc.c:428 +#, c-format +msgid "%s: Retrieving new messages" +msgstr "%s¡G¨ú±o·s¶l¥ó¤¤, ½Ðµy­Ô..." + +#: src/inc.c:449 +#, c-format +msgid "Connecting to POP3 server: %s ..." +msgstr "³s½u¨ì POP3 ¦øªA¾¹¡G%s ..." + +#: src/inc.c:460 src/inc.c:588 +#, c-format +msgid "Can't connect to POP3 server: %s:%d\n" +msgstr "µLªk³s½u¨ì POP3 ¦øªA¾¹¡G%s:%d\n" + +#: src/inc.c:463 src/inc.c:591 +#, c-format +msgid "Can't connect to POP3 server: %s:%d" +msgstr "µLªk³s½u¨ì POP3 ¦øªA¾¹¡G%s:%d" + +#: src/inc.c:622 +msgid "Authorizing" +msgstr "±ÂÅv¤¤" + +#: src/inc.c:631 +msgid "Getting number of new messages" +msgstr "¨ú±o·s¶l¥óªº¼Æ¶q¤¤" + +#: src/inc.c:636 +#, c-format +msgid "Retrieving message (%d / %d)" +msgstr "¨ú±o·s¶l¥ó (%d / %d)" + +#: src/inc.c:644 +msgid "Deleting message" +msgstr "§R°£¶l¥ó" + +#: src/inc.c:648 +msgid "Quitting" +msgstr "Â÷¶}" + +#: src/inc.c:676 +msgid "a message won't be received\n" +msgstr "¦³«H¥ó¥¼¦¬¨ì¡C\n" + +#: src/inc.c:703 +msgid "Error occurred while processing mail." +msgstr "³B²z¶l¥ó®Éµo¥Í¿ù»~¡C" + +#: src/inc.c:706 +msgid "No disk space left." +msgstr "ºÏºÐªÅ¶¡¤wº¡¡C" + +#: src/inc.c:757 +msgid "no messages in local mailbox.\n" +msgstr "«H½c¤¤¨S¦³¶l¥ó¡C\n" + +#: src/inc.c:768 +#, c-format +msgid "Getting new messages from %s into %s...\n" +msgstr "±q %s ¤¤¨ú±o¶l¥ó©ñ¤J %s...\n" + +#: src/logwindow.c:50 +msgid "Creating log window...\n" +msgstr "²£¥Í¬ö¿ýµøµ¡...\n" + +#: src/logwindow.c:54 +msgid "Protocol log" +msgstr "³q°T¨ó©w¬ö¿ý" + +#. for gettext +#: src/main.c:100 +#, c-format +msgid "" +"File `%s' already exists.\n" +"Can't create folder." +msgstr "" +"ÀÉ®× `%s' ¤w¦s¦b¡C\n" +"µLªk²£¥Í¸ê®Æ§¨¡C" + +#: src/main.c:139 +msgid "g_thread is not supported by glib.\n" +msgstr "glib ¤£¤ä´© g_thread¡C\n" + +#: src/main.c:265 +#, c-format +msgid "Usage: %s [OPTION]...\n" +msgstr "" + +#: src/main.c:267 +msgid " --compose [address] open composition window" +msgstr "" + +#: src/main.c:268 +msgid " --receive receive new messages" +msgstr "" + +#: src/main.c:269 +msgid " --receive-all receive new messages of all accounts" +msgstr "" + +#: src/main.c:270 +msgid " --debug debug mode" +msgstr "" + +#: src/main.c:271 +msgid " --help display this help and exit" +msgstr "" + +#: src/main.c:285 +msgid "Composing message exists. Really quit?" +msgstr "¦³«H¥ó¥¿¦b½s¿è¡C½T©w­nÂ÷¶}¶Ü¡H" + +#. remote command mode +#: src/main.c:354 +msgid "another Sylpheed is already running.\n" +msgstr "" + +#: src/mainwindow.c:325 +msgid "/_File/_Add mailbox..." +msgstr "/ÀÉ®×(_F)/·s¼W«H½c(_A)..." + +#: src/mainwindow.c:326 +msgid "/_File/_Update folder tree" +msgstr "/ÀÉ®×(_F)/§ó·s¸ê®Æ§¨(_U)" + +#: src/mainwindow.c:327 +msgid "/_File/_Folder" +msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z(_F)" + +#: src/mainwindow.c:328 +msgid "/_File/_Folder/Create _new folder..." +msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z/·s¼W¸ê®Æ§¨(_n)" + +#: src/mainwindow.c:330 +msgid "/_File/_Folder/_Rename folder..." +msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z/­«·s©R¦W¸ê®Æ§¨(_R)" + +#: src/mainwindow.c:331 +msgid "/_File/_Folder/_Delete folder" +msgstr "/ÀÉ®×(_F)/¸ê®Æ§¨ºÞ²z/§R°£¸ê®Æ§¨(_D)" + +#: src/mainwindow.c:332 +msgid "/_File/_Import mbox file..." +msgstr "/ÀÉ®×(_F)/¶×¤J¶l¥ó(_I)" + +#: src/mainwindow.c:333 +msgid "/_File/Empty _trash" +msgstr "/ÀÉ®×(_F)/²MªÅ§R°£ªº¶l¥ó(_t)" + +#: src/mainwindow.c:335 +msgid "/_File/_Save as..." +msgstr "/ÀÉ®×(_F)/¥t¦s·sÀÉ(_S)..." + +#: src/mainwindow.c:336 +msgid "/_File/_Print..." +msgstr "/ÀÉ®×(_F)/¦C¦L...(_P)" + +#: src/mainwindow.c:339 +msgid "/_File/E_xit" +msgstr "/ÀÉ®×(_F)/Â÷¶}(_X)" + +#: src/mainwindow.c:345 +msgid "/_Edit/_Search" +msgstr "/½s¿è(_E)/´M§ä(_S)" + +#: src/mainwindow.c:347 +msgid "/_View" +msgstr "/Åã¥Ü(_V)" + +#: src/mainwindow.c:348 +msgid "/_View/_Folder tree" +msgstr "/Åã¥Ü(_V)/¸ê®Æ§¨¦Cªí(_F)" + +#: src/mainwindow.c:349 +msgid "/_View/_Message view" +msgstr "/Åã¥Ü(_V)/«H¥ó¹wÄý(_M)" + +#: src/mainwindow.c:350 +msgid "/_View/_Toolbar" +msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)" + +#: src/mainwindow.c:351 +msgid "/_View/_Toolbar/Icon _and text" +msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¹Ï¼Ë»P¤å¦r(_a)" + +#: src/mainwindow.c:352 +msgid "/_View/_Toolbar/_Icon" +msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¹Ï¼Ë(_I)" + +#: src/mainwindow.c:353 +msgid "/_View/_Toolbar/_Text" +msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¤å¦r(_T)" + +#: src/mainwindow.c:354 +msgid "/_View/_Toolbar/_Non-display" +msgstr "/Åã¥Ü(_V)/¤u¨ã¦C(_T)/¤£Åã¥Ü(_N)" + +#: src/mainwindow.c:355 +msgid "/_View/_Status bar" +msgstr "/Åã¥Ü(_V)/ª¬ºA¦C(_S)" + +#: src/mainwindow.c:356 src/mainwindow.c:359 +msgid "/_View/---" +msgstr "/Åã¥Ü(_V)/---" + +#: src/mainwindow.c:357 +msgid "/_View/Separate f_older tree" +msgstr "/Åã¥Ü(_V)/±N¸ê®Æ§¨¦Cªí¤ÀÂ÷(_o)" + +#: src/mainwindow.c:358 +msgid "/_View/Separate m_essage view" +msgstr "/Åã¥Ü(_V)/±N«H¥ó¹wÄý¤ÀÂ÷(_e)" + +#: src/mainwindow.c:360 +msgid "/_View/_Code set" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)" + +#: src/mainwindow.c:361 +msgid "/_View/_Code set/_Auto detect" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¦Û°Ê°»´ú(_A)" + +#: src/mainwindow.c:369 +msgid "/_View/_Code set/---" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/---" + +#: src/mainwindow.c:370 +msgid "/_View/_Code set/7bit ascii (US-ASC_II)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/7¦ì¤¸ ASCII ¦r¶°(US-ASC_II)" + +#: src/mainwindow.c:374 +msgid "/_View/_Code set/Unicode (_UTF-8)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/Unicode (_UTF-8)" + +#: src/mainwindow.c:378 +msgid "/_View/_Code set/Western European (ISO-8859-_1)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¦è¼Ú»y¨t (ISO-8859-_1)" + +#: src/mainwindow.c:382 +msgid "/_View/_Code set/Central European (ISO-8859-_2)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤¤¼Ú»y¨t (ISO-8859-_2)" + +#: src/mainwindow.c:385 +msgid "/_View/_Code set/_Baltic (ISO-8859-13)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/_ªiùªº®ü»y¨t (ISO-8859-13)(_B)" + +#: src/mainwindow.c:387 +msgid "/_View/_Code set/Baltic (ISO-8859-_4)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/ªiùªº®ü»y¨t (ISO-8859-_4)" + +#: src/mainwindow.c:390 +msgid "/_View/_Code set/Greek (ISO-8859-_7)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/§Æþ»y (ISO-8859-_7)" + +#: src/mainwindow.c:393 +msgid "/_View/_Code set/Turkish (ISO-8859-_9)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤g¦Õ¨ä»y (ISO-8859-_9)" + +#: src/mainwindow.c:396 +msgid "/_View/_Code set/Cyrillic (ISO-8859-_5)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/´µ©Ô¤Ò»y (ISO-8859-_5)" + +#: src/mainwindow.c:398 +msgid "/_View/_Code set/Cyrillic (KOI8-_R)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/´µ©Ô¤Ò»y (KOI8-_R)" + +#: src/mainwindow.c:400 +msgid "/_View/_Code set/Cyrillic (Windows-1251)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/´µ©Ô¤Ò»y (Windows-1251)" + +#: src/mainwindow.c:404 +msgid "/_View/_Code set/Japanese (ISO-2022-_JP)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (ISO-2022-_JP)" + +#: src/mainwindow.c:407 +msgid "/_View/_Code set/Japanese (ISO-2022-JP-2)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (ISO-2022-JP-2)" + +#: src/mainwindow.c:410 +msgid "/_View/_Code set/Japanese (_EUC-JP)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (_EUC-JP)" + +#: src/mainwindow.c:412 +msgid "/_View/_Code set/Japanese (_Shift__JIS)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤é¤å (_Shift__JIS)" + +#: src/mainwindow.c:416 +msgid "/_View/_Code set/Simplified Chinese (_GB2312)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/²Å餤¤å (_GB2312)" + +#: src/mainwindow.c:418 +msgid "/_View/_Code set/Traditional Chinese (_Big5)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/ÁcÅ餤¤å (_Big5)" + +#: src/mainwindow.c:420 +msgid "/_View/_Code set/Traditional Chinese (EUC-_TW)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/ÁcÅ餤¤å (EUC-_TW)" + +#: src/mainwindow.c:422 +msgid "/_View/_Code set/Chinese (ISO-2022-_CN)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/¤¤¤å (ISO-2022-_CN)" + +#: src/mainwindow.c:425 +msgid "/_View/_Code set/Korean (EUC-_KR)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/Áú¤å (EUC-_KR)" + +#: src/mainwindow.c:427 +msgid "/_View/_Code set/Korean (ISO-2022-KR)" +msgstr "/Åã¥Ü(_V)/¦r¶°(_C)/Áú¤å (ISO-2022-KR)" + +#: src/mainwindow.c:432 +msgid "/_Message/Rece_ive new mail" +msgstr "/«H¥ó(_M)/±µ¦¬·s¶l¥ó(_i)" + +#: src/mainwindow.c:433 +msgid "/_Message/Receive from _all accounts" +msgstr "/«H¥ó(_M)/±q©Ò¦³±b¸¹¤¤±µ¦¬·s¶l¥ó(_a)" + +#: src/mainwindow.c:436 +msgid "/_Message/Send queued messa_ges" +msgstr "/«H¥ó(_M)/±N¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó°e¥X(_g)" + +#: src/mainwindow.c:439 +msgid "/_Message/Compose _new message" +msgstr "/«H¥ó(_M)/¼¶¼g¶l¥ó(_n)" + +#: src/mainwindow.c:440 +msgid "/_Message/_Reply" +msgstr "/«H¥ó(_M)/¦^ÂÐ(_R)" + +#: src/mainwindow.c:441 +msgid "/_Message/Reply to a_ll" +msgstr "/«H¥ó(_M)/¥þ³¡¦^ÂÐ(_l)" + +#: src/mainwindow.c:442 +msgid "/_Message/_Forward" +msgstr "/«H¥ó(_M)/Âà±H(_F)" + +#: src/mainwindow.c:443 +msgid "/_Message/Forward as an a_ttachment" +msgstr "/«H¥ó(_M)/±N«H¥ó·í¦¨ªþ¥[ÀÉÂà±H(_t)" + +#: src/mainwindow.c:446 +msgid "/_Message/M_ove..." +msgstr "/«H¥ó(_M)/²¾°Ê...(_o)" + +#: src/mainwindow.c:447 +msgid "/_Message/_Copy..." +msgstr "/«H¥ó(_M)/½Æ»s...(_C)" + +#: src/mainwindow.c:448 +msgid "/_Message/_Delete" +msgstr "/«H¥ó(_M)/§R°£(_D)" + +#: src/mainwindow.c:449 +msgid "/_Message/_Mark" +msgstr "/«H¥ó(_M)/¼Ð°O(_M)" + +#: src/mainwindow.c:450 +msgid "/_Message/_Mark/_Mark" +msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O(_M)" + +#: src/mainwindow.c:451 +msgid "/_Message/_Mark/_Unmark" +msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¥h°£¼Ð°O(_U)" + +#: src/mainwindow.c:452 +msgid "/_Message/_Mark/---" +msgstr "/«H¥ó(_M)/¼Ð°O(_M)/---" + +#: src/mainwindow.c:453 +msgid "/_Message/_Mark/Mark as unr_ead" +msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O¦¨¥¼Åª(_e)" + +#: src/mainwindow.c:454 +msgid "/_Message/_Mark/Mark it as _being read" +msgstr "/«H¥ó(_M)/¼Ð°O(_M)/¼Ð°O¦¨¤wŪ(_b)" + +#: src/mainwindow.c:457 +msgid "/_Message/Open in new _window" +msgstr "/«H¥ó(_M)/¦b·sµøµ¡¶}±Ò(_w)" + +#: src/mainwindow.c:458 +msgid "/_Message/View _source" +msgstr "/«H¥ó(_M)/Æ[¬Ý«H¥ó­ì©l½X(_s)" + +#: src/mainwindow.c:459 +msgid "/_Message/Show all _header" +msgstr "/«H¥ó(_M)/Åã¥Ü©Ò¦³ªº«H¥ó¼ÐÀY(_h)" + +#: src/mainwindow.c:460 +msgid "/_Message/Re_edit" +msgstr "/«H¥ó(_M)/­«·s½s¿è(_e)" + +#: src/mainwindow.c:462 +msgid "/_Summary" +msgstr "/«H¥ó¦Cªí(_S)" + +#: src/mainwindow.c:463 +msgid "/_Summary/_Delete duplicated messages" +msgstr "/«H¥ó¦Cªí(_S)/§R°£­«ÂЪº«H¥ó(_D)" + +#: src/mainwindow.c:465 +msgid "/_Summary/_Filter messages" +msgstr "/«H¥ó¦Cªí(_S)/«H¥ó¹LÂo(_F)" + +#: src/mainwindow.c:466 +msgid "/_Summary/E_xecute" +msgstr "/«H¥ó¦Cªí(_S)/°õ¦æ(_x)" + +#: src/mainwindow.c:467 +msgid "/_Summary/_Update" +msgstr "/«H¥ó¦Cªí(_S)/§ó·s(_U)" + +#: src/mainwindow.c:468 src/mainwindow.c:472 src/mainwindow.c:474 +msgid "/_Summary/---" +msgstr "/«H¥ó¦Cªí(_S)/---" + +#: src/mainwindow.c:469 +msgid "/_Summary/_Prev message" +msgstr "/«H¥ó¦Cªí(_S)/«e¤@«Ê«H¥ó(_P)" + +#: src/mainwindow.c:470 +msgid "/_Summary/_Next message" +msgstr "/«H¥ó¦Cªí(_S)/¤U¤@«Ê«H¥ó(_N)" + +#: src/mainwindow.c:471 +msgid "/_Summary/N_ext unread message" +msgstr "/«H¥ó¦Cªí(_S)/¤U¤@«Ê¥¼Åª«H¥ó(_e)" + +#: src/mainwindow.c:473 +msgid "/_Summary/_Go to other folder" +msgstr "/«H¥ó¦Cªí(_S)/¨ì¨ä¥Lªº¸ê®Æ§¨(_G)" + +#: src/mainwindow.c:475 +msgid "/_Summary/_Sort" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)" + +#: src/mainwindow.c:476 +msgid "/_Summary/_Sort/Sort by _number" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î½s¸¹±Æ§Ç(_n)" + +#: src/mainwindow.c:477 +msgid "/_Summary/_Sort/Sort by s_ize" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¤j¤p±Æ§Ç(_i)" + +#: src/mainwindow.c:478 +msgid "/_Summary/_Sort/Sort by _date" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¤é´Á±Æ§Ç(_d)" + +#: src/mainwindow.c:479 +msgid "/_Summary/_Sort/Sort by _from" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¨Ó·½±Æ§Ç(_f)" + +#: src/mainwindow.c:480 +msgid "/_Summary/_Sort/Sort by _subject" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î¼ÐÃD±Æ§Ç(_s)" + +#: src/mainwindow.c:481 +msgid "/_Summary/_Sort/---" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/---" + +#: src/mainwindow.c:482 +msgid "/_Summary/_Sort/_Attract by subject" +msgstr "/«H¥ó¦Cªí(_S)/±Æ§Ç(_S)/¥Î«H¥ó¦ê¦C±Æ§Ç(_A)" + +#: src/mainwindow.c:484 +msgid "/_Summary/_Thread view" +msgstr "/«H¥ó¦Cªí(_S)/¦ê°_¦P¤@¦ê¦Cªº«H¥ó(_T)" + +#: src/mainwindow.c:485 +msgid "/_Summary/Unt_hread view" +msgstr "/«H¥ó¦Cªí(_S)/¸Ñ¶}¦P¤@¦ê¦Cªº«H¥ó(_h)" + +#: src/mainwindow.c:486 +msgid "/_Summary/Set display _item..." +msgstr "/«H¥ó¦Cªí(_S)/³]©wÅã¥Üªº¶µ¥Ø...(_i)" + +#: src/mainwindow.c:490 +msgid "/_Tool/_Log window" +msgstr "/¤u¨ã(_T)/¬ö¿ýµøµ¡(_L)" + +#: src/mainwindow.c:492 +msgid "/_Configuration" +msgstr "/³]©w(_C)" + +#: src/mainwindow.c:493 +msgid "/_Configuration/_Common preferences..." +msgstr "/³]©w(_C)/¦@¦P³ß¦n³]©w...(_C)" + +#: src/mainwindow.c:495 +msgid "/_Configuration/_Preferences per account..." +msgstr "/³]©w(_C)/­Ó§O±b¸¹³ß¦n³]©w(_P)" + +#: src/mainwindow.c:497 +msgid "/_Configuration/---" +msgstr "/³]©w(_C)/---" + +#: src/mainwindow.c:498 +msgid "/_Configuration/Create _new account..." +msgstr "/³]©w(_C)/·s¼W±b¸¹(_n)" + +#: src/mainwindow.c:500 +msgid "/_Configuration/_Edit accounts..." +msgstr "/³]©w(_C)/½s¿è±b¸¹...(_E)" + +#: src/mainwindow.c:502 +msgid "/_Configuration/C_hange current account" +msgstr "/³]©w(_C)/§ïÅܲ{¦³±b¸¹(_h)" + +#: src/mainwindow.c:506 +msgid "/_Help/_Manual" +msgstr "/»¡©ú(_H)/»¡©ú¤å¥ó(_M)" + +#: src/mainwindow.c:507 +msgid "/_Help/_Manual/_English" +msgstr "/»¡©ú(_H)/»¡©ú¤å¥ó(_M)/­^¤å(_E)" + +#: src/mainwindow.c:508 +msgid "/_Help/_Manual/_Japanese" +msgstr "/»¡©ú(_H)/»¡©ú¤å¥ó(_M)/¤é¤å(_J)" + +#: src/mainwindow.c:509 +msgid "/_Help/---" +msgstr "/»¡©ú(_H)/---" + +#: src/mainwindow.c:538 +msgid "Creating main window...\n" +msgstr "²£¥Í¥Dµøµ¡...\n" + +#: src/mainwindow.c:657 +#, c-format +msgid "MainWindow: color allocation %d failed\n" +msgstr "¥Dµøµ¡¡GÃC¦â %d °t¸m¥¢±Ñ¡C\n" + +#: src/mainwindow.c:798 src/mainwindow.c:815 +msgid "Untitled" +msgstr "µL¼ÐÃD" + +#: src/mainwindow.c:816 +msgid "none" +msgstr "µL" + +#: src/mainwindow.c:825 +#, c-format +msgid "Current account: %s" +msgstr "¥Ø«e±b¸¹¡G%s" + +#: src/mainwindow.c:916 +#, c-format +msgid "window position: x = %d, y = %d\n" +msgstr "µøµ¡¦ì¸m¡Gx = %d, y = %d\n" + +#: src/mainwindow.c:924 +msgid "Empty trash" +msgstr "²MªÅ§R°£ªº¶l¥ó" + +#: src/mainwindow.c:925 +msgid "Empty all messages in trash?" +msgstr "±z½T©w­n²M°£©Ò¦³³Q§R°£ªº¶l¥ó¡H" + +#: src/mainwindow.c:952 +msgid "Add mailbox" +msgstr "·s¼W«H½c" + +#: src/mainwindow.c:953 +msgid "" +"Input the location of mailbox.\n" +"If the existing mailbox is specified, it will be\n" +"scanned automatically." +msgstr "" +"½Ð¿é¤J«H½cªº¦ì§}¡C\n" +"¨Ã½Ðª`·N¤£­n¿é¤J¤w¦s¦bªº«H½c¦WºÙ¡C\n" +"¨t²Î±N·|¦Û°Ê§P§O¬O§_«H½c¤w¦s¦b¡C" + +#: src/mainwindow.c:959 +#, c-format +msgid "The mailbox `%s' already exists." +msgstr "«H½c %s ¤w¦s¦b¡C" + +#: src/mainwindow.c:964 src/setup.c:57 +msgid "Mailbox" +msgstr "«H½c" + +#: src/mainwindow.c:970 src/setup.c:63 +msgid "" +"Creation of the mailbox failed.\n" +"Maybe some files already exist, or you don't have the permission to write " +"there." +msgstr "" +"µLªk²£¥Í«H½c¥Ø¿ý¡C\n" +"¤]³\\¦P¼Ë¦WºÙªºÀɮפw¸g¦s¦b¡A©ÎªÌ¬O§A¨S¦³Åv­­¥i¥H¶}·s¥Ø¿ý¡C" + +#: src/mainwindow.c:1115 +msgid "Setting widgets..." +msgstr "³]©wµøµ¡..." + +#: src/mainwindow.c:1316 +msgid "Get" +msgstr "Àˬd¶l¥ó" + +#: src/mainwindow.c:1317 +msgid "Incorporate new mail" +msgstr "Àˬd¥Ø«e±b¸¹ªº·s¶l¥ó" + +#: src/mainwindow.c:1322 +msgid "Get all" +msgstr "¥þ³¡Àˬd" + +#: src/mainwindow.c:1323 +msgid "Incorporate new mail of all accounts" +msgstr "Àˬd©Ò¦³±b¸¹ªº·s¶l¥ó" + +#: src/mainwindow.c:1334 +msgid "Send queued message(s)" +msgstr "±N¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó°e¥X" + +#: src/mainwindow.c:1344 src/prefs_account.c:461 src/prefs_common.c:632 +msgid "Compose" +msgstr "¼¶¼g¶l¥ó" + +#: src/mainwindow.c:1345 +msgid "Compose new message" +msgstr "½s¿è·s¶l¥ó" + +#: src/mainwindow.c:1352 +msgid "Reply" +msgstr "¦^ÂÐ" + +#: src/mainwindow.c:1353 +msgid "Reply to the message" +msgstr "¦^ÂЫH¥ó" + +#: src/mainwindow.c:1360 +msgid "Reply all" +msgstr "¥þ³¡¦^ÂÐ" + +#: src/mainwindow.c:1361 +msgid "Reply to all" +msgstr "¥þ³¡¦^ÂÐ" + +#: src/mainwindow.c:1368 +msgid "Forward" +msgstr "Âà±H" + +#: src/mainwindow.c:1369 +msgid "Forward the message" +msgstr "Âà±H«H¥ó" + +#: src/mainwindow.c:1380 +msgid "Delete the message" +msgstr "§R°£«H¥ó" + +#: src/mainwindow.c:1388 +msgid "Execute" +msgstr "°õ¦æ" + +#: src/mainwindow.c:1389 +msgid "Execute marked process" +msgstr "°õ¦æ¼Ð°Oªº¦æµ{" + +#: src/mainwindow.c:1399 +msgid "Next" +msgstr "¤U¤@«Ê" + +#: src/mainwindow.c:1400 +msgid "Next unread message" +msgstr "¤U¤@«Ê¥¼Åª¶l¥ó" + +#: src/mainwindow.c:1410 +msgid "Prefs" +msgstr "³ß¦n" + +#: src/mainwindow.c:1411 +msgid "Common preference" +msgstr "¦@¦P³ß¦n³]©w" + +#: src/mainwindow.c:1418 +msgid "Account" +msgstr "±b¸¹" + +#: src/mainwindow.c:1419 +msgid "Account setting" +msgstr "±b¸¹³]©w" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit" +msgstr "Â÷¶}" + +#: src/mainwindow.c:1629 src/summaryview.c:2517 +msgid "Exit this program?" +msgstr "±z½T©w­nÂ÷¶}¶Ü¡H" + +#: src/mainwindow.c:1763 +msgid "Sending queued message failed." +msgstr "¼È¦s«H¥ó±H°e¥¢±Ñ¡C" + +#: src/mainwindow.c:1880 +#, c-format +msgid "forced charset: %s\n" +msgstr "±j¨î¨Ï¥Î %s ½s½X¡C\n" + +#: src/mbox.c:63 +#, c-format +msgid "Getting messages from %s into %s...\n" +msgstr "±q %s ¤¤¨ú±o¶l¥ó©ñ¤J %s...\n" + +#: src/mbox.c:73 +msgid "can't read mbox file.\n" +msgstr "µLªkŪ¨ú mbox ÀɮסC\n" + +#: src/mbox.c:80 +#, c-format +msgid "invalid mbox format: %s\n" +msgstr "¤£¦Xªkªº mbox ®æ¦¡¡G%s\n" + +#: src/mbox.c:87 +#, c-format +msgid "malformed mbox: %s\n" +msgstr "·lÃaªº mbox: %s\n" + +#: src/mbox.c:104 +msgid "can't open temporary file\n" +msgstr "µLªk¶}±Ò¼È¦sÀÉ¡C\n" + +#: src/mbox.c:154 +#, c-format +msgid "" +"unescaped From found:\n" +"%s" +msgstr "" + +#: src/mbox.c:189 +msgid "can't write to temporary file\n" +msgstr "µLªk¼g¤J¼È¦sÀÉ¡C\n" + +#: src/mbox.c:221 +#, c-format +msgid "%d messages found.\n" +msgstr "¦@¦³ %d «Ê«H¥ó¡C\n" + +#: src/mbox.c:238 +#, c-format +msgid "can't create lock file %s\n" +msgstr "µLªk¶}±ÒÀÉ®× %s\n" + +#: src/mbox.c:239 +msgid "use 'flock' instead of 'file' if possible.\n" +msgstr "¦pªG¥i¥H¡A½Ð¨Ï¥Î flock ´À¥NÀɮסC\n" + +#: src/mbox.c:251 +#, c-format +msgid "can't create %s\n" +msgstr "µLªk²£¥Í %s\n" + +#: src/mbox.c:257 +msgid "mailbox is owned by another process, waiting...\n" +msgstr "«H½c¥¿³Q¨ä¥Lªº¦æµ{Ū¨ú¤¤, ½Ðµy­Ô...\n" + +#: src/mbox.c:286 +#, c-format +msgid "can't lock %s\n" +msgstr "µLªkÂê¦í %s\n" + +#: src/mbox.c:293 src/mbox.c:340 +msgid "invalid lock type\n" +msgstr "¤£¦Xªkªº lock «¬ºA¡C\n" + +#: src/mbox.c:326 +#, c-format +msgid "can't unlock %s\n" +msgstr "%s µLªk¥´¶} \n" + +#: src/mbox.c:357 +msgid "can't truncate mailbox to zero.\n" +msgstr "µLªk²M°£«H½c¡C\n" + +#: src/messageview.c:67 +msgid "Creating message view...\n" +msgstr "²£¥Í«H¥óµøµ¡...\n" + +#: src/mh.c:149 +#, c-format +msgid "can't copy message %s to %s\n" +msgstr "µLªk±N«H¥ó±q %s ·h²¾¨ì %s¡C\n" + +#: src/mh.c:181 src/mh.c:257 src/mh.c:345 src/mh.c:411 +msgid "Can't open mark file.\n" +msgstr "µLªk¶}±Ò¼Ð°OªºÀɮסC\n" + +#: src/mh.c:192 src/mh.c:275 src/mh.c:356 src/mh.c:429 +#, c-format +msgid "%s already exists." +msgstr "%s ¤w¦s¦b¡C" + +#: src/mh.c:347 src/mh.c:420 +#, c-format +msgid "Copying message %s%c%d to %s ...\n" +msgstr "" + +#: src/mh.c:584 +#, c-format +msgid "Last number in dir %s = %d\n" +msgstr "" + +#: src/mh.c:783 +msgid "\tSearching uncached messages... " +msgstr "´M§ä¤£¦b§Ö¨ú¤ºªº«H¥ó..." + +#: src/mh.c:838 +#, c-format +msgid "%d uncached message(s) found.\n" +msgstr "§ä¨ì %d «Ê¡C\n" + +#: src/mh.c:844 +msgid "\tSorting uncached messages in numerical order... " +msgstr "¥H½s¸¹±Æ§Ç¤¤..." + +#: src/mimeview.c:110 +msgid "/_Open" +msgstr "/¶}±Ò(_O)" + +#: src/mimeview.c:111 +msgid "/_Display as text" +msgstr "/¥H¯Â¤å¦r§e²{(_D)" + +#: src/mimeview.c:112 src/summaryview.c:311 +msgid "/_Save as..." +msgstr "¥t¦s·sÀÉ...(_S)" + +#: src/mimeview.c:115 +msgid "/_Check signature" +msgstr "/Àˬd¼Æ¦ìñ³¹(_C)" + +#: src/mimeview.c:135 +msgid "MIME Type" +msgstr "MIME «¬ºA" + +#: src/mimeview.c:139 +msgid "Creating MIME view...\n" +msgstr "²£¥Í MIME µøµ¡...\n" + +#: src/mimeview.c:240 +msgid "Select \"Check signature\" to check" +msgstr "½Ð¿ï¾Ü¡uÀˬd¼Æ¦ìñ³¹¡v¨ÓÀˬd" + +#: src/mimeview.c:411 +msgid "Can't get the part of multipart message." +msgstr "µLªk¨ú±o³o­Óªþ¥[ÀÉ¡C" + +#: src/mimeview.c:663 src/mimeview.c:711 src/mimeview.c:730 +msgid "Can't save the part of multipart message." +msgstr "µLªkÀx¦s³o­Óªþ¥[ÀÉ¡C" + +#: src/mimeview.c:697 src/summaryview.c:2005 +msgid "Save as" +msgstr "¥t¦s·sÀÉ" + +#: src/mimeview.c:703 src/summaryview.c:2010 +msgid "Overwrite" +msgstr "Âмg" + +#: src/mimeview.c:704 src/summaryview.c:2011 +msgid "Overwrite existing file?" +msgstr "±z­nÂл\\±¼¤w¦s¦bªºÀɮ׶ܡH" + +#: src/mimeview.c:773 +#, c-format +msgid "MIME viewer command line is invalid: `%s'" +msgstr "¶}±Ò¦¹ MIME «¬ºAªº©R¥O¬O¿ù»~ªº¡G`%s'" + +#: src/news.c:75 +#, c-format +msgid "creating NNTP connection to %s:%d ...\n" +msgstr "²£¥Í·s»D³q°T¨ó©w³s½u¨ì %s:%d , ½Ðµy­Ô...\n" + +#: src/news.c:111 +#, c-format +msgid "NNTP connection to %s:%d has been disconnected. Reconnecting...\n" +msgstr "¨ì %s:%d ªº·s»D³q°T¨ó©w³s½u³Q¤¤Â_¤F¡C­«·s³s½u¤¤...\n" + +#: src/news.c:182 +#, c-format +msgid "article %d has been already cached.\n" +msgstr "" + +#: src/news.c:191 +#, c-format +msgid "getting article %d...\n" +msgstr "" + +#: src/news.c:196 +#, c-format +msgid "can't read article %d\n" +msgstr "µLªkŪ¨ú¤å³¹ %d\n" + +#: src/news.c:228 +msgid "can't post article.\n" +msgstr "" + +#: src/news.c:252 +#, c-format +msgid "can't retrieve article %d\n" +msgstr "µLªk¨ú±o¤å³¹ %d\n" + +#: src/news.c:291 +#, c-format +msgid "can't set group: %s\n" +msgstr "µLªk³]©w·s»D¸s²Õ¡G%s\n" + +#: src/news.c:297 +#, c-format +msgid "invalid article range: %d - %d\n" +msgstr "¿ù»~ªº¤å³¹½d³ò¡G%d - %d\n" + +#: src/news.c:306 +msgid "no new articles.\n" +msgstr "¨S¦³·s¤å³¹¡C\n" + +#: src/news.c:316 +#, c-format +msgid "getting xover %d - %d in %s...\n" +msgstr "¨ú±o %s ªº xover %d - %d ¤¤...\n" + +#: src/news.c:319 +msgid "can't get xover\n" +msgstr "µLªk¨ú±o xover\n" + +#: src/news.c:325 +msgid "error occurred while getting xover.\n" +msgstr "¨ú±o xover ®Éµo¥Í¿ù»~¡C\n" + +#: src/news.c:333 +#, c-format +msgid "invalid xover line: %s\n" +msgstr "xover ¤º®e¿ù»~¡G%s\n" + +#: src/news.c:434 +#, c-format +msgid "deleting article %d...\n" +msgstr "§R°£¤å³¹½s¸¹ %d...\n" + +#: src/news.c:465 +msgid "\tDeleting all cached articles... " +msgstr "\t§R°£©Ò¦³§Ö¨ú¤¤ªº¤å³¹..." + +#: src/nntp.c:44 +#, c-format +msgid "Can't connect to NNTP server: %s:%d\n" +msgstr "µLªk³s½u¨ì·s»D¦øªA¾¹¡G%s:%d\n" + +#: src/nntp.c:73 src/nntp.c:135 +#, c-format +msgid "protocol error: %s\n" +msgstr "³q°T¨ó©w¦³¿ù»~¡G%s\n" + +#: src/nntp.c:95 src/nntp.c:141 +msgid "protocol error\n" +msgstr "³q°T¨ó©w¦³¿ù»~\n" + +#: src/nntp.c:174 src/nntp.c:180 +msgid "Error occurred while posting\n" +msgstr "" + +#: src/passphrase.c:73 +msgid "Passphrase" +msgstr "" + +#: src/passphrase.c:228 +msgid "[no user id]" +msgstr "" + +#: src/passphrase.c:232 +#, c-format +msgid "" +"%sPlease enter the passphrase for:\n" +"\n" +" %.*s \n" +"(%.*s)\n" +msgstr "" + +#: src/passphrase.c:236 +msgid "" +"Bad passphrase! Try again...\n" +"\n" +msgstr "" + +#: src/pop.c:98 src/pop.c:144 +msgid "error occurred on authorization\n" +msgstr "±ÂÅv®Éµo¥Í¿ù»~\n" + +#: src/pop.c:116 +msgid "Required APOP timestamp not found in greeting\n" +msgstr "¦b³q°T¤¤§ä¤£¨ì APOP ªº timestamp¡C\n" + +#: src/pop.c:122 +msgid "Timestamp syntax error in greeting\n" +msgstr "³q°T¤¤ªº timestamp »yªk¿ù»~\n" + +#: src/pop.c:169 src/pop.c:206 +msgid "POP3 protocol error\n" +msgstr "POP3 ¨ó©w¦³¿ù»~\n" + +#: src/prefs.c:56 +msgid "Reading configuration...\n" +msgstr "Ū¨ú²ÕºA³]©w¤¤...\n" + +#: src/prefs.c:76 src/prefs.c:183 +#, c-format +msgid "Found %s\n" +msgstr "§ä¨ì %s\n" + +#: src/prefs.c:90 +msgid "Finished reading configuration.\n" +msgstr "²ÕºA³]©wŪ¨ú§¹¦¨¡C\n" + +#: src/prefs.c:168 src/prefs.c:213 src/prefs_account.c:326 +#: src/prefs_account.c:340 src/prefs_common.c:2270 src/prefs_common.c:2294 +msgid "failed to write configuration to file\n" +msgstr "¼g¤J²ÕºA³]©w®É¥¢±Ñ¡C\n" + +#: src/prefs.c:216 +msgid "Configuration is saved.\n" +msgstr "²ÕºA³]©w¤wÀx¦s¡C\n" + +#: src/prefs.c:469 +msgid "Apply" +msgstr "®M¥Î" + +#: src/prefs_account.c:371 +msgid "Opening account preferences window...\n" +msgstr "¶}±Ò±b¸¹³ß¦n³]©wªºµøµ¡...\n" + +#: src/prefs_account.c:396 +#, c-format +msgid "Account%d" +msgstr "±b¸¹ %d" + +#: src/prefs_account.c:409 +msgid "Preferences for new account" +msgstr "·s±b¸¹ªº³ß¦n³]©w" + +#: src/prefs_account.c:414 +msgid "Preferences for each account" +msgstr "¨C­Ó±b¸¹ªº³ß¦n³]©w" + +#: src/prefs_account.c:435 +msgid "Creating account preferences window...\n" +msgstr "²£¥Í±b¸¹³ß¦n³]©wªºµøµ¡...\n" + +#: src/prefs_account.c:455 +msgid "Basic" +msgstr "°ò¥»³]©w" + +#: src/prefs_account.c:457 src/prefs_common.c:628 +msgid "Receive" +msgstr "±µ¦¬³]©w" + +#: src/prefs_account.c:463 +msgid "Advanced" +msgstr "¶i¶¥³]©w" + +#: src/prefs_account.c:516 +msgid "Name of this account" +msgstr "³o­Ó±b¸¹ªº¦WºÙ" + +#: src/prefs_account.c:525 +msgid "Usually used" +msgstr "¹w³]±b¸¹" + +#: src/prefs_account.c:529 +msgid "Personal information" +msgstr "­Ó¤H¸ê°T" + +#: src/prefs_account.c:538 +msgid "Full name" +msgstr "¥þ¦W" + +#: src/prefs_account.c:544 +msgid "Mail address" +msgstr "¹q¤l¶l¥ó¦a§}" + +#: src/prefs_account.c:550 +msgid "Organization" +msgstr "ªA°È¤½¥q/²Õ´" + +#: src/prefs_account.c:574 +msgid "Server information" +msgstr "¦øªA¾¹¸ê°T" + +#: src/prefs_account.c:595 +msgid "POP3 (normal)" +msgstr "POP3 (¤@¯ë¡^" + +#: src/prefs_account.c:597 +msgid "POP3 (APOP auth)" +msgstr "POP3 (APOP »{ÃÒ¡^" + +#: src/prefs_account.c:599 +msgid "IMAP4" +msgstr "" + +#: src/prefs_account.c:601 +msgid "News (NNTP)" +msgstr "·s»D (NNTP)" + +#: src/prefs_account.c:603 +msgid "None (local)" +msgstr "µL (local)" + +#: src/prefs_account.c:657 +msgid "News server" +msgstr "·s»D¦øªA¾¹" + +#: src/prefs_account.c:663 +msgid "Server for receiving" +msgstr "±µ¦¬¶l¥ó¦øªA¾¹" + +#: src/prefs_account.c:669 +msgid "SMTP server (send)" +msgstr "µo°e¶l¥ó¦øªA¾¹ (SMTP)" + +#: src/prefs_account.c:676 +msgid "User ID" +msgstr "±b¸¹" + +#: src/prefs_account.c:682 +msgid "Password" +msgstr "±K½X" + +#: src/prefs_account.c:726 +msgid "POP3" +msgstr "" + +#: src/prefs_account.c:734 +msgid "Remove messages on server when received" +msgstr "±µ¦¬¶l¥ó®É¤@¨Ö±q¦øªA¾¹¤W²¾°£¡C" + +#: src/prefs_account.c:736 +msgid "Receive all messages on server" +msgstr "±µ¦¬¦øªA¾¹¤W©Ò¦³ªº¶l¥ó¡C" + +#: src/prefs_account.c:738 +msgid "Receive at getting from all accounts" +msgstr "¤@¦¸±µ¦¬©Ò¦³±b¸¹ªº¶l¥ó" + +#: src/prefs_account.c:740 +msgid "Filter messages on receiving" +msgstr "¥´¶}«H¥ó¹LÂo¥\\¯à" + +#: src/prefs_account.c:777 src/prefs_common.c:1172 +msgid "Header" +msgstr "«H¥ó¼ÐÀY³]©w" + +#: src/prefs_account.c:784 +msgid "Add Date header field" +msgstr "¥[¤J¤é´Á" + +#: src/prefs_account.c:785 +msgid "Generate Message-ID" +msgstr "²£¥Í¶l¥óÃѧO½X" + +#: src/prefs_account.c:794 +msgid "Add user-defined header" +msgstr "¥[¤J¨Ï¥ÎªÌ©w¸qªº¼ÐÀY" + +#: src/prefs_account.c:796 src/prefs_common.c:1473 +msgid " Edit... " +msgstr "½s¿è..." + +#: src/prefs_account.c:803 +msgid "Automatically set following addresses" +msgstr "¦b¬ÛÃöÄæ¦ì¤W¦Û°Ê¥[¤J¤U¦C¹q¤l¶l¥ó«H½c¡G" + +#: src/prefs_account.c:812 +msgid "Cc" +msgstr "½Æ¥»" + +#: src/prefs_account.c:825 +msgid "Bcc" +msgstr "±K¥ó½Æ¥»" + +#: src/prefs_account.c:838 +msgid "Reply-To" +msgstr "¦^«H¦a§}" + +#: src/prefs_account.c:851 +msgid "Authentication" +msgstr "»{ÃÒ" + +#: src/prefs_account.c:859 +msgid "SMTP Authentication (SMTP AUTH)" +msgstr "SMTP »{ÃÒ" + +#: src/prefs_account.c:861 +msgid "Authenticate with POP3 before sending" +msgstr "°e«H«e¥ý°µ POP3 »{ÃÒ" + +#: src/prefs_account.c:895 +msgid "Signature file" +msgstr "ñ¦WÀÉ" + +#: src/prefs_account.c:933 +msgid "Specify SMTP port" +msgstr "«ü©w SMTP ³s±µ°ð" + +#: src/prefs_account.c:945 +msgid "Specify POP3 port" +msgstr "«ü©w POP3 ³s±µ°ð" + +#: src/prefs_account.c:957 +msgid "Specify domain name" +msgstr "«ü©wºô°ì" + +#: src/prefs_account.c:997 +msgid "Mail address is not entered." +msgstr "¥¼¿é¤J¹q¤l¶l¥ó«H½c¡C" + +#: src/prefs_account.c:1002 +msgid "SMTP server is not entered." +msgstr "¥¼¿é¤Jµo°e¶l¥ó¦øªA¾¹¡C" + +#: src/prefs_account.c:1007 +msgid "User ID is not entered." +msgstr "¥¼¿é¤J¨Ï¥ÎªÌ±b¸¹¡C" + +#: src/prefs_account.c:1012 +msgid "POP3 server is not entered." +msgstr "¥¼¿é¤J±µ¦¬¶l¥ó¦øªA¾¹¡C" + +#: src/prefs_account.c:1017 +msgid "IMAP4 server is not entered." +msgstr "¥¼¿é¤J±µ¦¬¶l¥ó¦øªA¾¹¡C" + +#: src/prefs_account.c:1022 +msgid "NNTP server is not entered." +msgstr "¥¼¿é¤J·s»D¦øªA¾¹¡C" + +#: src/prefs_common.c:605 +msgid "Creating common preferences window...\n" +msgstr "²£¥Í¦@¦P³ß¦n³]©wµøµ¡...\n" + +#: src/prefs_common.c:609 +msgid "Common Preferences" +msgstr "¦@¦P³ß¦n³]©w" + +#: src/prefs_common.c:634 +msgid "Display" +msgstr "Åã¥Ü" + +#: src/prefs_common.c:636 +msgid "Filtering" +msgstr "¹LÂo" + +#: src/prefs_common.c:639 +msgid "Privacy" +msgstr "¨p¤H¸ê®Æ" + +#: src/prefs_common.c:642 +msgid "Interface" +msgstr "¤¶­±" + +#: src/prefs_common.c:644 +msgid "Other" +msgstr "¨ä¥L" + +#: src/prefs_common.c:684 src/prefs_common.c:844 +msgid "External program" +msgstr "¥~³¡µ{¦¡" + +#: src/prefs_common.c:693 +msgid "Use external program for incorporation" +msgstr "¥Î¨ä¥L¥~³¡µ{¦¡¨Ó¦¬«H" + +#: src/prefs_common.c:700 src/prefs_common.c:861 +msgid "Program path" +msgstr "µ{¦¡¸ô®|" + +#: src/prefs_common.c:712 +msgid "Local spool" +msgstr "¥»¦a spool" + +#: src/prefs_common.c:723 +msgid "Incorporate from spool" +msgstr "±q spool ¨ú±o«H¥ó" + +#: src/prefs_common.c:725 +msgid "Filter on incorporation" +msgstr "¦¬«H®É¹LÂo" + +#: src/prefs_common.c:733 +msgid "Spool directory" +msgstr "Spool ¥Ø¿ý" + +#: src/prefs_common.c:753 +msgid "Auto-check new mail" +msgstr "¦Û°ÊÀˬd·s¶l¥ó" + +#: src/prefs_common.c:755 +msgid "each" +msgstr "¨C" + +#: src/prefs_common.c:767 +msgid "minute(s)" +msgstr "¤ÀÄÁ" + +#: src/prefs_common.c:776 +msgid "Check new mail on startup" +msgstr "¶}±Ò®ÉÀˬd·s¶l¥ó" + +#: src/prefs_common.c:778 +msgid "News" +msgstr "·s»D" + +#: src/prefs_common.c:786 +msgid "" +"Maximum article number to download\n" +"(unlimited if 0 is specified)" +msgstr "" +"¤@¦¸¤U¸ü¤å³¹¼Æ¶q¤W­­\n" +"(³]¬° 0 «h¤£­­¨î¼Æ¶q)" + +#: src/prefs_common.c:854 +msgid "Use external program for sending" +msgstr "¥Î¨ä¥L¥~³¡µ{¦¡¨Ó°e«H" + +#: src/prefs_common.c:878 +msgid "Save sent message to outbox" +msgstr "±N¤w°e¥X¤§«H¥ó¦s¨ì±H¥ó³Æ¥÷" + +#: src/prefs_common.c:880 +msgid "Queue message that failed to send" +msgstr "±H°e¥¢±Ñªº«H¥ó°e¨ì¼È¦s¸ê®Æ§¨" + +#: src/prefs_common.c:886 +msgid "Outgoing codeset" +msgstr "¿é¥X¦r¶°" + +#: src/prefs_common.c:901 +msgid "Automatic" +msgstr "¦Û°Ê" + +#: src/prefs_common.c:902 +msgid "7bit ascii (US-ASCII)" +msgstr "7¦ì¤¸ ASCII ¦r¶°" + +#: src/prefs_common.c:904 +msgid "Unicode (UTF-8)" +msgstr "" + +#: src/prefs_common.c:906 +msgid "Western European (ISO-8859-1)" +msgstr "¦è¼Ú»y¨t (ISO-8859-1)" + +#: src/prefs_common.c:908 +msgid "Central European (ISO-8859-2)" +msgstr "¤¤¼Ú»y¨t (ISO-8859-2)" + +#: src/prefs_common.c:909 +msgid "Baltic (ISO-8859-13)" +msgstr "ªiùªº®ü»y¨t (ISO-8859-13)" + +#: src/prefs_common.c:910 +msgid "Baltic (ISO-8859-4)" +msgstr "ªiùªº®ü»y¨t (ISO-8859-4)" + +#: src/prefs_common.c:911 +msgid "Greek (ISO-8859-7)" +msgstr "§Æþ»y (ISO-8859-7)" + +#: src/prefs_common.c:912 +msgid "Turkish (ISO-8859-9)" +msgstr "¤g¦Õ¨ä»y (ISO-8859-9)" + +#: src/prefs_common.c:913 +msgid "Cyrillic (ISO-8859-5)" +msgstr "´µ©Ô¤Ò»y (ISO-8859-5)" + +#: src/prefs_common.c:914 +msgid "Cyrillic (KOI8-R)" +msgstr "´µ©Ô¤Ò»y (KOI8-R)" + +#: src/prefs_common.c:915 +msgid "Cyrillic (Windows-1251)" +msgstr "´µ©Ô¤Ò»y (Windows-1251)" + +#: src/prefs_common.c:916 +msgid "Cyrillic (KOI8-U)" +msgstr "´µ©Ô¤Ò»y (KOI8-U)" + +#: src/prefs_common.c:918 +msgid "Japanese (ISO-2022-JP)" +msgstr "¤é¤å (ISO-2022-JP)" + +#: src/prefs_common.c:920 +msgid "Japanese (EUC-JP)" +msgstr "¤é¤å (EUC-JP)" + +#: src/prefs_common.c:921 +msgid "Japanese (Shift_JIS)" +msgstr "¤é¤å (Shift_JIS)" + +#: src/prefs_common.c:924 +msgid "Simplified Chinese (GB2312)" +msgstr "²Å餤¤å (GB2312)" + +#: src/prefs_common.c:925 +msgid "Traditional Chinese (Big5)" +msgstr "ÁcÅ餤¤å (Big5)" + +#: src/prefs_common.c:927 +msgid "Traditional Chinese (EUC-TW)" +msgstr "ÁcÅ餤¤å (EUC-TW)" + +#: src/prefs_common.c:928 +msgid "Chinese (ISO-2022-CN)" +msgstr "¤¤¤å (ISO-2022-CN)" + +#: src/prefs_common.c:930 +msgid "Korean (EUC-KR)" +msgstr "Áú¤å (EUC-KR)" + +#: src/prefs_common.c:980 +msgid "Quotation" +msgstr "¤Þ¥Î³]©w" + +#: src/prefs_common.c:988 +msgid "Quote message when replying" +msgstr "¦^«H®É¤Þ¥Î­ì¤å" + +#: src/prefs_common.c:994 +msgid "Quotation mark" +msgstr "¤Þ¥Îªº­ì¤å«e­±¥[¤W" + +#: src/prefs_common.c:1007 +msgid "Quotation format:" +msgstr "¤Þ¥Î­ì¤å®É³Ì«e­±¥[¤W¡G" + +#: src/prefs_common.c:1012 +msgid " Description of symbols " +msgstr "¯S®í²Å¸¹¥Nªíªº·N¸q" + +#: src/prefs_common.c:1039 +msgid "Insert signature automatically" +msgstr "¦Û°Ê¥[¤Jñ¦W" + +#: src/prefs_common.c:1045 +msgid "Signature separator" +msgstr "ñ¦W¤À¹j²Å¸¹" + +#: src/prefs_common.c:1063 +msgid "Wrap messages at" +msgstr "¨C¦æ³Ì¦h" + +#: src/prefs_common.c:1075 +msgid "characters" +msgstr "­Ó¦r¤¸" + +#: src/prefs_common.c:1083 +msgid "Wrap quotation" +msgstr "§é¦æ®ÉÅã¥Ü²Å¸¹" + +#: src/prefs_common.c:1085 +msgid "Wrap before sending" +msgstr "±H°e¤§«e¦Û°Ê§é¦æ" + +#: src/prefs_common.c:1143 +msgid "Registered rules" +msgstr "¤w¬ö¿ý¤§¹LÂo³W«h" + +#: src/prefs_common.c:1156 +msgid "Operator" +msgstr "¹Bºâ¤¸" + +#: src/prefs_common.c:1194 src/prefs_common.c:2378 src/prefs_common.c:2517 +#: src/prefs_common.c:2529 +msgid "(none)" +msgstr "(µL)" + +#: src/prefs_common.c:1200 +msgid "Keyword" +msgstr "ÃöÁä¦r" + +#: src/prefs_common.c:1221 +msgid "Predicate" +msgstr "¥]§t/¤£¥]§t" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2387 +#: src/prefs_common.c:2390 src/prefs_common.c:2534 src/prefs_common.c:2537 +msgid "contains" +msgstr "¥]§t" + +#: src/prefs_common.c:1233 src/prefs_common.c:1244 src/prefs_common.c:2534 +#: src/prefs_common.c:2537 +msgid "not contain" +msgstr "¤£¥]§t" + +#: src/prefs_common.c:1260 +msgid "Destination" +msgstr "©ñ¨ì..." + +#: src/prefs_common.c:1284 +msgid "Use regex" +msgstr "" + +#: src/prefs_common.c:1288 +msgid "Don't receive" +msgstr "©Úµ´±µ¦¬¦¹«H¥ó" + +#: src/prefs_common.c:1313 +msgid "Register" +msgstr "¥[¤J" + +#: src/prefs_common.c:1319 +msgid " Substitute " +msgstr "´À´«" + +#: src/prefs_common.c:1426 +msgid "Font" +msgstr "¦r«¬" + +#: src/prefs_common.c:1435 +msgid "Message" +msgstr "«H¥ó" + +#: src/prefs_common.c:1455 +msgid "Display unread number next to folder name" +msgstr "­Y¦³¥¼Åª«H¥ó¡A´NÅã¥Ü¦b¸ê®Æ§¨¦WºÙ«á­±" + +#: src/prefs_common.c:1468 +msgid "Enable coloration of message" +msgstr "«H¥ó¤¤ªº¦r¤¹³\\Åܦâ" + +#: src/prefs_common.c:1483 +msgid "Display 2-byte alphabet and numeric with 1-byte character" +msgstr "±N¥þ§Î­^¤å»P¼Æ¦r¥H¥b§Î¨ÓÅã¥Ü" + +#: src/prefs_common.c:1485 +msgid "Display short headers on message view" +msgstr "¦b«H¥ó¹wÄý¤¤Åã¥Ü«H¥ó¼ÐÀY" + +#: src/prefs_common.c:1495 +msgid "Line space" +msgstr "¦æ¶¡¶Z" + +#: src/prefs_common.c:1509 +msgid "pixel(s)" +msgstr "¹³¯À (pixels)" + +#: src/prefs_common.c:1514 +msgid "Leave space on head" +msgstr "¨C¦æ³Ì«e­±ªÅ¤@®æ" + +#: src/prefs_common.c:1524 +msgid "Translate header name (such as `From:', `Subject:')" +msgstr "±N¼ÐÀY¦WºÙ½Ķ¥X¨Ó" + +#: src/prefs_common.c:1527 +msgid "Display recipient on `From' column if sender is yourself" +msgstr "­Yµo«H¤H¬O§A¦Û¤v¡A´N¦b«H¥ó¦Cªíªº¨Ó·½¤¤Åã¥Ü¦¬«H¤H" + +#: src/prefs_common.c:1529 +msgid "Enable horizontal scroll bar" +msgstr "Åã¥Ü¤ô¥­±²¶b" + +#: src/prefs_common.c:1536 +msgid " Set display item of summary... " +msgstr "³]©w«H¥ó¦Cªí¿ï¶µ..." + +#: src/prefs_common.c:1585 +msgid "Encrypt message by default" +msgstr "«H¥ó¦Û°Ê¥[±K" + +#: src/prefs_common.c:1588 +msgid "Sign message by default" +msgstr "«H¥ó¦Û°Ê°µ¼Æ¦ìñ³¹" + +#: src/prefs_common.c:1591 +msgid "Automatically check signatures" +msgstr "¦Û°ÊÀˬd¼Æ¦ìñ³¹" + +#: src/prefs_common.c:1594 +msgid "Grab input while entering a passphrase" +msgstr "" + +#. create default signkey box +#: src/prefs_common.c:1601 +msgid "Default Sign Key" +msgstr "¹w³]ªº¼Æ¦ìñ³¹" + +#: src/prefs_common.c:1703 +msgid "" +"Emulate the behavior of mouse operation of\n" +"Emacs-based mailer" +msgstr "¼ÒÀÀ Emacs-based mailer ªº·Æ¹«¦æ¬°" + +#: src/prefs_common.c:1710 +msgid "Open first unread message when entering a folder" +msgstr "¶i¤J¸ê®Æ§¨®Éª½±µ¸õ¨ì²Ä¤@«Ê¥¼Åª«H¥ó¤W" + +#: src/prefs_common.c:1714 +msgid "Go to inbox after receiving new mail" +msgstr "±µ¦¬§¹·s¶l¥ó«áª½±µ¶i¤J¦¬¥ó§¨¤¤" + +#: src/prefs_common.c:1722 +msgid "Execute immediately when moving or deleting messages" +msgstr "²¾°Ê©Î§R°£«H¥ó®É¥ß§Y°õ¦æ" + +#: src/prefs_common.c:1729 +msgid "" +"(Messages will be just marked till execution\n" +" if this is turned off)" +msgstr "¡]­Y¦¹¿ï¶µÃö³¬¡A«h¥²¶·«ö¤U¡u°õ¦æ¡v¤~·|°õ¦æ²¾°Ê©Î§R°£¡^" + +#: src/prefs_common.c:1736 +msgid "Enable smooth scrolling on the message view" +msgstr "Åý«H¥ó¦Cªí¤¤±²¶b·Æ°Ê§ó¥­¶¶" + +#: src/prefs_common.c:1742 +msgid "Scroll step" +msgstr "¨C¦¸·Æ°ÊÂI¼Æ" + +#: src/prefs_common.c:1757 +msgid "On exit" +msgstr "Â÷¶}³]©w" + +#: src/prefs_common.c:1765 +msgid "Confirm on exit" +msgstr "Â÷¶}®É½T»{" + +#: src/prefs_common.c:1772 +msgid "Empty trash on exit" +msgstr "Â÷¶}®É²MªÅ§R°£ªº¶l¥ó" + +#: src/prefs_common.c:1774 +msgid "Ask before emptying" +msgstr "²M°£®É½T»{" + +#: src/prefs_common.c:1814 +#, c-format +msgid "External Web browser (%s will be replaced with URI)" +msgstr "¹w³]ªºÂsÄý¾¹«ü¥O¡]%s ±N·|³Q¸m´«¦¨ URL¡^" + +#: src/prefs_common.c:1821 src/prefs_common.c:1845 src/prefs_common.c:1861 +msgid "Command" +msgstr "©R¥O¦C" + +#: src/prefs_common.c:1838 +#, c-format +msgid "Printing (%s will be replaced with file name)" +msgstr "¦C¦L«ü¥O¡]%s ±N·|³Q¸m´«¦¨ÀɦW¡^" + +#: src/prefs_common.c:1854 +#, c-format +msgid "External editor (%s will be replaced with file name)" +msgstr "¨ä¥L¥~³¡½s¿è¾¹«ü¥O¡]%s ±N·|³Q¸m´«¦¨ÀɦW¡^" + +#: src/prefs_common.c:1915 +msgid "Set message colors" +msgstr "³]©w«H¥óÃC¦â" + +#: src/prefs_common.c:1923 +msgid "Colors" +msgstr "ÃC¦â" + +#: src/prefs_common.c:1961 +msgid "Quoted Text - First Level" +msgstr "¤Þ¨¥¤º®e - ²Ä¤@¼h" + +#: src/prefs_common.c:1967 +msgid "Quoted Text - Second Level" +msgstr "¤Þ¨¥¤º®e - ²Ä¤G¼h" + +#: src/prefs_common.c:1973 +msgid "Quoted Text - Third Level" +msgstr "¤Þ¨¥¤º®e - ²Ä¤T¼h" + +#: src/prefs_common.c:1979 +msgid "URI link" +msgstr "¶W³sµ²" + +#: src/prefs_common.c:1986 +msgid "Recycle quote colors" +msgstr "" + +#: src/prefs_common.c:2034 +msgid "Pick color for quotation level 1" +msgstr "¿ï¾Ü²Ä¤@¼h¤Þ¨¥ªºÃC¦â" + +#: src/prefs_common.c:2037 +msgid "Pick color for quotation level 2" +msgstr "¿ï¾Ü²Ä¤G¼h¤Þ¨¥ªºÃC¦â" + +#: src/prefs_common.c:2040 +msgid "Pick color for quotation level 3" +msgstr "¿ï¾Ü²Ä¤T¼h¤Þ¨¥ªºÃC¦â" + +#: src/prefs_common.c:2043 +msgid "Pick color for URI" +msgstr "¿ï¾Ü¶W³sµ²ªºÃC¦â" + +#: src/prefs_common.c:2167 +msgid "Description of symbols" +msgstr "¯S®í²Å¸¹¥Nªíªº·N¸q" + +#: src/prefs_common.c:2194 +#, c-format +msgid "" +"Date\n" +"From\n" +"Full Name of Sender\n" +"First Name of Sender\n" +"Initial of Sender\n" +"Subject\n" +"To\n" +"Message-ID\n" +"%" +msgstr "" + +#: src/prefs_common.c:2230 +msgid "Reading filter configuration...\n" +msgstr "Ū¨ú¹LÂo«H¥óªº³]©w¤¤...\n" + +#: src/prefs_common.c:2266 +msgid "Writing filter configuration...\n" +msgstr "¼g¤J¹LÂo«H¥óªº³]©w¤¤...\n" + +#: src/prefs_common.c:2309 +msgid "(New)" +msgstr "¡]·s¡^" + +#: src/prefs_common.c:2360 +msgid "Destination is not set." +msgstr "¥Øªº¸ê®Æ§¨¥¼³]©w" + +#: src/prefs_common.c:2365 +msgid "Header name is not set." +msgstr "¼ÐÀY¥¼³]©w" + +#: src/prefs_common.c:2471 +msgid "Delete rule" +msgstr "§R°£³W«h" + +#: src/prefs_common.c:2472 +msgid "Do you really want to delete this rule?" +msgstr "±z½T©w­n§R°£³o¶µ³W«h¶Ü¡H" + +#: src/prefs_common.c:2637 +msgid "Set display item" +msgstr "«H¥ó¦CªíÅã¥Ü³]©w" + +#: src/prefs_common.c:2654 +msgid "Mark" +msgstr "¼Ð°O" + +#: src/prefs_common.c:2656 +msgid "MIME" +msgstr "" + +#: src/prefs_common.c:2657 +msgid "Number" +msgstr "½s¸¹" + +#: src/prefs_common.c:2659 src/summaryview.c:351 +msgid "Date" +msgstr "¤é´Á" + +#: src/prefs_common.c:2660 src/summaryview.c:352 +msgid "From" +msgstr "¨Ó·½(From)" + +#: src/prefs_common.c:2661 src/summaryview.c:353 +msgid "Subject" +msgstr "¥DÃD" + +#: src/prefs_common.c:2714 +msgid "Font selection" +msgstr "¿ï¾Ü¦r«¬" + +#: src/procheader.c:526 +msgid "SunMonTueWedThuFriSat" +msgstr "" + +#: src/procmime.c:686 +msgid "Code conversion failed.\n" +msgstr "Âà½X¥¢±Ñ¡C\n" + +#: src/procmsg.c:138 +msgid "Cache data is corrupted\n" +msgstr "" + +#: src/procmsg.c:202 +msgid "\tNo cache file\n" +msgstr "¨S¦³§Ö¨úÀɮסC\n" + +#: src/procmsg.c:209 +msgid "\tReading summary cache..." +msgstr "Ū¨ú«H¥ó§Ö¨ú¦Cªí..." + +#: src/procmsg.c:214 +msgid "Cache version is different. Discarding it.\n" +msgstr "" + +#: src/procmsg.c:279 +msgid "\tMarking the messages..." +msgstr "±N«H¥ó¥[¤W¼Ð°O¤¤..." + +#: src/procmsg.c:323 +#, c-format +msgid "\t%d new message(s)\n" +msgstr "%d «Ê·s¶l¥ó¡C\n" + +#: src/procmsg.c:445 +msgid "Mark file not found.\n" +msgstr "§ä¤£¨ì¼Ð°OªºÀɮסC\n" + +#: src/procmsg.c:447 +#, c-format +msgid "Mark version is different (%d != %d). Discarding it.\n" +msgstr "" + +#: src/procmsg.c:463 +msgid "Can't open mark file with append mode.\n" +msgstr "µLªk­×§ï¼Ð°OªºÀɮסC\n" + +#: src/procmsg.c:468 +msgid "Can't open mark file with write mode.\n" +msgstr "µLªk¶}±Ò¼Ð°OªºÀɮסC\n" + +#: src/procmsg.c:651 +msgid "Sending queued message failed.\n" +msgstr "¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó±H°e¥¢±Ñ¡C\n" + +#: src/procmsg.c:708 +#, c-format +msgid "Print command line is invalid: `%s'\n" +msgstr "¦C¦L©R¥O¿ù»~¡G`%s'\n" + +#: src/progressdialog.c:48 +msgid "Creating progress dialog...\n" +msgstr "" + +#: src/recv.c:107 +msgid "error occurred while retrieving data.\n" +msgstr "§ì¨ú¸ê®Æ®Éµo¥Í¿ù»~¡C\n" + +#: src/recv.c:128 src/recv.c:169 src/recv.c:181 +msgid "Can't write to file.\n" +msgstr "µLªk¼g¤JÀɮסC\n" + +#: src/rfc2015.c:135 src/rfc2015.c:170 +msgid "Oops: Signature not verified" +msgstr "" + +#: src/rfc2015.c:138 src/rfc2015.c:173 +msgid "No signature found" +msgstr "" + +#: src/rfc2015.c:141 +msgid "Good signature" +msgstr "" + +#: src/rfc2015.c:144 +msgid "BAD signature" +msgstr "" + +#: src/rfc2015.c:147 src/rfc2015.c:182 +msgid "No public key to verify the signature" +msgstr "" + +#: src/rfc2015.c:150 src/rfc2015.c:185 +msgid "Error verifying the signature" +msgstr "" + +#: src/rfc2015.c:153 src/rfc2015.c:188 +msgid "Different results for signatures" +msgstr "" + +#: src/rfc2015.c:156 src/rfc2015.c:191 +msgid "Error: Unknown status" +msgstr "" + +#: src/rfc2015.c:176 +#, c-format +msgid "Good signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:179 +#, c-format +msgid "BAD signature from \"%s\"" +msgstr "" + +#: src/rfc2015.c:211 +msgid "Cannot find user ID for this key." +msgstr "" + +#: src/rfc2015.c:222 +#, c-format +msgid " aka \"%s\"\n" +msgstr "" + +#: src/rfc2015.c:250 +#, c-format +msgid "Signature made %s\n" +msgstr "" + +#: src/rfc2015.c:259 +#, c-format +msgid "Key fingerprint: %s\n" +msgstr "" + +#: src/select-keys.c:241 +msgid "Select Keys" +msgstr "" + +#: src/select-keys.c:253 +msgid "Select key for: " +msgstr "" + +#: src/select-keys.c:271 +msgid "Key ID" +msgstr "" + +#: src/select-keys.c:274 +msgid "Val" +msgstr "" + +#: src/select-keys.c:288 +msgid "Select" +msgstr "" + +#: src/send.c:146 +msgid "Queued message header is broken.\n" +msgstr "¼È¦s¸ê®Æ§¨¤¤ªº«H¥ó¼ÐÀY¿ù»~¡C\n" + +#: src/send.c:155 +msgid "Account not found. Using current account...\n" +msgstr "§ä¤£¨ì±b¸¹¡A±N§ï¥Î²{¦³±b¸¹...\n" + +#: src/send.c:166 +msgid "Account not found.\n" +msgstr "§ä¤£¨ì±b¸¹¡C\n" + +#: src/send.c:197 +#, c-format +msgid "Connecting to SMTP server: %s ...\n" +msgstr "³s½u¨ì SMTP ¦øªA¾¹ %s...\n" + +#: src/send.c:239 +#, c-format +msgid "Can't connect to SMTP server: %s:%d\n" +msgstr "µLªk³s½u¨ì SMTP ¦øªA¾¹ %s:%d\n" + +#: src/send.c:252 +msgid "Error occurred while sending HELO\n" +msgstr "°e HELO °T®§®Éµo¥Í¿ù»~\n" + +#: src/setup.c:43 +msgid "Mailbox setting" +msgstr "«H½c³]©w" + +#: src/setup.c:44 +msgid "" +"First, you have to set the location of mailbox.\n" +"You can use existing mailbox in MH format\n" +"if you have the one.\n" +"If you're not sure, just select OK." +msgstr "" +"­º¥ý¡A±z¥²¶·¿ï¾Ü±z¦s©ñ«H¥óªº¦ì¸m¡C\n" +"¦pªG±z¤w¸g¦³¤F¤@­Ó MH ®æ¦¡ªº«H½c¡A±z¥i¥H\n" +"ª½±µ¨Ï¥Î¡C\n" +"¦pªG±z¤£½T©w¦³¨S¦³¡A½Ðª½±µ«ö¤U¡u½T©w¡v¡C" + +#: src/sourcewindow.c:76 +msgid "Creating source window...\n" +msgstr "" + +#: src/sourcewindow.c:80 +msgid "Source of the message" +msgstr "«H¥ó­ì©l½X" + +#: src/sourcewindow.c:140 +#, c-format +msgid "Displaying the source of %s ...\n" +msgstr "" + +#: src/sourcewindow.c:142 +#, c-format +msgid "%s - Source" +msgstr "%s - ­ì©l½X" + +#: src/summary_search.c:99 src/summary_search.c:190 +msgid "Search" +msgstr "´M§ä" + +#: src/summary_search.c:172 +msgid "Case sensitive" +msgstr "°Ï¤À¤j¤p¼g" + +#: src/summary_search.c:178 +msgid "Backward search" +msgstr "©¹¦^´M§ä" + +#: src/summary_search.c:184 +msgid "Select all matched" +msgstr "¦Û°Ê¿ï¾Ü©Ò¦³§ä¨ìªº¶l¥ó" + +#: src/summary_search.c:191 +msgid "Clear" +msgstr "²M°£" + +#: src/summary_search.c:286 +msgid "Search failed" +msgstr "·j´M¥¢±Ñ" + +#: src/summary_search.c:287 +msgid "Search string not found." +msgstr "§ä¤£¨ì¸Ó¦r¦ê¡C" + +#: src/summary_search.c:292 +msgid "Beginning of list reached; continue from end?" +msgstr "·j´M¤w¨ì³»ºÝ¡C­n±qµ²§ÀÄ~Äò·j´M¶Ü¡H" + +#: src/summary_search.c:294 +msgid "End of list reached; continue from beginning?" +msgstr "·j´M¤w¨ìµ²§À¡C­n±q¶}ÀYÄ~Äò·j´M¶Ü¡H" + +#: src/summary_search.c:296 +msgid "Search finished" +msgstr "·j´Mµ²§ô" + +#: src/summaryview.c:288 +msgid "/M_ove..." +msgstr "/²¾°Ê...(_o)" + +#: src/summaryview.c:289 +msgid "/_Copy..." +msgstr "/½Æ»s...(_C)" + +#: src/summaryview.c:291 +msgid "/E_xecute" +msgstr "/°õ¦æ(_x)" + +#: src/summaryview.c:292 +msgid "/_Mark" +msgstr "/¼Ð°O(_M)" + +#: src/summaryview.c:293 +msgid "/_Mark/_Mark" +msgstr "/¼Ð°O(_M)/¼Ð°O(_M)" + +#: src/summaryview.c:294 +msgid "/_Mark/_Unmark" +msgstr "/¼Ð°O(_M)/¥h°£¼Ð°O(_U)" + +#: src/summaryview.c:295 +msgid "/_Mark/---" +msgstr "/¼Ð°O(_M)/---" + +#: src/summaryview.c:296 +msgid "/_Mark/Mark as unr_ead" +msgstr "/¼Ð°O(_M)/¼Ð°O¦¨¥¼Åª(_e)" + +#: src/summaryview.c:297 +msgid "/_Mark/Make it as _being read" +msgstr "/¼Ð°O(_M)/¼Ð°O¦¨¤wŪ(_M)" + +#: src/summaryview.c:300 +msgid "/_Reply" +msgstr "/¦^ÂÐ(_R)" + +#: src/summaryview.c:301 +msgid "/Reply to a_ll" +msgstr "/¥þ³¡¦^ÂÐ(_l)" + +#: src/summaryview.c:302 +msgid "/_Forward" +msgstr "/Âà±H(_F)" + +#: src/summaryview.c:303 +msgid "/Forward as an a_ttachment" +msgstr "/Âà±H¦¨ªþ¥[ÀÉ(_t)" + +#: src/summaryview.c:306 +msgid "/Open in new _window" +msgstr "/¦b·sµøµ¡¶}±Ò(_w)" + +#: src/summaryview.c:307 +msgid "/View so_urce" +msgstr "/Åã¥Ü«H¥ó­ì©l½X(_u)" + +#: src/summaryview.c:308 +msgid "/Show all _header" +msgstr "/Åã¥Ü©Ò¦³ªº¼ÐÀY(_h)" + +#: src/summaryview.c:309 +msgid "/Re_edit" +msgstr "/­«·s½s¿è(_e)" + +#: src/summaryview.c:312 +msgid "/_Print..." +msgstr "/¦C¦L...(_P)" + +#: src/summaryview.c:314 +msgid "/Select _all" +msgstr "/¥þ¿ï(_a)" + +#: src/summaryview.c:320 +msgid "M" +msgstr "" + +#: src/summaryview.c:320 +msgid "U" +msgstr "" + +#: src/summaryview.c:335 +msgid "Creating summary view...\n" +msgstr "" + +#: src/summaryview.c:350 +msgid "No." +msgstr "" + +#: src/summaryview.c:567 +msgid "Process mark" +msgstr "" + +#: src/summaryview.c:568 +msgid "Some marks are left. Process it?" +msgstr "" + +#: src/summaryview.c:592 +msgid "" +"empty folder\n" +"\n" +msgstr "" + +#: src/summaryview.c:604 +#, c-format +msgid "Scanning folder (%s)..." +msgstr "±½´y¸ê®Æ§¨(%s)..." + +#: src/summaryview.c:673 +msgid "done." +msgstr "§¹¦¨¡C" + +#: src/summaryview.c:807 +msgid "No unread message" +msgstr "¨S¦³¥¼Åª«H¥ó" + +#: src/summaryview.c:808 +msgid "No unread message found. Go to next folder?" +msgstr "¨S¦³¥¼Åª«H¥ó¡C­n¨ì¤U¤@­Ó¸ê®Æ§¨¶Ü¡H" + +#: src/summaryview.c:944 src/summaryview.c:946 +msgid "Attracting messages by subject..." +msgstr "" + +#: src/summaryview.c:1089 +#, c-format +msgid "%d deleted" +msgstr "%d ¤w§R°£" + +#: src/summaryview.c:1093 +#, c-format +msgid "%s%d moved" +msgstr "%s%d ¤w²¾°Ê" + +#: src/summaryview.c:1094 src/summaryview.c:1101 +msgid ", " +msgstr "" + +#: src/summaryview.c:1099 +#, c-format +msgid "%s%d copied" +msgstr "%s%d ¤w½Æ»s" + +#: src/summaryview.c:1116 +msgid " item(s) selected" +msgstr "«Ê¤w¿ï¾Ü" + +#: src/summaryview.c:1127 +#, c-format +msgid "%d new, %d unread, %d total (%s)" +msgstr "%d «Ê¥¼Åª¡A%d «Ê¤wŪ¡A¦@ %d «Ê(%s)" + +#: src/summaryview.c:1133 +#, c-format +msgid "%d new, %d unread, %d total" +msgstr "%d «Ê¥¼Åª¡A%d «Ê¤wŪ¡A¦@ %d «Ê" + +#: src/summaryview.c:1174 src/summaryview.c:1175 +msgid "Sorting summary..." +msgstr "«H¥ó±Æ§Ç¤¤..." + +#: src/summaryview.c:1213 +msgid "\tSetting summary from message data..." +msgstr "" + +#: src/summaryview.c:1215 +msgid "Setting summary from message data..." +msgstr "²£¥Í«H¥ó¦Cªí¤¤..." + +#: src/summaryview.c:1324 +#, c-format +msgid "Writing summary cache (%s)..." +msgstr "¼g¤J§Ö¨ú(%s)..." + +#: src/summaryview.c:1376 +msgid "(No Date)" +msgstr "(¨S¦³¤é´Á)" + +#: src/summaryview.c:1641 +#, c-format +msgid "Message %d is marked\n" +msgstr "«H¥ó %d ¤w¼Ð°O\n" + +#: src/summaryview.c:1670 +#, c-format +msgid "Message %d is marked as being read\n" +msgstr "«H¥ó %d ¤w¼Ð°O¦¨¤wŪ\n" + +#: src/summaryview.c:1705 +#, c-format +msgid "Message %d is marked as unread\n" +msgstr "«H¥ó %d ¤w¼Ð°O¦¨¥¼Åª\n" + +#: src/summaryview.c:1747 +#, c-format +msgid "Message %s/%d is set to delete\n" +msgstr "«H¥ó %s/%d ¤w¼Ð°O§R°£\n" + +#: src/summaryview.c:1761 +msgid "Current folder is Trash." +msgstr "±z²{¦b¦b¤w§R°£«H¥ó¸ê®Æ§¨¤¤¡C" + +#: src/summaryview.c:1783 src/summaryview.c:1785 +msgid "Deleting duplicated messages..." +msgstr "§R°£­«ÂЪº«H¥ó..." + +#: src/summaryview.c:1835 +#, c-format +msgid "Message %s/%d is unmarked\n" +msgstr "«H¥ó %s/%d ¤w®ø°£¼Ð°O\n" + +#: src/summaryview.c:1872 +#, c-format +msgid "Message %d is set to move to %s\n" +msgstr "«H¥ó %d ¤w³]©w²¾°Ê¨ì %s\n" + +#: src/summaryview.c:1884 +msgid "Destination is same as current folder." +msgstr "¥Ø¼Ð¸ê®Æ§¨»P¨Ó·½¸ê®Æ§¨¬Û¦P" + +#: src/summaryview.c:1933 +#, c-format +msgid "Message %d is set to copy to %s\n" +msgstr "" + +#: src/summaryview.c:1946 +msgid "Destination to copy is same as current folder." +msgstr "«H¥óµLªk½Æ»s¨ì¦P¤@­Ó¸ê®Æ§¨¤º" + +#: src/summaryview.c:1978 +msgid "Selecting all messages..." +msgstr "¿ï¾Ü©Ò¦³ªº«H¥ó..." + +#: src/summaryview.c:2032 +msgid "Print" +msgstr "¦C¦L" + +#: src/summaryview.c:2033 +#, c-format +msgid "" +"Enter the print command line:\n" +"(`%s' will be replaced with file name)" +msgstr "" +"½Ð¿é¤J¦C¦L«ü¥O¡G\n" +"¡] `%s' ±N·|³Q¸m´«¬°ÀɦW¡^" + +#: src/summaryview.c:2039 +#, c-format +msgid "" +"Print command line is invalid:\n" +"`%s'" +msgstr "" +"¿é¤Jªº¦C¦L«ü¥O¦³»~¡G\n" +"`%s'" + +#: src/summaryview.c:2256 src/summaryview.c:2257 +msgid "Building threads..." +msgstr "²£¥Í«H¥ó¦ê¦C¤¤..." + +#: src/summaryview.c:2279 src/summaryview.c:2280 +msgid "Unthreading..." +msgstr "¸Ñ°£«H¥ó¦ê¦C¤¤..." + +#: src/summaryview.c:2302 +msgid "Unthreading for execution..." +msgstr "" + +#: src/summaryview.c:2389 +msgid "filtering..." +msgstr "" + +#: src/summaryview.c:2390 +msgid "Filtering..." +msgstr "¹LÂo¤¤..." + +#: src/summaryview.c:2494 +#, c-format +msgid "Go to %s\n" +msgstr "¨ì %s\n" + +#: src/textview.c:137 +msgid "Creating text view...\n" +msgstr "" + +#: src/textview.c:372 +msgid "To save this part, pop up the context menu with\n" +msgstr "­nÀx¦s³o­ÓÀɮסA½Ð«ö·Æ¹«¥kÁä¨Ã¦b¥Ø¿ý¤¤\n" + +#: src/textview.c:375 +msgid "" +"right click and select `Save as...', or press `y' key.\n" +"\n" +msgstr "" +"¿ï¾Ü¡y¥t¦s·sÀÉ¡z...¡A©ÎªÌ¬O«ö¤U `y' Áä¡C\n" +"\n" + +#: src/textview.c:379 +msgid "To display this part as a text message, select\n" +msgstr "­n¥H¤å¦r¼Ò¦¡Æ[¬Ý³o­ÓÀɮסA½Ð¿ï¾Ü¡y¥H¯Â¤å¦r§e²{¡z\n" + +#: src/textview.c:382 +msgid "" +"`Display as text', or press `t' key.\n" +"\n" +msgstr "" +"©ÎªÌ¬O«ö¤U `t' Áä¡C\n" +"\n" + +#: src/textview.c:386 +msgid "To open this part with external program, select `Open',\n" +msgstr "­n¥H¨ä¥Lµ{¦¡¶}±Ò³o­ÓÀɮסA½Ð¿ï¾Ü¡y¶}±Ò¡z\n" + +#: src/textview.c:389 +msgid "or double-click, or click the center button, or press `l' key." +msgstr "¤]¥i¥HÂùÀ»¸ÓÀɮסA©Î¬O«ö·Æ¹«¤¤Áä¡A©Î¬O«ö `l' Áä¡C" + +#: src/textview.c:410 +msgid "This signature has not been checked yet.\n" +msgstr "³o­Ó¼Æ¦ìñ³¹©|¥¼¸g¹LÀˬd\n" + +#: src/textview.c:413 +msgid "To check it, pop up the context menu with\n" +msgstr "­nÀˬd¼Æ¦ìñ³¹¡A½Ð«ö¤U·Æ¹«¥kÁä¨Ã¦b¥Ø¿ý¤¤\n" + +#: src/textview.c:416 +msgid "right click and select `Check signature'.\n" +msgstr "¿ï¾Ü¡uÀˬd¼Æ¦ìñ³¹¡v¡C\n" + +#: src/utils.c:1376 src/utils.c:1453 +#, c-format +msgid "writing to %s failed.\n" +msgstr "¼g¤J¨ì %s ªº°Ê§@¥¢±Ñ¡C\n" + +#: src/utils.c:1396 +#, c-format +msgid "File copy from %s to %s failed.\n" +msgstr "" + +#: src/utils.c:1614 +#, c-format +msgid "Open URI command line is invalid: `%s'" +msgstr "¶}±Ò URL ªº©R¥O¿ù»~¡G`%s'" + +#~ msgid "/_Summary/Select a_ll" +#~ msgstr "/«H¥ó¦Cªí(_S)/¥þ¿ï(_l)" + +#~ msgid "Clean trash" +#~ msgstr "²M°£¤w§R°£«H¥ó" + +#~ msgid "/_Mark/Mark as _important" +#~ msgstr "/¼Ð°O(_M)/¼Ð°O¬°­«­n(_i)" + +#~ msgid "TextView: color allocation failed\n" +#~ msgstr "TextView: ÃC¦â°t¸m¥¢±Ñ\n" + +#~ msgid "*** Warning: code conversion failed ***\n" +#~ msgstr "*** ĵ§i¡GÂà½X¥¢±Ñ ***\n" + +#~ msgid "can't set mailbox: %s\n" +#~ msgstr "µLªk³]©w«H½c¡G%s\n" + +#~ msgid "Invalid MIME type\n" +#~ msgstr "¤£¦Xªkªº MIME «¬ºA\n" + +#~ msgid "Reply-To:" +#~ msgstr "¦^«H¦ì§}¡G" + +#~ msgid "%s - Compose message [Edited]" +#~ msgstr "%s - ·s¶l¥ó [¤wÅܧó]" + +#~ msgid "Previously selected folder: %s\n" +#~ msgstr "«e¤@­Ó¿ï¾Üªº¸ê®Æ§¨¡G%s\n" + +#~ msgid "New directory" +#~ msgstr "·s¥Ø¿ý" + +#~ msgid "The directory not found. Create it?" +#~ msgstr "³o­Ó¥Ø¿ý¤£¦s¦b¡C­n²£¥Í¶Ü¡H" + +#~ msgid "Can't create directory." +#~ msgstr "µLªk²£¥Í¥Ø¿ý¡C" + +#~ msgid "Selected name isn't a directory." +#~ msgstr "¿ï¾Üªº¸ê®Æ§¨¨Ã¤£¬O¤@­Ó¥Ø¿ý¡C" + +#~ msgid "/_Add news server" +#~ msgstr "/·s¼W·s»D¦øªA¾¹(_A)" + +#~ msgid "Writing mail folder list..." +#~ msgstr "¼g¤J¶l¥ó¸ê®Æ§¨¦Cªí..." + +#~ msgid "Writing imap folder list..." +#~ msgstr "¼g¤Jimap¸ê®Æ§¨¦Cªí..." + +#~ msgid "Writing news folder list..." +#~ msgstr "¼g¤J·s»D¸ê®Æ§¨¦Cªí..." + +#~ msgid "Reading folder %s ..." +#~ msgstr "Ū¨ú¸ê®Æ§¨ %s ..." + +#~ msgid "Mail Server (IMAP4)" +#~ msgstr "¶l¥ó¦øªA¾¹ (IMAP4)" + +#~ msgid "NetNews" +#~ msgstr "·s»D" + +#~ msgid "reading folder list %s ..." +#~ msgstr "Ū¨ú¸ê®Æ§¨¦Cªí %s ..." + +#~ msgid "Broken folder list cache.\n" +#~ msgstr "¸ê®Æ§¨¦Cªí¤w·lÃa¡C\n" + +#~ msgid "deleting folder %s ...\n" +#~ msgstr "§R°£¸ê®Æ§¨ %s ¤¤, ½Ðµy­Ô...\n" + +#~ msgid "deleting newsgroup %s ...\n" +#~ msgstr "§R°£·s»D¸s²Õ %s ¤¤, ½Ðµy­Ô...\n" + +#~ msgid "Input adding news server:" +#~ msgstr "½Ð¿é¤J·sªº·s»D¦øªA¾¹¡G" + +#~ msgid "The news server `%s' already exists." +#~ msgstr "·s»D¦øªA¾¹ `%s' ¤w¦s¦b¡C" + +#~ msgid "deleting cache folder of %s ...\n" +#~ msgstr "§R°£§Ö¨ú¸ê®Æ§¨ %s ...\n" + +#~ msgid "IMAP login command is invalid.\n" +#~ msgstr "IMAP µn¤J©R¥O¿ù»~¡C\n" + +#~ msgid "Select destination directory" +#~ msgstr "¿ï¾Ü¥Ø¼Ð¥Ø¿ý" + +#~ msgid "can't drop message into %s\n" +#~ msgstr "µLªk±N«H¥ó©ñ¨ì %s¡C\n" + +#~ msgid "%s exists\n" +#~ msgstr "%s ¤w¦s¦b\n" + +#~ msgid "/_File/_New window" +#~ msgstr "/ÀÉ®×(_F)/·sµøµ¡(_N)" + +#~ msgid "Next unread" +#~ msgstr "¤U¤@«Ê" + +#~ msgid "IMAP session is not established\n" +#~ msgstr "IMAP ³s½u©|¥¼«Ø¥ß\n" + +#~ msgid "news session is not established\n" +#~ msgstr "·s»D³s½u©|¥¼«Ø¥ß¡C\n" + +#~ msgid "Connecting to %s ..." +#~ msgstr "³s±µ¨ì %s..." diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 000000000..572f6d06c --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,133 @@ +bin_PROGRAMS = sylpheed + +sylpheed_SOURCES = \ + intl.h \ + defs.h \ + main.c main.h \ + mainwindow.c mainwindow.h \ + folderview.c folderview.h \ + summaryview.c summaryview.h \ + messageview.c messageview.h \ + headerview.c headerview.h \ + textview.c textview.h \ + imageview.c imageview.h \ + mimeview.c mimeview.h \ + summary_search.c summary_search.h \ + folder.c folder.h \ + procmsg.c procmsg.h \ + procheader.c procheader.h \ + filter.c filter.h \ + compose.c compose.h \ + gtkshruler.c gtkshruler.h \ + gtksctree.c gtksctree.h \ + menu.c menu.h \ + prefs.c prefs.h \ + prefs_common.c prefs_common.h \ + prefs_filter.c prefs_filter.h \ + prefs_account.c prefs_account.h \ + account.c account.h \ + addressbook.c addressbook.h \ + filesel.c filesel.h \ + foldersel.c foldersel.h \ + statusbar.c statusbar.h \ + headerwindow.c headerwindow.h \ + logwindow.c logwindow.h \ + sourcewindow.c sourcewindow.h \ + manage_window.c manage_window.h \ + alertpanel.c alertpanel.h \ + inputdialog.c inputdialog.h \ + progressdialog.c progressdialog.h \ + about.c about.h \ + setup.c setup.h \ + utils.c utils.h \ + gtkutils.c gtkutils.h \ + codeconv.c codeconv.h \ + unmime.c unmime.h \ + base64.c base64.h \ + uuencode.c uuencode.h \ + md5c.c md5.h md5global.h \ + md5ify.c md5ify.h \ + rfc822.c rfc822.h \ + socket.c socket.h \ + automaton.c automaton.h \ + session.c session.h \ + smtp.c smtp.h \ + esmtp.c esmtp.h \ + pop.c pop.h \ + mh.c mh.h \ + mbox.c mbox.h \ + send.c send.h \ + recv.c recv.h \ + inc.c inc.h \ + import.c import.h \ + nntp.c nntp.h \ + news.c news.h \ + imap.c imap.h \ + xml.c xml.h \ + html.c html.h \ + procmime.c procmime.h \ + rfc2015.c rfc2015.h \ + passphrase.c passphrase.h \ + select-keys.c select-keys.h \ + manual.c manual.h \ + addr_compl.c addr_compl.h + +EXTRA_DIST = \ + pixmaps/clip.xpm \ + pixmaps/deleted.xpm \ + pixmaps/dir-close.xpm \ + pixmaps/dir-open.xpm \ + pixmaps/folder.xpm \ + pixmaps/forwarded.xpm \ + pixmaps/group.xpm \ + pixmaps/inbox.xpm \ + pixmaps/mark.xpm \ + pixmaps/new.xpm \ + pixmaps/outbox.xpm \ + pixmaps/regular.xpm \ + pixmaps/replied.xpm \ + pixmaps/trash.xpm \ + pixmaps/unread.xpm \ + pixmaps/linewrap.xpm \ + pixmaps/stock_mail.xpm \ + pixmaps/stock_mail_attach.xpm \ + pixmaps/stock_mail_receive.xpm \ + pixmaps/stock_mail_receive_all.xpm \ + pixmaps/stock_mail_send.xpm \ + pixmaps/stock_mail_compose.xpm \ + pixmaps/stock_mail_reply.xpm \ + pixmaps/stock_mail_reply_to_all.xpm \ + pixmaps/stock_mail_forward.xpm \ + pixmaps/stock_preferences.xpm \ + pixmaps/stock_properties.xpm \ + pixmaps/stock_search.xpm \ + pixmaps/stock_close.xpm \ + pixmaps/stock_exec.xpm \ + pixmaps/stock_trash.xpm \ + pixmaps/stock_up_arrow.xpm \ + pixmaps/stock_down_arrow.xpm \ + pixmaps/stock_paste.xpm \ + pixmaps/tb_address_book.xpm \ + pixmaps/sylpheed-logo.xpm + +INCLUDES = \ + -DG_LOG_DOMAIN=\"Sylpheed\" \ + -I$(top_srcdir)/libkcc \ + -I$(top_srcdir)/intl \ + $(GTK_CFLAGS) \ + $(GDK_IMLIB_CFLAGS) \ + $(GDK_PIXBUF_CFLAGS) \ + -I$(includedir) + +sylpheed_LDADD = \ + $(top_builddir)/libkcc/libkcc.a \ + $(INTLLIBS) \ + $(GTK_LIBS) \ + $(GDK_IMLIB_LIBS) \ + $(GDK_PIXBUF_LIBS) \ + $(GPGME_LIBS) + +CPPFLAGS = \ + -DLOCALEDIR=\""$(localedir)"\" \ + -DMANUALDIR=\""$(manualdir)"\" \ + -DHOST_ALIAS=\""$(host_alias)"\" diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 000000000..d91ba78c4 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,423 @@ +# Makefile.in generated automatically by automake 1.4 from Makefile.am + +# Copyright (C) 1994, 1995-8, 1999 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. + + +SHELL = @SHELL@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +prefix = @prefix@ +exec_prefix = @exec_prefix@ + +bindir = @bindir@ +sbindir = @sbindir@ +libexecdir = @libexecdir@ +datadir = @datadir@ +sysconfdir = @sysconfdir@ +sharedstatedir = @sharedstatedir@ +localstatedir = @localstatedir@ +libdir = @libdir@ +infodir = @infodir@ +mandir = @mandir@ +includedir = @includedir@ +oldincludedir = /usr/include + +DESTDIR = + +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ + +top_builddir = .. + +ACLOCAL = @ACLOCAL@ +AUTOCONF = @AUTOCONF@ +AUTOMAKE = @AUTOMAKE@ +AUTOHEADER = @AUTOHEADER@ + +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ $(AM_INSTALL_PROGRAM_FLAGS) +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +transform = @program_transform_name@ + +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +host_alias = @host_alias@ +host_triplet = @host@ +AS = @AS@ +CATALOGS = @CATALOGS@ +CATOBJEXT = @CATOBJEXT@ +CC = @CC@ +CPP = @CPP@ +DATADIRNAME = @DATADIRNAME@ +DLLTOOL = @DLLTOOL@ +GDK_IMLIB_CFLAGS = @GDK_IMLIB_CFLAGS@ +GDK_IMLIB_LIBS = @GDK_IMLIB_LIBS@ +GDK_PIXBUF_CFLAGS = @GDK_PIXBUF_CFLAGS@ +GDK_PIXBUF_CONFIG = @GDK_PIXBUF_CONFIG@ +GDK_PIXBUF_LIBS = @GDK_PIXBUF_LIBS@ +GENCAT = @GENCAT@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_CONFIG = @GLIB_CONFIG@ +GLIB_LIBS = @GLIB_LIBS@ +GMOFILES = @GMOFILES@ +GMSGFMT = @GMSGFMT@ +GPGME_CFLAGS = @GPGME_CFLAGS@ +GPGME_CONFIG = @GPGME_CONFIG@ +GPGME_LIBS = @GPGME_LIBS@ +GTK_CFLAGS = @GTK_CFLAGS@ +GTK_CONFIG = @GTK_CONFIG@ +GTK_LIBS = @GTK_LIBS@ +GT_NO = @GT_NO@ +GT_YES = @GT_YES@ +IMLIB_CFLAGS = @IMLIB_CFLAGS@ +IMLIB_CONFIG = @IMLIB_CONFIG@ +IMLIB_LIBS = @IMLIB_LIBS@ +INCLUDE_LOCALE_H = @INCLUDE_LOCALE_H@ +INSTOBJEXT = @INSTOBJEXT@ +INTLDEPS = @INTLDEPS@ +INTLLIBS = @INTLLIBS@ +INTLOBJS = @INTLOBJS@ +LIBTOOL = @LIBTOOL@ +LN_S = @LN_S@ +LT_AGE = @LT_AGE@ +LT_CURRENT = @LT_CURRENT@ +LT_RELEASE = @LT_RELEASE@ +LT_REVISION = @LT_REVISION@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +OBJDUMP = @OBJDUMP@ +PACKAGE = @PACKAGE@ +POFILES = @POFILES@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +l = @l@ +localedir = @localedir@ +manualdir = @manualdir@ + +bin_PROGRAMS = sylpheed + +sylpheed_SOURCES = intl.h defs.h main.c main.h mainwindow.c mainwindow.h folderview.c folderview.h summaryview.c summaryview.h messageview.c messageview.h headerview.c headerview.h textview.c textview.h imageview.c imageview.h mimeview.c mimeview.h summary_search.c summary_search.h folder.c folder.h procmsg.c procmsg.h procheader.c procheader.h filter.c filter.h compose.c compose.h gtkshruler.c gtkshruler.h gtksctree.c gtksctree.h menu.c menu.h prefs.c prefs.h prefs_common.c prefs_common.h prefs_filter.c prefs_filter.h prefs_account.c prefs_account.h account.c account.h addressbook.c addressbook.h filesel.c filesel.h foldersel.c foldersel.h statusbar.c statusbar.h headerwindow.c headerwindow.h logwindow.c logwindow.h sourcewindow.c sourcewindow.h manage_window.c manage_window.h alertpanel.c alertpanel.h inputdialog.c inputdialog.h progressdialog.c progressdialog.h about.c about.h setup.c setup.h utils.c utils.h gtkutils.c gtkutils.h codeconv.c codeconv.h unmime.c unmime.h base64.c base64.h uuencode.c uuencode.h md5c.c md5.h md5global.h md5ify.c md5ify.h rfc822.c rfc822.h socket.c socket.h automaton.c automaton.h session.c session.h smtp.c smtp.h esmtp.c esmtp.h pop.c pop.h mh.c mh.h mbox.c mbox.h send.c send.h recv.c recv.h inc.c inc.h import.c import.h nntp.c nntp.h news.c news.h imap.c imap.h xml.c xml.h html.c html.h procmime.c procmime.h rfc2015.c rfc2015.h passphrase.c passphrase.h select-keys.c select-keys.h manual.c manual.h addr_compl.c addr_compl.h + + +EXTRA_DIST = pixmaps/clip.xpm pixmaps/deleted.xpm pixmaps/dir-close.xpm pixmaps/dir-open.xpm pixmaps/folder.xpm pixmaps/forwarded.xpm pixmaps/group.xpm pixmaps/inbox.xpm pixmaps/mark.xpm pixmaps/new.xpm pixmaps/outbox.xpm pixmaps/regular.xpm pixmaps/replied.xpm pixmaps/trash.xpm pixmaps/unread.xpm pixmaps/linewrap.xpm pixmaps/stock_mail.xpm pixmaps/stock_mail_attach.xpm pixmaps/stock_mail_receive.xpm pixmaps/stock_mail_receive_all.xpm pixmaps/stock_mail_send.xpm pixmaps/stock_mail_compose.xpm pixmaps/stock_mail_reply.xpm pixmaps/stock_mail_reply_to_all.xpm pixmaps/stock_mail_forward.xpm pixmaps/stock_preferences.xpm pixmaps/stock_properties.xpm pixmaps/stock_search.xpm pixmaps/stock_close.xpm pixmaps/stock_exec.xpm pixmaps/stock_trash.xpm pixmaps/stock_up_arrow.xpm pixmaps/stock_down_arrow.xpm pixmaps/stock_paste.xpm pixmaps/tb_address_book.xpm pixmaps/sylpheed-logo.xpm + + +INCLUDES = -DG_LOG_DOMAIN=\"Sylpheed\" -I$(top_srcdir)/libkcc -I$(top_srcdir)/intl $(GTK_CFLAGS) $(GDK_IMLIB_CFLAGS) $(GDK_PIXBUF_CFLAGS) -I$(includedir) + + +sylpheed_LDADD = $(top_builddir)/libkcc/libkcc.a $(INTLLIBS) $(GTK_LIBS) $(GDK_IMLIB_LIBS) $(GDK_PIXBUF_LIBS) $(GPGME_LIBS) + + +CPPFLAGS = -DLOCALEDIR=\""$(localedir)"\" -DMANUALDIR=\""$(manualdir)"\" -DHOST_ALIAS=\""$(host_alias)"\" + +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = ../config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(bin_PROGRAMS) + + +DEFS = @DEFS@ -I. -I$(srcdir) -I.. +LDFLAGS = @LDFLAGS@ +LIBS = @LIBS@ +sylpheed_OBJECTS = main.o mainwindow.o folderview.o summaryview.o \ +messageview.o headerview.o textview.o imageview.o mimeview.o \ +summary_search.o folder.o procmsg.o procheader.o filter.o compose.o \ +gtkshruler.o gtksctree.o menu.o prefs.o prefs_common.o prefs_filter.o \ +prefs_account.o account.o addressbook.o filesel.o foldersel.o \ +statusbar.o headerwindow.o logwindow.o sourcewindow.o manage_window.o \ +alertpanel.o inputdialog.o progressdialog.o about.o setup.o utils.o \ +gtkutils.o codeconv.o unmime.o base64.o uuencode.o md5c.o md5ify.o \ +rfc822.o socket.o automaton.o session.o smtp.o esmtp.o pop.o mh.o \ +mbox.o send.o recv.o inc.o import.o nntp.o news.o imap.o xml.o html.o \ +procmime.o rfc2015.o passphrase.o select-keys.o manual.o addr_compl.o +sylpheed_DEPENDENCIES = $(top_builddir)/libkcc/libkcc.a +sylpheed_LDFLAGS = +CFLAGS = @CFLAGS@ +COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(LDFLAGS) -o $@ +DIST_COMMON = Makefile.am Makefile.in + + +DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST) + +TAR = tar +GZIP_ENV = --best +DEP_FILES = .deps/about.P .deps/account.P .deps/addr_compl.P \ +.deps/addressbook.P .deps/alertpanel.P .deps/automaton.P .deps/base64.P \ +.deps/codeconv.P .deps/compose.P .deps/esmtp.P .deps/filesel.P \ +.deps/filter.P .deps/folder.P .deps/foldersel.P .deps/folderview.P \ +.deps/gtksctree.P .deps/gtkshruler.P .deps/gtkutils.P \ +.deps/headerview.P .deps/headerwindow.P .deps/html.P .deps/imageview.P \ +.deps/imap.P .deps/import.P .deps/inc.P .deps/inputdialog.P \ +.deps/logwindow.P .deps/main.P .deps/mainwindow.P .deps/manage_window.P \ +.deps/manual.P .deps/mbox.P .deps/md5c.P .deps/md5ify.P .deps/menu.P \ +.deps/messageview.P .deps/mh.P .deps/mimeview.P .deps/news.P \ +.deps/nntp.P .deps/passphrase.P .deps/pop.P .deps/prefs.P \ +.deps/prefs_account.P .deps/prefs_common.P .deps/prefs_filter.P \ +.deps/procheader.P .deps/procmime.P .deps/procmsg.P \ +.deps/progressdialog.P .deps/recv.P .deps/rfc2015.P .deps/rfc822.P \ +.deps/select-keys.P .deps/send.P .deps/session.P .deps/setup.P \ +.deps/smtp.P .deps/socket.P .deps/sourcewindow.P .deps/statusbar.P \ +.deps/summary_search.P .deps/summaryview.P .deps/textview.P \ +.deps/unmime.P .deps/utils.P .deps/uuencode.P .deps/xml.P +SOURCES = $(sylpheed_SOURCES) +OBJECTS = $(sylpheed_OBJECTS) + +all: all-redirect +.SUFFIXES: +.SUFFIXES: .S .c .lo .o .s +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4) + cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES) + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status + + +mostlyclean-binPROGRAMS: + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) + +distclean-binPROGRAMS: + +maintainer-clean-binPROGRAMS: + +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + $(mkinstalldirs) $(DESTDIR)$(bindir) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + if test -f $$p; then \ + echo " $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`"; \ + $(LIBTOOL) --mode=install $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + list='$(bin_PROGRAMS)'; for p in $$list; do \ + rm -f $(DESTDIR)$(bindir)/`echo $$p|sed 's/$(EXEEXT)$$//'|sed '$(transform)'|sed 's/$$/$(EXEEXT)/'`; \ + done + +.s.o: + $(COMPILE) -c $< + +.S.o: + $(COMPILE) -c $< + +mostlyclean-compile: + -rm -f *.o core *.core + +clean-compile: + +distclean-compile: + -rm -f *.tab.c + +maintainer-clean-compile: + +.s.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +.S.lo: + $(LIBTOOL) --mode=compile $(COMPILE) -c $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + +maintainer-clean-libtool: + +sylpheed: $(sylpheed_OBJECTS) $(sylpheed_DEPENDENCIES) + @rm -f sylpheed + $(LINK) $(sylpheed_LDFLAGS) $(sylpheed_OBJECTS) $(sylpheed_LDADD) $(LIBS) + +tags: TAGS + +ID: $(HEADERS) $(SOURCES) $(LISP) + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + here=`pwd` && cd $(srcdir) \ + && mkid -f$$here/ID $$unique $(LISP) + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS)'; \ + unique=`for i in $$list; do echo $$i; done | \ + awk ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \ + || (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS) + +mostlyclean-tags: + +clean-tags: + +distclean-tags: + -rm -f TAGS ID + +maintainer-clean-tags: + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) + +subdir = src + +distdir: $(DISTFILES) + here=`cd $(top_builddir) && pwd`; \ + top_distdir=`cd $(top_distdir) && pwd`; \ + distdir=`cd $(distdir) && pwd`; \ + cd $(top_srcdir) \ + && $(AUTOMAKE) --include-deps --build-dir=$$here --srcdir-name=$(top_srcdir) --output-dir=$$top_distdir --foreign src/Makefile + $(mkinstalldirs) $(distdir)/pixmaps + @for file in $(DISTFILES); do \ + d=$(srcdir); \ + if test -d $$d/$$file; then \ + cp -pr $$d/$$file $(distdir)/$$file; \ + else \ + test -f $(distdir)/$$file \ + || ln $$d/$$file $(distdir)/$$file 2> /dev/null \ + || cp -p $$d/$$file $(distdir)/$$file || :; \ + fi; \ + done + +DEPS_MAGIC := $(shell mkdir .deps > /dev/null 2>&1 || :) + +-include $(DEP_FILES) + +mostlyclean-depend: + +clean-depend: + +distclean-depend: + -rm -rf .deps + +maintainer-clean-depend: + +%.o: %.c + @echo '$(COMPILE) -c $<'; \ + $(COMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-cp .deps/$(*F).pp .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm .deps/$(*F).pp + +%.lo: %.c + @echo '$(LTCOMPILE) -c $<'; \ + $(LTCOMPILE) -Wp,-MD,.deps/$(*F).pp -c $< + @-sed -e 's/^\([^:]*\)\.o[ ]*:/\1.lo \1.o :/' \ + < .deps/$(*F).pp > .deps/$(*F).P; \ + tr ' ' '\012' < .deps/$(*F).pp \ + | sed -e 's/^\\$$//' -e '/^$$/ d' -e '/:$$/ d' -e 's/$$/ :/' \ + >> .deps/$(*F).P; \ + rm -f .deps/$(*F).pp +info-am: +info: info-am +dvi-am: +dvi: dvi-am +check-am: all-am +check: check-am +installcheck-am: +installcheck: installcheck-am +install-exec-am: install-binPROGRAMS +install-exec: install-exec-am + +install-data-am: +install-data: install-data-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am +install: install-am +uninstall-am: uninstall-binPROGRAMS +uninstall: uninstall-am +all-am: Makefile $(PROGRAMS) +all-redirect: all-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) AM_INSTALL_PROGRAM_FLAGS=-s install +installdirs: + $(mkinstalldirs) $(DESTDIR)$(bindir) + + +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -rm -f Makefile $(CONFIG_CLEAN_FILES) + -rm -f config.cache config.log stamp-h stamp-h[0-9]* + +maintainer-clean-generic: +mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \ + mostlyclean-libtool mostlyclean-tags mostlyclean-depend \ + mostlyclean-generic + +mostlyclean: mostlyclean-am + +clean-am: clean-binPROGRAMS clean-compile clean-libtool clean-tags \ + clean-depend clean-generic mostlyclean-am + +clean: clean-am + +distclean-am: distclean-binPROGRAMS distclean-compile distclean-libtool \ + distclean-tags distclean-depend distclean-generic \ + clean-am + -rm -f libtool + +distclean: distclean-am + +maintainer-clean-am: maintainer-clean-binPROGRAMS \ + maintainer-clean-compile maintainer-clean-libtool \ + maintainer-clean-tags maintainer-clean-depend \ + maintainer-clean-generic distclean-am + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + +maintainer-clean: maintainer-clean-am + +.PHONY: mostlyclean-binPROGRAMS distclean-binPROGRAMS clean-binPROGRAMS \ +maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \ +mostlyclean-compile distclean-compile clean-compile \ +maintainer-clean-compile mostlyclean-libtool distclean-libtool \ +clean-libtool maintainer-clean-libtool tags mostlyclean-tags \ +distclean-tags clean-tags maintainer-clean-tags distdir \ +mostlyclean-depend distclean-depend clean-depend \ +maintainer-clean-depend info-am info dvi-am dvi check check-am \ +installcheck-am installcheck install-exec-am install-exec \ +install-data-am install-data install-am install uninstall-am uninstall \ +all-redirect all-am all installdirs mostlyclean-generic \ +distclean-generic clean-generic maintainer-clean-generic clean \ +mostlyclean distclean maintainer-clean + + +# 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: diff --git a/src/about.c b/src/about.c new file mode 100644 index 000000000..5ca90f2a7 --- /dev/null +++ b/src/about.c @@ -0,0 +1,247 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkpixmap.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkhseparator.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtktext.h> +#include <gtk/gtkbutton.h> +#include <sys/utsname.h> + +#include "intl.h" +#include "about.h" +#include "gtkutils.h" +#include "prefs_common.h" +#include "utils.h" + +#include "pixmaps/sylpheed-logo.xpm" + +static GtkWidget *window; + +static void about_create(void); +static void key_pressed(GtkWidget *widget, GdkEventKey *event); +static void about_uri_clicked(GtkButton *button, gpointer data); + +void about_show(void) +{ + if (!window) + about_create(); + else + gtk_widget_show(window); +} + +static void about_create(void) +{ + GtkWidget *vbox; + GdkPixmap *logoxpm = NULL; + GdkBitmap *logoxpmmask; + GtkWidget *pixmap; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *button; + GtkWidget *scrolledwin; + GtkWidget *text; + GtkWidget *confirm_area; + GtkWidget *ok_button; + GtkStyle *style; + GdkColormap *cmap; + GdkColor uri_color[2] = {{0, 0, 0, 0xffff}, {0, 0xffff, 0, 0}}; + gboolean success[2]; + + struct utsname utsbuf; + gchar buf[1024]; + gint i; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_window_set_title(GTK_WINDOW(window), _("About")); + gtk_container_set_border_width(GTK_CONTAINER(window), 8); + gtk_widget_set_usize(window, 518, 358); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + //gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_widget_realize(window); + + vbox = gtk_vbox_new(FALSE, 6); + gtk_container_add(GTK_CONTAINER(window), vbox); + + PIXMAP_CREATE(window, logoxpm, logoxpmmask, sylpheed_logo_xpm); + pixmap = gtk_pixmap_new(logoxpm, logoxpmmask); + gtk_box_pack_start(GTK_BOX(vbox), pixmap, FALSE, FALSE, 0); + + label = gtk_label_new("version "VERSION); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + uname(&utsbuf); + g_snprintf(buf, sizeof(buf), + "GTK+ version %d.%d.%d\n" + "Operating System: %s %s (%s)", + gtk_major_version, gtk_minor_version, gtk_micro_version, + utsbuf.sysname, utsbuf.release, utsbuf.machine); + + label = gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + g_snprintf(buf, sizeof(buf), + "Compiled-in features:%s", +#if HAVE_GDK_IMLIB + " gdk_imlib" +#endif +#if HAVE_GDK_PIXBUF + " gdk-pixbuf" +#endif +#if USE_THREADS + " gthread" +#endif +#if INET6 + " IPv6" +#endif +#if HAVE_LIBCOMPFACE + " libcompface" +#endif +#if HAVE_LIBJCONV + " libjconv" +#endif +#if USE_GPGME + " GPGME" +#endif + ""); + + label = gtk_label_new(buf); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + label = gtk_label_new + ("Copyright (C) 1999-2001 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp>"); + gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + button = gtk_button_new_with_label(" "HOMEPAGE_URI" "); + gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, FALSE, 0); + gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE); + gtk_signal_connect(GTK_OBJECT(button), "clicked", + GTK_SIGNAL_FUNC(about_uri_clicked), NULL); + buf[0] = ' '; + for (i = 1; i <= strlen(HOMEPAGE_URI); i++) buf[i] = '_'; + strcpy(buf + i, " "); + gtk_label_set_pattern(GTK_LABEL(GTK_BIN(button)->child), buf); + cmap = gdk_window_get_colormap(window->window); + gdk_colormap_alloc_colors(cmap, uri_color, 2, FALSE, TRUE, success); + if (success[0] == TRUE && success[1] == TRUE) { + gtk_widget_ensure_style(GTK_BIN(button)->child); + style = gtk_style_copy + (gtk_widget_get_style(GTK_BIN(button)->child)); + style->fg[GTK_STATE_NORMAL] = uri_color[0]; + style->fg[GTK_STATE_ACTIVE] = uri_color[1]; + style->fg[GTK_STATE_PRELIGHT] = uri_color[0]; + gtk_widget_set_style(GTK_BIN(button)->child, style); + } else + g_warning("about_create(): color allocation failed.\n"); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); + + text = gtk_text_new(gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(scrolledwin)), + gtk_scrolled_window_get_vadjustment + (GTK_SCROLLED_WINDOW(scrolledwin))); + gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); + gtk_container_add(GTK_CONTAINER(scrolledwin), text); + + gtk_text_freeze(GTK_TEXT(text)); + + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("The portions applied from fetchmail is Copyright 1997 by Eric S. " + "Raymond. Portions of those are also copyrighted by Carl Harris, " + "1993 and 1995. Copyright retained for the purpose of protecting free " + "redistribution of source.\n\n"), -1); + + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("The MD5 support is copyright by RSA Data Security, Inc. See the " + "header comment of the md5.c module for license terms.\n\n"), -1); + + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("Kcc is copyright by Yasuhiro Tonooka <tonooka@msi.co.jp>, " + "and libkcc is copyright by takeshi@SoftAgency.co.jp.\n\n"), -1); + +#if USE_GPGME + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("GPGME is copyright 2001 by Werner Koch <dd9jn@gnu.org>\n\n"), -1); +#endif /* USE_GPGME */ + + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("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.\n\n"), -1); + + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("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.\n\n"), -1); + + gtk_text_insert(GTK_TEXT(text), NULL, NULL, NULL, + _("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."), -1); + + gtk_text_thaw(GTK_TEXT(text)); + + gtkut_button_set_create(&confirm_area, &ok_button, _("OK"), + NULL, NULL, NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_button); + gtk_signal_connect_object(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), + GTK_OBJECT(window)); + + gtk_widget_show_all(window); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(window); +} + +static void about_uri_clicked(GtkButton *button, gpointer data) +{ + open_uri(HOMEPAGE_URI, prefs_common.uri_cmd); +} diff --git a/src/about.h b/src/about.h new file mode 100644 index 000000000..55496fc73 --- /dev/null +++ b/src/about.h @@ -0,0 +1,25 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __ABOUT_H__ +#define __ABOUT_H__ + +void about_show(void); + +#endif /* __ABOUT_H__ */ diff --git a/src/account.c b/src/account.c new file mode 100644 index 000000000..f2265ddf7 --- /dev/null +++ b/src/account.c @@ -0,0 +1,654 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> +#include <stdio.h> +#include <errno.h> + +#include "intl.h" +#include "main.h" +#include "mainwindow.h" +#include "folderview.h" +#include "folder.h" +#include "account.h" +#include "prefs.h" +#include "prefs_account.h" +#include "compose.h" +#include "manage_window.h" +#include "gtkutils.h" +#include "utils.h" +#include "alertpanel.h" + +typedef enum +{ + COL_DEFAULT = 0, + COL_NAME = 1, + COL_PROTOCOL = 2, + COL_SERVER = 3 +} EditAccountColumnPos; + +# define N_EDIT_ACCOUNT_COLS 4 + +#define PREFSBUFSIZE 1024 + +PrefsAccount *cur_account; + +static GList *account_list = NULL; + +static struct EditAccount { + GtkWidget *window; + GtkWidget *clist; + GtkWidget *close_btn; +} edit_account; + +static void account_edit_create (void); + +static void account_edit_prefs (void); +static void account_delete (void); + +static void account_up (void); +static void account_down (void); + +static void account_set_default (void); + +static void account_edit_close (void); +static void account_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); + +static gint account_clist_set_row (PrefsAccount *ac_prefs, + gint row); +static void account_clist_set (void); + +static void account_list_set (void); + +void account_read_config_all(void) +{ + GSList *ac_label_list = NULL, *cur; + gchar *rcpath; + FILE *fp; + gchar buf[PREFSBUFSIZE]; + PrefsAccount *ac_prefs; + + debug_print(_("Reading all config for each account...\n")); + + rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACCOUNT_RC, NULL); + if ((fp = fopen(rcpath, "r")) == NULL) { + if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); + g_free(rcpath); + return; + } + g_free(rcpath); + + while (fgets(buf, sizeof(buf), fp) != NULL) { + if (!strncmp(buf, "[Account: ", 10)) { + strretchomp(buf); + memmove(buf, buf + 1, strlen(buf)); + buf[strlen(buf) - 1] = '\0'; + debug_print(_("Found label: %s\n"), buf); + ac_label_list = g_slist_append(ac_label_list, + g_strdup(buf)); + } + } + fclose(fp); + + /* read config data from file */ + cur_account = NULL; + for (cur = ac_label_list; cur != NULL; cur = cur->next) { + ac_prefs = g_new0(PrefsAccount, 1); + prefs_account_read_config(ac_prefs, (gchar *)cur->data); + account_list = g_list_append(account_list, ac_prefs); + if (ac_prefs->is_default) + cur_account = ac_prefs; + } + /* if default is not set, assume first account as default */ + if (!cur_account && account_list) { + ac_prefs = (PrefsAccount *)account_list->data; + account_set_as_default(ac_prefs); + cur_account = ac_prefs; + } + + account_set_menu(); + main_window_reflect_prefs_all(); + + while (ac_label_list) { + g_free(ac_label_list->data); + ac_label_list = g_slist_remove(ac_label_list, + ac_label_list->data); + } +} + +void account_save_config_all(void) +{ + prefs_account_save_config_all(account_list); +} + +PrefsAccount *account_find_from_smtp_server(const gchar *address, + const gchar *smtp_server) +{ + GList *cur; + PrefsAccount *ac; + + for (cur = account_list; cur != NULL; cur = cur->next) { + ac = (PrefsAccount *)cur->data; + if (!strcmp2(address, ac->address) && + !strcmp2(smtp_server, ac->smtp_server)) + return ac; + } + + return NULL; +} + +PrefsAccount *account_find_from_id(gint id) +{ + GList *cur; + PrefsAccount *ac; + + for (cur = account_list; cur != NULL; cur = cur->next) { + ac = (PrefsAccount *)cur->data; + if (id == ac->account_id) + return ac; + } + + return NULL; +} + +void account_set_menu(void) +{ + main_window_set_account_menu(account_list); +} + +void account_foreach(AccountFunc func, gpointer user_data) +{ + GList *cur; + + for (cur = account_list; cur != NULL; cur = cur->next) + if (func((PrefsAccount *)cur->data, user_data) != 0) + return; +} + +GList *account_get_list(void) +{ + return account_list; +} + +void account_edit_open(void) +{ + if (compose_get_compose_list()) { + alertpanel_notice(_("Some composing windows are open.\n" + "Please close all the composing windows before editing the accounts.")); + return; + } + + debug_print(_("Opening account edit window...\n")); + + if (!edit_account.window) + account_edit_create(); + + account_clist_set(); + + manage_window_set_transient(GTK_WINDOW(edit_account.window)); + gtk_widget_grab_focus(edit_account.close_btn); + gtk_widget_show(edit_account.window); + + manage_window_focus_in(edit_account.window, NULL, NULL); +} + +void account_add(void) +{ + PrefsAccount *ac_prefs; + + ac_prefs = prefs_account_open(NULL); + + if (!ac_prefs) return; + + account_list = g_list_append(account_list, ac_prefs); + + if (ac_prefs->is_default) + account_set_as_default(ac_prefs); + + account_clist_set(); + + if (ac_prefs->protocol == A_IMAP4 || ac_prefs->protocol == A_NNTP) { + Folder *folder; + + if (ac_prefs->protocol == A_IMAP4) { + folder = folder_new(F_IMAP, ac_prefs->account_name, + ac_prefs->recv_server); + } else { + folder = folder_new(F_NEWS, ac_prefs->account_name, + ac_prefs->nntp_server); + } + folder->account = ac_prefs; + ac_prefs->folder = REMOTE_FOLDER(folder); + folder_add(folder); + folderview_update_all(); + } +} + +void account_set_as_default(PrefsAccount *ac_prefs) +{ + PrefsAccount *ap; + GList *cur; + + for (cur = account_list; cur != NULL; cur = cur->next) { + ap = (PrefsAccount *)cur->data; + if (ap->is_default) + ap->is_default = FALSE; + } + + ac_prefs->is_default = TRUE; +} + +PrefsAccount *account_get_default(void) +{ + PrefsAccount *ap; + GList *cur; + + for (cur = account_list; cur != NULL; cur = cur->next) { + ap = (PrefsAccount *)cur->data; + if (ap->is_default) + return ap; + } + + return NULL; +} + +void account_set_missing_folder(void) +{ + PrefsAccount *ap; + GList *cur; + + for (cur = account_list; cur != NULL; cur = cur->next) { + ap = (PrefsAccount *)cur->data; + if ((ap->protocol == A_IMAP4 || ap->protocol == A_NNTP) && + !ap->folder) { + Folder *folder; + + if (ap->protocol == A_IMAP4) { + folder = folder_new(F_IMAP, ap->account_name, + ap->recv_server); + } else { + folder = folder_new(F_NEWS, ap->account_name, + ap->nntp_server); + } + folder->account = ap; + ap->folder = REMOTE_FOLDER(folder); + folder_add(folder); + } + } +} + +void account_destroy(PrefsAccount *ac_prefs) +{ + g_return_if_fail(ac_prefs != NULL); + + prefs_account_free(ac_prefs); + account_list = g_list_remove(account_list, ac_prefs); + + if (cur_account == ac_prefs) cur_account = NULL; + if (!cur_account && account_list) { + cur_account = account_get_default(); + if (!cur_account) { + ac_prefs = (PrefsAccount *)account_list->data; + account_set_as_default(ac_prefs); + cur_account = ac_prefs; + } + } +} + + +static void account_edit_create(void) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *scrolledwin; + GtkWidget *clist; + gchar *titles[N_EDIT_ACCOUNT_COLS]; + gint i; + + GtkWidget *vbox2; + GtkWidget *add_btn; + GtkWidget *edit_btn; + GtkWidget *del_btn; + GtkWidget *up_btn; + GtkWidget *down_btn; + + GtkWidget *default_btn; + + GtkWidget *hbbox; + GtkWidget *close_btn; + + debug_print(_("Creating account edit window...\n")); + + window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_widget_set_usize (window, 500, 320); + gtk_container_set_border_width (GTK_CONTAINER (window), 8); + gtk_window_set_title (GTK_WINDOW (window), _("Edit accounts")); + gtk_window_set_modal (GTK_WINDOW (window), TRUE); + gtk_signal_connect (GTK_OBJECT (window), "delete_event", + GTK_SIGNAL_FUNC (account_edit_close), NULL); + gtk_signal_connect (GTK_OBJECT (window), "key_press_event", + GTK_SIGNAL_FUNC (account_key_pressed), NULL); + gtk_signal_connect (GTK_OBJECT (window), "focus_in_event", + GTK_SIGNAL_FUNC (manage_window_focus_in), NULL); + gtk_signal_connect (GTK_OBJECT (window), "focus_out_event", + GTK_SIGNAL_FUNC (manage_window_focus_out), NULL); + + vbox = gtk_vbox_new (FALSE, 12); + gtk_widget_show (vbox); + gtk_container_add (GTK_CONTAINER (window), vbox); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); + + scrolledwin = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwin); + gtk_box_pack_start (GTK_BOX (hbox), scrolledwin, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + titles[COL_DEFAULT] = ""; + titles[COL_NAME] = _("Name"); + titles[COL_PROTOCOL] = _("Protocol"); + titles[COL_SERVER] = _("Server"); + + clist = gtk_clist_new_with_titles (N_EDIT_ACCOUNT_COLS, titles); + gtk_widget_show (clist); + gtk_container_add (GTK_CONTAINER (scrolledwin), clist); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_DEFAULT , 16); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_NAME , 100); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_PROTOCOL, 70); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_SERVER , 100); + gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE); + + for (i = 0; i < N_EDIT_ACCOUNT_COLS; i++) + GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button, + GTK_CAN_FOCUS); + + vbox2 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); + + add_btn = gtk_button_new_with_label (_("Add")); + gtk_widget_show (add_btn); + gtk_box_pack_start (GTK_BOX (vbox2), add_btn, FALSE, FALSE, 4); + gtk_signal_connect (GTK_OBJECT(add_btn), "clicked", + GTK_SIGNAL_FUNC (account_add), NULL); + + edit_btn = gtk_button_new_with_label (_("Edit")); + gtk_widget_show (edit_btn); + gtk_box_pack_start (GTK_BOX (vbox2), edit_btn, FALSE, FALSE, 4); + gtk_signal_connect (GTK_OBJECT(edit_btn), "clicked", + GTK_SIGNAL_FUNC (account_edit_prefs), NULL); + + del_btn = gtk_button_new_with_label (_(" Delete ")); + gtk_widget_show (del_btn); + gtk_box_pack_start (GTK_BOX (vbox2), del_btn, FALSE, FALSE, 4); + gtk_signal_connect (GTK_OBJECT(del_btn), "clicked", + GTK_SIGNAL_FUNC (account_delete), NULL); + + down_btn = gtk_button_new_with_label (_("Down")); + gtk_widget_show (down_btn); + gtk_box_pack_end (GTK_BOX (vbox2), down_btn, FALSE, FALSE, 4); + gtk_signal_connect (GTK_OBJECT(down_btn), "clicked", + GTK_SIGNAL_FUNC (account_down), NULL); + + up_btn = gtk_button_new_with_label (_("Up")); + gtk_widget_show (up_btn); + gtk_box_pack_end (GTK_BOX (vbox2), up_btn, FALSE, FALSE, 4); + gtk_signal_connect (GTK_OBJECT(up_btn), "clicked", + GTK_SIGNAL_FUNC (account_up), NULL); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + + vbox2 = gtk_vbox_new(FALSE, 0); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); + + default_btn = gtk_button_new_with_label (_(" Set as usually used account ")); + gtk_widget_show (default_btn); + gtk_box_pack_start (GTK_BOX (vbox2), default_btn, TRUE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT(default_btn), "clicked", + GTK_SIGNAL_FUNC (account_set_default), NULL); + + gtkut_button_set_create(&hbbox, &close_btn, _("Close"), + NULL, NULL, NULL, NULL); + gtk_widget_show(hbbox); + gtk_box_pack_end (GTK_BOX (hbox), hbbox, FALSE, FALSE, 0); + gtk_widget_grab_default (close_btn); + + gtk_signal_connect (GTK_OBJECT (close_btn), "clicked", + GTK_SIGNAL_FUNC (account_edit_close), + NULL); + + edit_account.window = window; + edit_account.clist = clist; + edit_account.close_btn = close_btn; +} + +static void account_edit_prefs(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + PrefsAccount *ac_prefs; + gint row; + gboolean prev_default; + gchar *ac_name; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + ac_prefs = gtk_clist_get_row_data(clist, row); + prev_default = ac_prefs->is_default; + Xstrdup_a(ac_name, ac_prefs->account_name, return); + + prefs_account_open(ac_prefs); + + if (!prev_default && ac_prefs->is_default) + account_set_as_default(ac_prefs); + + if ((ac_prefs->protocol == A_IMAP4 || ac_prefs->protocol == A_NNTP) && + ac_prefs->folder && strcmp(ac_name, ac_prefs->account_name) != 0) { + folder_set_name(FOLDER(ac_prefs->folder), + ac_prefs->account_name); + folderview_update_all(); + } + + account_clist_set(); +} + +static void account_delete(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + PrefsAccount *ac_prefs; + gint row; + + if (!clist->selection) return; + + if (alertpanel(_("Delete account"), + _("Do you really want to delete this account?"), + _("Yes"), _("+No"), NULL) != G_ALERTDEFAULT) + return; + + row = GPOINTER_TO_INT(clist->selection->data); + ac_prefs = gtk_clist_get_row_data(clist, row); + if (ac_prefs->folder) { + folder_destroy(FOLDER(ac_prefs->folder)); + folderview_update_all(); + } + account_destroy(ac_prefs); + account_clist_set(); +} + +static void account_up(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + gint row; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + if (row > 0) { + gtk_clist_row_move(clist, row, row - 1); + account_list_set(); + } +} + +static void account_down(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + gint row; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + if (row < clist->rows - 1) { + gtk_clist_row_move(clist, row, row + 1); + account_list_set(); + } +} + +static void account_set_default(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + gint row; + PrefsAccount *ac_prefs; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + ac_prefs = gtk_clist_get_row_data(clist, row); + account_set_as_default(ac_prefs); + account_clist_set(); + + cur_account = ac_prefs; + account_set_menu(); + main_window_reflect_prefs_all(); +} + +static void account_edit_close(void) +{ + account_list_set(); + account_save_config_all(); + + if (!cur_account && account_list) { + PrefsAccount *ac_prefs = (PrefsAccount *)account_list->data; + account_set_as_default(ac_prefs); + cur_account = ac_prefs; + } + + account_set_menu(); + main_window_reflect_prefs_all(); + + gtk_widget_hide(edit_account.window); +} + +static void account_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) +{ + if (event && event->keyval == GDK_Escape) + account_edit_close(); +} + +/* set one CList row or add new row */ +static gint account_clist_set_row(PrefsAccount *ac_prefs, gint row) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + gchar *text[N_EDIT_ACCOUNT_COLS]; + + text[COL_DEFAULT] = ac_prefs->is_default ? "*" : ""; + text[COL_NAME] = ac_prefs->account_name; + text[COL_PROTOCOL] = ac_prefs->protocol == A_POP3 ? "POP3" : + ac_prefs->protocol == A_APOP ? "APOP" : + ac_prefs->protocol == A_IMAP4 ? "IMAP4" : + ac_prefs->protocol == A_NNTP ? "NNTP" : ""; + text[COL_SERVER] = ac_prefs->protocol == A_NNTP + ? ac_prefs->nntp_server : ac_prefs->recv_server; + + if (row < 0) + row = gtk_clist_append(clist, text); + else { + gtk_clist_set_text(clist, row, COL_DEFAULT, text[COL_DEFAULT]); + gtk_clist_set_text(clist, row, COL_NAME, text[COL_NAME]); + gtk_clist_set_text(clist, row, COL_PROTOCOL, text[COL_PROTOCOL]); + gtk_clist_set_text(clist, row, COL_SERVER, text[COL_SERVER]); + } + + gtk_clist_set_row_data(clist, row, ac_prefs); + + return row; +} + +/* set CList from account list */ +static void account_clist_set(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + GList *cur; + gint prev_row; + + if (clist->selection) + prev_row = GPOINTER_TO_INT(clist->selection->data); + else + prev_row = -1; + + gtk_clist_freeze(clist); + gtk_clist_clear(clist); + + for (cur = account_list; cur != NULL; cur = cur->next) { + gint row; + + row = account_clist_set_row((PrefsAccount *)cur->data, -1); + if ((PrefsAccount *)cur->data == cur_account) + gtk_clist_select_row(clist, row, -1); + } + + if (prev_row >= 0) + gtk_clist_select_row(clist, prev_row, -1); + + gtk_clist_thaw(clist); +} + +/* set account list from CList */ +static void account_list_set(void) +{ + GtkCList *clist = GTK_CLIST(edit_account.clist); + gint row; + PrefsAccount *ac_prefs; + + while (account_list) + account_list = g_list_remove(account_list, account_list->data); + + for (row = 0; (ac_prefs = gtk_clist_get_row_data(clist, row)) != NULL; + row++) + account_list = g_list_append(account_list, ac_prefs); +} diff --git a/src/account.h b/src/account.h new file mode 100644 index 000000000..baf0fef91 --- /dev/null +++ b/src/account.h @@ -0,0 +1,51 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __ACCOUNT_H__ +#define __ACCOUNT_H__ + +#include <glib.h> + +#include "prefs.h" +#include "prefs_account.h" + +typedef gint (*AccountFunc) (PrefsAccount *ac_prefs, + gpointer user_data); + +extern PrefsAccount *cur_account; + +void account_read_config_all (void); +void account_save_config_all (void); + +PrefsAccount *account_find_from_smtp_server (const gchar *address, + const gchar *smtp_server); +PrefsAccount *account_find_from_id (gint id); + +void account_set_menu (void); +void account_foreach (AccountFunc func, + gpointer user_data); +GList *account_get_list (void); +void account_edit_open (void); +void account_add (void); +void account_set_as_default (PrefsAccount *ac_prefs); +PrefsAccount *account_get_default (void); +void account_set_missing_folder(void); +void account_destroy (PrefsAccount *ac_prefs); + +#endif /* __ACCOUNT_H__ */ diff --git a/src/addr_compl.c b/src/addr_compl.c new file mode 100644 index 000000000..2a71384b8 --- /dev/null +++ b/src/addr_compl.c @@ -0,0 +1,962 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * + * Copyright (c) 2000-2001 by Alfons Hoogervorst <alfons@proteus.demon.nl> + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#include "intl.h" +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkeditable.h> +#include <gtk/gtkclist.h> +#include <gtk/gtkscrolledwindow.h> + +#include <string.h> +#include <ctype.h> +#if (HAVE_WCTYPE_H && HAVE_WCHAR_H) +# include <wchar.h> +# include <wctype.h> +#endif + +#include "xml.h" +#include "addr_compl.h" +#include "utils.h" +#include "addressbook.h" +#include "main.h" + +#define LOG_MESSAGE \ + debug_mode == 0 ? (debug_mode == debug_mode) : (void)debug_print + +/* How it works: + * + * The address book is read into memory. We set up an address list + * containing all address book entries. Next we make the completion + * list, which contains all the completable strings, and store a + * reference to the address entry it belongs to. + * After calling the g_completion_complete(), we get a reference + * to a valid email address. + * + * Completion is very simplified. We never complete on another prefix, + * i.e. we neglect the next smallest possible prefix for the current + * completion cache. This is simply done so we might break up the + * addresses a little more (e.g. break up alfons@proteus.demon.nl into + * something like alfons, proteus, demon, nl; and then completing on + * any of those words). + */ + +/* address_entry - structure which refers to the original address entry in the + * address book + */ +typedef struct +{ + gchar *name; + gchar *address; +} address_entry; + +/* completion_entry - structure used to complete addresses, with a reference + * the the real address information. + */ +typedef struct +{ + gchar *string; /* string to complete */ + address_entry *ref; /* address the string belongs to */ +} completion_entry; + +/*******************************************************************************/ + +static gint g_ref_count; /* list ref count */ +static GList *g_completion_list; /* list of strings to be checked */ +static GList *g_address_list; /* address storage */ +static GCompletion *g_completion; /* completion object */ + +/* To allow for continuing completion we have to keep track of the state + * using the following variables. No need to create a context object. */ + +static gint g_completion_count; /* nr of addresses incl. the prefix */ +static gint g_completion_next; /* next prev address */ +static GSList *g_completion_addresses; /* unique addresses found in the + completion cache. */ +static gchar *g_completion_prefix; /* last prefix. (this is cached here + * because the prefix passed to g_completion + * is g_strdown()'ed */ + +/*******************************************************************************/ + +/* completion_func() - used by GTK to find the string data to be used for + * completion + */ +static gchar *completion_func(gpointer data) +{ + g_return_val_if_fail(data != NULL, NULL); + + return ((completion_entry *)data)->string; +} + +static void init_all(void) +{ + g_completion = g_completion_new(completion_func); + g_return_if_fail(g_completion != NULL); +} + +static void free_all(void) +{ + GList *walk; + + walk = g_list_first(g_completion_list); + for (; walk != NULL; walk = g_list_next(walk)) { + completion_entry *ce = (completion_entry *) walk->data; + g_free(ce->string); + g_free(walk->data); + } + g_list_free(g_completion_list); + g_completion_list = NULL; + + walk = g_address_list; + for (; walk != NULL; walk = g_list_next(walk)) { + address_entry *ae = (address_entry *) walk->data; + g_free(ae->name); + g_free(ae->address); + g_free(walk->data); + } + g_list_free(g_address_list); + g_address_list = NULL; + + g_completion_free(g_completion); + g_completion = NULL; +} + +/* add_address() - adds address to the completion list. this function looks + * complicated, but it's only allocation checks. + */ +static gint add_address(const gchar *name, const gchar *address) +{ + address_entry *ae; + completion_entry *ce1; + completion_entry *ce2; + + if (!name || !address) return -1; + + ae = g_new0(address_entry, 1); + ce1 = g_new0(completion_entry, 1), + ce2 = g_new0(completion_entry, 1); + + g_return_val_if_fail(ae != NULL, -1); + g_return_val_if_fail(ce1 != NULL && ce2 != NULL, -1); + + ae->name = g_strdup(name); + ae->address = g_strdup(address); + ce1->string = g_strdup(name); + ce2->string = g_strdup(address); + + /* GCompletion list is case sensitive */ + g_strdown(ce2->string); + g_strdown(ce1->string); + ce1->ref = ce2->ref = ae; + + g_completion_list = g_list_append(g_completion_list, ce1); + g_completion_list = g_list_append(g_completion_list, ce2); + g_address_list = g_list_append(g_address_list, ae); + + return 0; +} + +static gboolean get_all_addresses(GNode *node, gpointer ae) +{ + XMLNode *xmlnode = (XMLNode *)node->data; + address_entry *addr = (address_entry *)ae; + + /* this simply checks if tag is "item". in that case, it + * verifies it has already seen an item. if it did, an + * address retrieval was complete */ + if (!strcmp(xmlnode->tag->tag, "item")) { + /* see if a previous item was complete */ + /* TODO: does sylpheed address book allow empty names to be entered? + * if so, addr->name *AND* addr->address should be checked. */ + /* add address to our database */ + add_address(addr->name, addr->address); + g_free(addr->name); + g_free(addr->address); + addr->name = NULL; + addr->address = NULL; + } else if (!strcmp(xmlnode->tag->tag, "name")) + addr->name = g_strdup(xmlnode->element); + else if (!strcmp(xmlnode->tag->tag, "address")) + addr->address = g_strdup(xmlnode->element); + + return FALSE; +} + +/* read_address_book() + */ +static void read_address_book(void) +{ + gchar *path; + GNode *tree; + address_entry ad = {NULL, NULL}; + + LOG_MESSAGE( _("%s%d entering read_address_book\n"), __FILE__, __LINE__); + path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ADDRESS_BOOK, NULL); + tree = xml_parse_file(path); + g_free(path); + if (!tree) { + LOG_MESSAGE( _("%s(%d) no addressbook\n"), __FILE__, __LINE__); + return; + } + + /* retrieve all addresses */ + g_node_traverse(tree, G_PRE_ORDER, G_TRAVERSE_ALL, -1, + (GNodeTraverseFunc) get_all_addresses, &ad); + /* still one pending? */ + if (ad.name) { + add_address(ad.name, ad.address); + if (ad.name) + g_free(ad.name); + if (ad.address) + g_free(ad.address); + } + + xml_free_tree(tree); + + LOG_MESSAGE(_("%s(%d) leaving read_address_book - OK\n"), __FILE__, __LINE__); +} + +/* start_address_completion() - returns the number of addresses + * that should be matched for completion. + */ +gint start_address_completion(void) +{ + clear_completion_cache(); + if (!g_ref_count) { + init_all(); + /* open the address book */ + read_address_book(); + /* merge the completion entry list into g_completion */ + if (g_completion_list) + g_completion_add_items(g_completion, g_completion_list); + } + g_ref_count++; + LOG_MESSAGE("start_address_completion ref count %d\n", g_ref_count); + + return g_list_length(g_completion_list); +} + +/* get_address_from_edit() - returns a possible address (or a part) + * from an entry box. To make life easier, we only look at the last valid address + * component; address completion only works at the last string component in + * the entry box. + */ +gchar *get_address_from_edit(GtkEntry *entry, gint *start_pos) +{ + const gchar *edit_text; + gint cur_pos; + wchar_t *wtext; + wchar_t *wp; + wchar_t rfc_mail_sep; + gchar *str; + + edit_text = gtk_entry_get_text(entry); + if (edit_text == NULL) return NULL; + + wtext = strdup_mbstowcs(edit_text); + g_return_val_if_fail(wtext != NULL, NULL); + + cur_pos = gtk_editable_get_position(GTK_EDITABLE(entry)); + + if (mbtowc(&rfc_mail_sep, ",", 1) < 0) { + g_free(wtext); + return NULL; + } + + /* scan for a separator. doesn't matter if walk points at null byte. */ + for (wp = wtext + cur_pos; wp > wtext && *wp != rfc_mail_sep; wp--) + ; + + /* have something valid */ + if (wcslen(wp) == 0) { + g_free(wtext); + return NULL; + } + +#define IS_VALID_CHAR(x) (iswalnum(x) || ((x) > 0x7f)) + + /* now scan back until we hit a valid character */ + for (; *wp && !IS_VALID_CHAR(*wp); wp++) + ; + +#undef IS_VALID_CHAR + + if (wcslen(wp) == 0) { + g_free(wtext); + return NULL; + } + + if (start_pos) *start_pos = wp - wtext; + + str = strdup_wcstombs(wp); + g_free(wtext); + + return str; +} + +/* replace_address_in_edit() - replaces an incompleted address with a completed one. + */ +void replace_address_in_edit(GtkEntry *entry, const gchar *newtext, + gint start_pos) +{ + gtk_editable_delete_text(GTK_EDITABLE(entry), start_pos, -1); + gtk_editable_insert_text(GTK_EDITABLE(entry), newtext, strlen(newtext), + &start_pos); + gtk_editable_set_position(GTK_EDITABLE(entry), -1); +} + +/* complete_address() - tries to complete an addres, and returns the + * number of addresses found. use get_complete_address() to get one. + * returns zero if no match was found, otherwise the number of addresses, + * with the original prefix at index 0. + */ +guint complete_address(const gchar *str) +{ + GList *result; + gchar *d; + guint count, cpl; + completion_entry *ce; + + g_return_val_if_fail(str != NULL, 0); + + Xstrdup_a(d, str, return 0); + + clear_completion_cache(); + g_completion_prefix = g_strdup(str); + + /* g_completion is case sensitive */ + g_strdown(d); + result = g_completion_complete(g_completion, d, NULL); + + count = g_list_length(result); + if (count) { + /* create list with unique addresses */ + for (cpl = 0, result = g_list_first(result); + result != NULL; + result = g_list_next(result)) { + ce = (completion_entry *)(result->data); + if (NULL == g_slist_find(g_completion_addresses, + ce->ref)) { + cpl++; + g_completion_addresses = + g_slist_append(g_completion_addresses, + ce->ref); + } + } + count = cpl + 1; /* index 0 is the original prefix */ + g_completion_next = 1; /* we start at the first completed one */ + } else { + g_free(g_completion_prefix); + g_completion_prefix = NULL; + } + + g_completion_count = count; + return count; +} + +/* get_complete_address() - returns a complete address. the returned + * string should be freed + */ +gchar *get_complete_address(gint index) +{ + const address_entry *p; + + if (index < g_completion_count) { + if (index == 0) + return g_strdup(g_completion_prefix); + else { + /* get something from the unique addresses */ + p = (address_entry *)g_slist_nth_data + (g_completion_addresses, index - 1); + if (p == NULL) + return NULL; + else + return g_strdup_printf + ("%s <%s>", p->name, p->address); + } + } else + return NULL; +} + +gchar *get_next_complete_address(void) +{ + if (is_completion_pending()) { + gchar *res; + + res = get_complete_address(g_completion_next); + g_completion_next += 1; + if (g_completion_next >= g_completion_count) + g_completion_next = 0; + + return res; + } else + return NULL; +} + +gchar *get_prev_complete_address(void) +{ + if (is_completion_pending()) { + int n = g_completion_next - 2; + + /* real previous */ + n = (n + (g_completion_count * 5)) % g_completion_count; + + /* real next */ + g_completion_next = n + 1; + if (g_completion_next >= g_completion_count) + g_completion_next = 0; + return get_complete_address(n); + } else + return NULL; +} + +guint get_completion_count(void) +{ + if (is_completion_pending) + return g_completion_count; + else + return 0; +} + +/* should clear up anything after complete_address() */ +void clear_completion_cache(void) +{ + if (is_completion_pending()) { + if (g_completion_prefix) + g_free(g_completion_prefix); + + if (g_completion_addresses) { + g_slist_free(g_completion_addresses); + g_completion_addresses = NULL; + } + + g_completion_count = g_completion_next = 0; + } +} + +gboolean is_completion_pending(void) +{ + /* check if completion pending, i.e. we might satisfy a request for the next + * or previous address */ + return g_completion_count; +} + +/* invalidate_address_completion() - should be called if address book + * changed; + */ +gint invalidate_address_completion(void) +{ + if (g_ref_count) { + /* simply the same as start_address_completion() */ + LOG_MESSAGE("Invalidation request for address completion\n"); + free_all(); + init_all(); + read_address_book(); + g_completion_add_items(g_completion, g_completion_list); + clear_completion_cache(); + } + + return g_list_length(g_completion_list); +} + +gint end_address_completion(void) +{ + clear_completion_cache(); + + if (0 == --g_ref_count) + free_all(); + + LOG_MESSAGE("end_address_completion ref count %d\n", g_ref_count); + + return g_ref_count; +} + + +/* address completion entry ui. the ui (completion list was inspired by galeon's + * auto completion list). remaining things powered by sylpheed's completion engine. + */ + +#define ENTRY_DATA_TAB_HOOK "tab_hook" /* used to lookup entry */ +#define WINDOW_DATA_COMPL_ENTRY "compl_entry" /* used to store entry for compl. window */ +#define WINDOW_DATA_COMPL_CLIST "compl_clist" /* used to store clist for compl. window */ + +static void address_completion_mainwindow_set_focus (GtkWindow *window, + GtkWidget *widget, + gpointer data); +static gboolean address_completion_entry_key_pressed (GtkEntry *entry, + GdkEventKey *ev, + gpointer data); +static gboolean address_completion_complete_address_in_entry + (GtkEntry *entry, + gboolean next); +static void address_completion_create_completion_window (GtkEntry *entry); + +static void completion_window_select_row(GtkCList *clist, + gint row, + gint col, + GdkEvent *event, + GtkWidget **completion_window); +static gboolean completion_window_button_press + (GtkWidget *widget, + GdkEventButton *event, + GtkWidget **completion_window); +static gboolean completion_window_key_press + (GtkWidget *widget, + GdkEventKey *event, + GtkWidget **completion_window); + + +static void completion_window_advance_to_row(GtkCList *clist, gint row) +{ + g_return_if_fail(row < g_completion_count); + gtk_clist_select_row(clist, row, 0); +} + +static void completion_window_advance_selection(GtkCList *clist, gboolean forward) +{ + int row; + + g_return_if_fail(clist != NULL); + g_return_if_fail(clist->selection != NULL); + + row = GPOINTER_TO_INT(clist->selection->data); + + row = forward ? (row + 1) % g_completion_count : + (row - 1) < 0 ? g_completion_count - 1 : row - 1; + + gtk_clist_freeze(clist); + completion_window_advance_to_row(clist, row); + gtk_clist_thaw(clist); +} + +/* completion_window_accept_selection() - accepts the current selection in the + * clist, and destroys the window */ +static void completion_window_accept_selection(GtkWidget **window, + GtkCList *clist, + GtkEntry *entry) +{ + gchar *address = NULL, *text = NULL; + gint cursor_pos, row, col; + + g_return_if_fail(window != NULL); + g_return_if_fail(*window != NULL); + g_return_if_fail(clist != NULL); + g_return_if_fail(entry != NULL); + g_return_if_fail(clist->selection != NULL); + + col = 0; + + /* FIXME: I believe it's acceptable to access the selection member directly */ + row = GPOINTER_TO_INT(clist->selection->data); + + /* we just need the cursor position */ + address = get_address_from_edit(entry, &cursor_pos); + gtk_clist_get_text(clist, row, col, &text); + replace_address_in_edit(entry, text, cursor_pos); + g_free(address); + + clear_completion_cache(); + gtk_widget_destroy(*window); + *window = NULL; +} + +/* should be called when creating the main window containing address + * completion entries */ +void address_completion_start(GtkWidget *mainwindow) +{ + start_address_completion(); + + /* register focus change hook */ + gtk_signal_connect(GTK_OBJECT(mainwindow), "set_focus", + GTK_SIGNAL_FUNC(address_completion_mainwindow_set_focus), + mainwindow); +} + +void address_completion_register_entry(GtkEntry *entry) +{ + g_return_if_fail(entry != NULL); + g_return_if_fail(GTK_IS_ENTRY(entry)); + + /* add hooked property */ + gtk_object_set_data(GTK_OBJECT(entry), ENTRY_DATA_TAB_HOOK, entry); + + /* add keypress event */ + gtk_signal_connect_full(GTK_OBJECT(entry), "key_press_event", + GTK_SIGNAL_FUNC(address_completion_entry_key_pressed), + NULL, + NULL, + NULL, + 0, + 0); /* magic */ +} + +/* should be called when main window with address completion entries + * terminates */ +void address_completion_end(GtkWidget *mainwindow) +{ + /* if address_completion_end() is really called on closing the window, + * we don't need to unregister the set_focus_cb */ + end_address_completion(); +} + +/* if focus changes to another entry, then clear completion cache */ +static void address_completion_mainwindow_set_focus(GtkWindow *window, + GtkWidget *widget, + gpointer data) +{ + if (widget) + clear_completion_cache(); +} + +/* watch for tabs in one of the address entries. if no tab then clear the + * completion cache */ +static gboolean address_completion_entry_key_pressed(GtkEntry *entry, + GdkEventKey *ev, + gpointer data) +{ + if (ev->keyval == GDK_Tab) { + if (address_completion_complete_address_in_entry(entry, TRUE)) { + address_completion_create_completion_window(entry); + /* route a void character to the default handler */ + /* this is a dirty hack; we're actually changing a key + * reported by the system. */ + ev->keyval = GDK_AudibleBell_Enable; + ev->state &= ~GDK_SHIFT_MASK; + gtk_signal_emit_stop_by_name(GTK_OBJECT(entry), + "key_press_event"); + } else { + /* old behaviour */ + } + } else if (ev->keyval == GDK_Shift_L + || ev->keyval == GDK_Shift_R + || ev->keyval == GDK_Control_L + || ev->keyval == GDK_Control_R + || ev->keyval == GDK_Caps_Lock + || ev->keyval == GDK_Shift_Lock + || ev->keyval == GDK_Meta_L + || ev->keyval == GDK_Meta_R + || ev->keyval == GDK_Alt_L + || ev->keyval == GDK_Alt_R) { + /* these buttons should not clear the cache... */ + } else + clear_completion_cache(); + + return TRUE; +} + +/* initialize the completion cache and put first completed string + * in entry. this function used to do back cycling but this is not + * currently used. since the address completion behaviour has been + * changed regularly, we keep the feature in case someone changes + * his / her mind again. :) */ +static gboolean address_completion_complete_address_in_entry(GtkEntry *entry, + gboolean next) +{ + gint ncount, cursor_pos; + gchar *address, *new = NULL; + gboolean completed = FALSE; + + g_return_val_if_fail(entry != NULL, FALSE); + + if (!GTK_WIDGET_HAS_FOCUS(entry)) return FALSE; + + /* get an address component from the cursor */ + if (0 != (address = get_address_from_edit(entry, &cursor_pos))) { + /* still something in the cache */ + if (is_completion_pending()) { + new = next ? get_next_complete_address() : + get_prev_complete_address(); + } else { + if (0 < (ncount = complete_address(address))) + new = get_next_complete_address(); + } + + if (new) { + /* prevent "change" signal */ + replace_address_in_edit(entry, new, cursor_pos); + g_free(new); + completed = TRUE; + } + + g_free(address); + } + + return completed; +} + +static void address_completion_create_completion_window(GtkEntry *entry_) +{ + static GtkWidget *completion_window; + gint x, y, height, width, depth; + GtkWidget *scroll, *clist; + GtkRequisition r; + guint count = 0; + GtkWidget *entry = GTK_WIDGET(entry_); + + if (completion_window) { + gtk_widget_destroy(completion_window); + completion_window = NULL; + } + + scroll = gtk_scrolled_window_new(NULL, NULL); + clist = gtk_clist_new(1); + gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE); + + completion_window = gtk_window_new(GTK_WINDOW_POPUP); + + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_container_add(GTK_CONTAINER(completion_window), scroll); + gtk_container_add(GTK_CONTAINER(scroll), clist); + + /* set the unique data so we can always get back the entry and + * clist window to which this completion window has been attached */ + gtk_object_set_data(GTK_OBJECT(completion_window), + WINDOW_DATA_COMPL_ENTRY, entry_); + gtk_object_set_data(GTK_OBJECT(completion_window), + WINDOW_DATA_COMPL_CLIST, clist); + + gtk_signal_connect(GTK_OBJECT(clist), "select_row", + GTK_SIGNAL_FUNC(completion_window_select_row), + &completion_window); + + for (count = 0; count < get_completion_count(); count++) { + gchar *text[] = {NULL, NULL}; + + text[0] = get_complete_address(count); + gtk_clist_append(GTK_CLIST(clist), text); + g_free(text[0]); + } + + gdk_window_get_geometry(entry->window, &x, &y, &width, &height, &depth); + gdk_window_get_deskrelative_origin (entry->window, &x, &y); + y += height; + gtk_widget_set_uposition(completion_window, x, y); + + gtk_widget_size_request(clist, &r); + gtk_widget_set_usize(completion_window, width, r.height); + gtk_widget_show_all(completion_window); + gtk_widget_size_request(clist, &r); + + if ((y + r.height) > gdk_screen_height()) { + gtk_window_set_policy(GTK_WINDOW(completion_window), + TRUE, FALSE, FALSE); + gtk_widget_set_usize(completion_window, width, + gdk_screen_height () - y); + } + + gtk_signal_connect(GTK_OBJECT(completion_window), + "button-press-event", + GTK_SIGNAL_FUNC(completion_window_button_press), + &completion_window); + gtk_signal_connect(GTK_OBJECT(completion_window), + "key-press-event", + GTK_SIGNAL_FUNC(completion_window_key_press), + &completion_window); + gdk_pointer_grab(completion_window->window, TRUE, + GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | + GDK_BUTTON_RELEASE_MASK, + NULL, NULL, GDK_CURRENT_TIME); + gtk_grab_add(completion_window); + + /* this gets rid of the irritating focus rectangle that doesn't + * follow the selection */ + GTK_WIDGET_UNSET_FLAGS(clist, GTK_CAN_FOCUS); + gtk_clist_select_row(GTK_CLIST(clist), 1, 0); +} + + +/* row selection sends completed address to entry. + * note: event is NULL if selected by anything else than a mouse button. */ +static void completion_window_select_row(GtkCList *clist, gint row, gint col, + GdkEvent *event, + GtkWidget **completion_window) +{ + GtkEntry *entry; + + /* first check if it's anything but a mouse event. Mouse events + * accept the completion. Anything else is accepted by the + * completion_window_key_press() */ + if (!event) { + /* event == NULL if key press did the selection or just + * event emitted with signal_emit_XXX(). This seems to + * be the case for the gtk versions I have seen */ + return; + } + + /* however, a future version of GTK might pass the event type + * that triggered the select_row. since this event handler + * only wants mouse clicks, we check for that. */ + if (event->type != GDK_BUTTON_RELEASE) { + return; + } + + g_return_if_fail(completion_window != NULL); + g_return_if_fail(*completion_window != NULL); + + entry = GTK_ENTRY(gtk_object_get_data(GTK_OBJECT(*completion_window), + WINDOW_DATA_COMPL_ENTRY)); + g_return_if_fail(entry != NULL); + + completion_window_accept_selection(completion_window, clist, entry); +} + +/* completion_window_button_press() - check is mouse click is anywhere + * else (not in the completion window). in that case the completion + * window is destroyed, and the original prefix is restored */ +static gboolean completion_window_button_press(GtkWidget *widget, + GdkEventButton *event, + GtkWidget **completion_window) +{ + GtkWidget *event_widget, *entry; + gchar *prefix; + gint cursor_pos; + gboolean restore = TRUE; + + g_return_val_if_fail(completion_window != NULL, FALSE); + g_return_val_if_fail(*completion_window != NULL, FALSE); + + entry = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(*completion_window), + WINDOW_DATA_COMPL_ENTRY)); + g_return_val_if_fail(entry != NULL, FALSE); + + event_widget = gtk_get_event_widget((GdkEvent *)event); + if (event_widget != widget) { + while (event_widget) { + if (event_widget == widget) + return FALSE; + else if (event_widget == entry) { + restore = FALSE; + break; + } + event_widget = event_widget->parent; + } + } + + if (restore) { + prefix = get_complete_address(0); + g_free(get_address_from_edit(GTK_ENTRY(entry), &cursor_pos)); + replace_address_in_edit(GTK_ENTRY(entry), prefix, cursor_pos); + } + + gtk_widget_destroy(*completion_window); + *completion_window = NULL; + + clear_completion_cache(); + return TRUE; +} + +static gboolean completion_window_key_press(GtkWidget *widget, + GdkEventKey *event, + GtkWidget **completion_window) +{ + GdkEventKey tmp_event; + GtkWidget *entry; + gchar *prefix; + gint cursor_pos; + GtkWidget *clist; + + g_return_val_if_fail(completion_window != NULL, FALSE); + g_return_val_if_fail(*completion_window != NULL, FALSE); + + entry = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(*completion_window), + WINDOW_DATA_COMPL_ENTRY)); + clist = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(*completion_window), + WINDOW_DATA_COMPL_CLIST)); + g_return_val_if_fail(entry != NULL, FALSE); + + /* allow keyboard navigation in the alternatives clist */ + if (event->keyval == GDK_Up || event->keyval == GDK_Down || + event->keyval == GDK_Page_Up || event->keyval == GDK_Page_Down) { + completion_window_advance_selection + (GTK_CLIST(clist), + event->keyval == GDK_Down || + event->keyval == GDK_Page_Down ? TRUE : FALSE); + return FALSE; + } + + /* also make tab / shift tab go to next previous completion entry. we're + * changing the key value */ + if (event->keyval == GDK_Tab || event->keyval == GDK_ISO_Left_Tab) { + event->keyval = (event->state & GDK_SHIFT_MASK) + ? GDK_Up : GDK_Down; + /* need to reset shift state if going up */ + if (event->state & GDK_SHIFT_MASK) + event->state &= ~GDK_SHIFT_MASK; + completion_window_advance_selection(GTK_CLIST(clist), + event->keyval == GDK_Down ? TRUE : FALSE); + return FALSE; + } + + /* look for presses that accept the selection */ + if (event->keyval == GDK_Return || event->keyval == GDK_space) { + completion_window_accept_selection(completion_window, + GTK_CLIST(clist), + GTK_ENTRY(entry)); + return FALSE; + } + + /* key state keys should never be handled */ + if (event->keyval == GDK_Shift_L + || event->keyval == GDK_Shift_R + || event->keyval == GDK_Control_L + || event->keyval == GDK_Control_R + || event->keyval == GDK_Caps_Lock + || event->keyval == GDK_Shift_Lock + || event->keyval == GDK_Meta_L + || event->keyval == GDK_Meta_R + || event->keyval == GDK_Alt_L + || event->keyval == GDK_Alt_R) { + return FALSE; + } + + /* other key, let's restore the prefix (orignal text) */ + prefix = get_complete_address(0); + g_free(get_address_from_edit(GTK_ENTRY(entry), &cursor_pos)); + replace_address_in_edit(GTK_ENTRY(entry), prefix, cursor_pos); + g_free(prefix); + clear_completion_cache(); + + /* make sure anything we typed comes in the edit box */ + tmp_event.type = event->type; + tmp_event.window = entry->window; + tmp_event.send_event = TRUE; + tmp_event.time = event->time; + tmp_event.state = event->state; + tmp_event.keyval = event->keyval; + tmp_event.length = event->length; + tmp_event.string = event->string; + gtk_widget_event(entry, (GdkEvent *)&tmp_event); + + /* and close the completion window */ + gtk_widget_destroy(*completion_window); + *completion_window = NULL; + + return TRUE; +} diff --git a/src/addr_compl.h b/src/addr_compl.h new file mode 100644 index 000000000..95b2b73c4 --- /dev/null +++ b/src/addr_compl.h @@ -0,0 +1,53 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * + * Copyright (c) 2000 by Alfons Hoogervorst <alfons@proteus.demon.nl> + * + * 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. + */ + +#ifndef __ADDR_COMPL_H__ +#define __ADDR_COMPL_H__ + +gint start_address_completion (void); +gint invalidate_address_completion (void); + +guint complete_address (const gchar *str); + +gchar *get_address_from_edit (GtkEntry *entry, + gint *start_pos); +void replace_address_in_edit (GtkEntry *entry, + const gchar *newtext, + gint start_pos); + +gchar *get_complete_address (gint index); + +gchar *get_next_complete_address (void); +gchar *get_prev_complete_address (void); +guint get_completion_count (void); + +gboolean is_completion_pending (void); + +void clear_completion_cache (void); + +gint end_address_completion (void); + +/* ui functions */ + +void address_completion_start (GtkWidget *mainwindow); +void address_completion_register_entry (GtkEntry *entry); +void address_completion_end (GtkWidget *mainwindow); + +#endif /* __ADDR_COMPL_H__ */ diff --git a/src/addressbook.c b/src/addressbook.c new file mode 100644 index 000000000..40ecc846c --- /dev/null +++ b/src/addressbook.c @@ -0,0 +1,2036 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkhpaned.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkclist.h> +#include <gtk/gtktable.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkmenuitem.h> +#include <gtk/gtkitemfactory.h> +#include <string.h> + +#include "intl.h" +#include "main.h" +#include "addressbook.h" +#include "manage_window.h" +#include "prefs_common.h" +#include "alertpanel.h" +#include "inputdialog.h" +#include "menu.h" +#include "xml.h" +#include "prefs.h" +#include "procmime.h" +#include "utils.h" +#include "gtkutils.h" +#include "codeconv.h" +#include "about.h" +#include "addr_compl.h" + +#include "pixmaps/dir-close.xpm" +#include "pixmaps/dir-open.xpm" +#include "pixmaps/group.xpm" + +typedef enum +{ + COL_NAME = 0, + COL_ADDRESS = 1, + COL_REMARKS = 2 +} AddressBookColumnPos; + +#define N_COLS 3 +#define COL_NAME_WIDTH 144 +#define COL_ADDRESS_WIDTH 144 + +#define COL_FOLDER_WIDTH 170 +#define ADDRESSBOOK_WIDTH 640 +#define ADDRESSBOOK_HEIGHT 340 + +static GdkPixmap *folderxpm; +static GdkBitmap *folderxpmmask; +static GdkPixmap *folderopenxpm; +static GdkBitmap *folderopenxpmmask; +static GdkPixmap *groupxpm; +static GdkBitmap *groupxpmmask; + +static AddressBook addrbook; + +static struct _AddressEdit +{ + GtkWidget *window; + GtkWidget *name_entry; + GtkWidget *addr_entry; + GtkWidget *rem_entry; + GtkWidget *ok_btn; + GtkWidget *cancel_btn; +} addredit; + +static void addressbook_create (void); +static gint addressbook_close (void); +static void addressbook_button_set_sensitive (void); + +/* callback functions */ +static void addressbook_del_clicked (GtkButton *button, + gpointer data); +static void addressbook_reg_clicked (GtkButton *button, + gpointer data); +static void addressbook_to_clicked (GtkButton *button, + gpointer data); + +static void addressbook_tree_selected (GtkCTree *ctree, + GtkCTreeNode *node, + gint column, + gpointer data); +static void addressbook_list_selected (GtkCList *clist, + gint row, + gint column, + GdkEvent *event, + gpointer data); +#if 0 +static void addressbook_entry_changed (GtkWidget *widget); +#endif + +static void addressbook_list_button_pressed (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void addressbook_list_button_released (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void addressbook_tree_button_pressed (GtkWidget *ctree, + GdkEventButton *event, + gpointer data); +static void addressbook_tree_button_released (GtkWidget *ctree, + GdkEventButton *event, + gpointer data); +static void addressbook_popup_close (GtkMenuShell *menu_shell, + gpointer data); + +static void addressbook_new_folder_cb (gpointer data, + guint action, + GtkWidget *widget); +static void addressbook_new_group_cb (gpointer data, + guint action, + GtkWidget *widget); +static void addressbook_edit_folder_cb (gpointer data, + guint action, + GtkWidget *widget); +static void addressbook_delete_folder_cb (gpointer data, + guint action, + GtkWidget *widget); + +static void addressbook_change_node_name (GtkCTreeNode *node, + const gchar *name); +static void addressbook_edit_group (GtkCTreeNode *group_node); + +static void addressbook_edit_address_create (gboolean *cancelled); +static void edit_address_ok (GtkWidget *widget, + gboolean *cancelled); +static void edit_address_cancel (GtkWidget *widget, + gboolean *cancelled); +static gint edit_address_delete_event (GtkWidget *widget, + GdkEventAny *event, + gboolean *cancelled); +static void edit_address_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gboolean *cancelled); +static AddressItem *addressbook_edit_address (AddressItem *item); + +static void addressbook_new_address_cb (gpointer data, + guint action, + GtkWidget *widget); +static void addressbook_edit_address_cb (gpointer data, + guint action, + GtkWidget *widget); +static void addressbook_delete_address_cb (gpointer data, + guint action, + GtkWidget *widget); + +static void close_cb (gpointer data, + guint action, + GtkWidget *widget); + +static AddressItem *addressbook_parse_address (const gchar *str); +static void addressbook_append_to_compose_entry (AddressItem *item, + ComposeEntryType type); + +static void addressbook_set_clist (AddressObject *obj); + +static void addressbook_read_file (void); +static void addressbook_get_tree (XMLFile *file, + GtkCTreeNode *node, + const gchar *folder_tag); +static void addressbook_add_objs (XMLFile *file, + GtkCTreeNode *node); + +static GtkCTreeNode *addressbook_add_object (GtkCTreeNode *node, + AddressObject *obj); +static void addressbook_delete_object (AddressObject *obj); +static AddressObject *addressbook_find_object_by_name + (GtkCTreeNode *node, + const gchar *name); + +static AddressItem *addressbook_parse_item (XMLFile *file); +static void addressbook_xml_recursive_write (GtkCTreeNode *node, + FILE *fp); +static void addressbook_node_write_begin (GtkCTreeNode *node, + FILE *fp); +static void addressbook_node_write_end (GtkCTreeNode *node, + FILE *fp); +static void addressbook_write_items (FILE *fp, + GList *items, + guint level); +static void tab_indent_out (FILE *fp, + guint level); + +static void key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static gint addressbook_list_compare_func (GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2); +static gint addressbook_obj_name_compare (gconstpointer a, + gconstpointer b); + +static GtkItemFactoryEntry addressbook_entries[] = +{ + {N_("/_File"), NULL, NULL, 0, "<Branch>"}, + {N_("/_File/New _address"), "<alt>N", addressbook_new_address_cb, 0, NULL}, + {N_("/_File/New _group"), "<alt>G", addressbook_new_group_cb, 0, NULL}, + {N_("/_File/New _folder"), "<alt>R", addressbook_new_folder_cb, 0, NULL}, + {N_("/_File/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_File/_Edit"), "<alt>Return", addressbook_edit_address_cb, 0, NULL}, + {N_("/_File/_Delete"), NULL, addressbook_delete_address_cb, 0, NULL}, + {N_("/_File/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_File/_Close"), "<alt>W", close_cb, 0, NULL}, + {N_("/_Help"), NULL, NULL, 0, "<LastBranch>"}, + {N_("/_Help/_About"), NULL, about_show, 0, NULL} +}; + +static GtkItemFactoryEntry addressbook_tree_popup_entries[] = +{ + {N_("/New _address"), NULL, addressbook_new_address_cb, 0, NULL}, + {N_("/New _group"), NULL, addressbook_new_group_cb, 0, NULL}, + {N_("/New _folder"), NULL, addressbook_new_folder_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Edit"), NULL, addressbook_edit_folder_cb, 0, NULL}, + {N_("/_Delete"), NULL, addressbook_delete_folder_cb, 0, NULL} +}; + +static GtkItemFactoryEntry addressbook_list_popup_entries[] = +{ + {N_("/New _address"), NULL, addressbook_new_address_cb, 0, NULL}, + {N_("/New _group"), NULL, addressbook_new_group_cb, 0, NULL}, + {N_("/New _folder"), NULL, addressbook_new_folder_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Edit"), NULL, addressbook_edit_address_cb, 0, NULL}, + {N_("/_Delete"), NULL, addressbook_delete_address_cb, 0, NULL} +}; + +void addressbook_open(Compose *target) +{ + if (!addrbook.window) { + addressbook_create(); + addressbook_read_file(); + addrbook.open_folder = TRUE; + gtk_ctree_select(GTK_CTREE(addrbook.ctree), + GTK_CTREE_NODE(GTK_CLIST(addrbook.ctree)->row_list)); + } else + gtk_widget_hide(addrbook.window); + + gtk_widget_show(addrbook.window); + + addressbook_set_target_compose(target); +} + +void addressbook_set_target_compose(Compose *target) +{ + addrbook.target_compose = target; + + addressbook_button_set_sensitive(); +} + +Compose *addressbook_get_target_compose(void) +{ + return addrbook.target_compose; +} + +static void addressbook_create(void) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *menubar; + GtkWidget *vbox2; + GtkWidget *ctree_swin; + GtkWidget *ctree; + GtkWidget *clist_vbox; + GtkWidget *clist_swin; + GtkWidget *clist; + GtkWidget *paned; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *entry; + GtkWidget *hbbox; + GtkWidget *del_btn; + GtkWidget *reg_btn; + GtkWidget *lup_btn; + GtkWidget *to_btn; + GtkWidget *cc_btn; + GtkWidget *bcc_btn; + GtkWidget *tree_popup; + GtkWidget *list_popup; + GtkItemFactory *tree_factory; + GtkItemFactory *list_factory; + gint n_entries; + + gchar *titles[N_COLS] = {_("Name"), _("E-Mail address"), _("Remarks")}; + gchar *text; + gint i; + + debug_print("Creating addressbook window...\n"); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), _("Address book")); + gtk_widget_set_usize(window, ADDRESSBOOK_WIDTH, ADDRESSBOOK_HEIGHT); + //gtk_container_set_border_width(GTK_CONTAINER(window), BORDER_WIDTH); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); + gtk_widget_realize(window); + + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(addressbook_close), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(window), vbox); + + n_entries = sizeof(addressbook_entries) / + sizeof(addressbook_entries[0]); + menubar = menubar_create(window, addressbook_entries, n_entries, + "<AddressBook>", NULL); + gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); + + vbox2 = gtk_vbox_new(FALSE, 4); + gtk_container_set_border_width(GTK_CONTAINER(vbox2), BORDER_WIDTH); + gtk_box_pack_start(GTK_BOX(vbox), vbox2, TRUE, TRUE, 0); + + ctree_swin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(ctree_swin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_ALWAYS); + gtk_widget_set_usize(ctree_swin, COL_FOLDER_WIDTH + 40, -1); + + ctree = gtk_ctree_new(1, 0); + gtk_container_add(GTK_CONTAINER(ctree_swin), ctree); + gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE); + gtk_clist_set_column_width(GTK_CLIST(ctree), 0, COL_FOLDER_WIDTH); + gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED); + gtk_ctree_set_expander_style(GTK_CTREE(ctree), + GTK_CTREE_EXPANDER_SQUARE); + gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT); + gtk_clist_set_compare_func(GTK_CLIST(ctree), + addressbook_list_compare_func); + + gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", + GTK_SIGNAL_FUNC(addressbook_tree_selected), NULL); + gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", + GTK_SIGNAL_FUNC(addressbook_tree_button_pressed), + NULL); + gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", + GTK_SIGNAL_FUNC(addressbook_tree_button_released), + NULL); + + clist_vbox = gtk_vbox_new(FALSE, 4); + + clist_swin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(clist_swin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_ALWAYS); + gtk_box_pack_start(GTK_BOX(clist_vbox), clist_swin, TRUE, TRUE, 0); + + clist = gtk_clist_new_with_titles(N_COLS, titles); + gtk_container_add(GTK_CONTAINER(clist_swin), clist); + gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED); + gtk_clist_set_column_width(GTK_CLIST(clist), COL_NAME, + COL_NAME_WIDTH); + gtk_clist_set_column_width(GTK_CLIST(clist), COL_ADDRESS, + COL_ADDRESS_WIDTH); + gtk_clist_set_compare_func(GTK_CLIST(clist), + addressbook_list_compare_func); + + for (i = 0; i < N_COLS; i++) + GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(clist)->column[i].button, + GTK_CAN_FOCUS); + + gtk_signal_connect(GTK_OBJECT(clist), "select_row", + GTK_SIGNAL_FUNC(addressbook_list_selected), NULL); + gtk_signal_connect(GTK_OBJECT(clist), "button_press_event", + GTK_SIGNAL_FUNC(addressbook_list_button_pressed), + NULL); + gtk_signal_connect(GTK_OBJECT(clist), "button_release_event", + GTK_SIGNAL_FUNC(addressbook_list_button_released), + NULL); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(clist_vbox), hbox, FALSE, FALSE, 0); + + label = gtk_label_new(_("Name:")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 0); + + address_completion_register_entry(GTK_ENTRY(entry)); + +#if 0 + gtk_signal_connect(GTK_OBJECT(entry), "changed", + GTK_SIGNAL_FUNC(addressbook_entry_changed), NULL); +#endif + + paned = gtk_hpaned_new(); + gtk_box_pack_start(GTK_BOX(vbox2), paned, TRUE, TRUE, 0); + gtk_paned_add1(GTK_PANED(paned), ctree_swin); + gtk_paned_add2(GTK_PANED(paned), clist_vbox); + + hbbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(hbbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(hbbox), 2); + gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); + + del_btn = gtk_button_new_with_label(_("Delete")); + GTK_WIDGET_SET_FLAGS(del_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbbox), del_btn, TRUE, TRUE, 0); + reg_btn = gtk_button_new_with_label(_("Add")); + GTK_WIDGET_SET_FLAGS(reg_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbbox), reg_btn, TRUE, TRUE, 0); + lup_btn = gtk_button_new_with_label(_("Lookup")); + GTK_WIDGET_SET_FLAGS(lup_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbbox), lup_btn, TRUE, TRUE, 0); + + gtk_signal_connect(GTK_OBJECT(del_btn), "clicked", + GTK_SIGNAL_FUNC(addressbook_del_clicked), NULL); + gtk_signal_connect(GTK_OBJECT(reg_btn), "clicked", + GTK_SIGNAL_FUNC(addressbook_reg_clicked), NULL); + + to_btn = gtk_button_new_with_label + (prefs_common.trans_hdr ? _("To:") : "To:"); + GTK_WIDGET_SET_FLAGS(to_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbbox), to_btn, TRUE, TRUE, 0); + cc_btn = gtk_button_new_with_label + (prefs_common.trans_hdr ? _("Cc:") : "Cc:"); + GTK_WIDGET_SET_FLAGS(cc_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbbox), cc_btn, TRUE, TRUE, 0); + bcc_btn = gtk_button_new_with_label + (prefs_common.trans_hdr ? _("Bcc:") : "Bcc:"); + GTK_WIDGET_SET_FLAGS(bcc_btn, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(hbbox), bcc_btn, TRUE, TRUE, 0); + + gtk_signal_connect(GTK_OBJECT(to_btn), "clicked", + GTK_SIGNAL_FUNC(addressbook_to_clicked), + GINT_TO_POINTER(COMPOSE_TO)); + gtk_signal_connect(GTK_OBJECT(cc_btn), "clicked", + GTK_SIGNAL_FUNC(addressbook_to_clicked), + GINT_TO_POINTER(COMPOSE_CC)); + gtk_signal_connect(GTK_OBJECT(bcc_btn), "clicked", + GTK_SIGNAL_FUNC(addressbook_to_clicked), + GINT_TO_POINTER(COMPOSE_BCC)); + + PIXMAP_CREATE(window, folderxpm, folderxpmmask, DIRECTORY_CLOSE_XPM); + PIXMAP_CREATE(window, folderopenxpm, folderopenxpmmask, + DIRECTORY_OPEN_XPM); + PIXMAP_CREATE(window, groupxpm, groupxpmmask, group_xpm); + + text = _("Common address"); + addrbook.common = + gtk_ctree_insert_node(GTK_CTREE(ctree), + NULL, NULL, &text, FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + text = _("Personal address"); + addrbook.personal = + gtk_ctree_insert_node(GTK_CTREE(ctree), + NULL, NULL, &text, FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + + /* popup menu */ + n_entries = sizeof(addressbook_tree_popup_entries) / + sizeof(addressbook_tree_popup_entries[0]); + tree_popup = menu_create_items(addressbook_tree_popup_entries, + n_entries, + "<AddressBookTree>", &tree_factory, + NULL); + gtk_signal_connect(GTK_OBJECT(tree_popup), "selection_done", + GTK_SIGNAL_FUNC(addressbook_popup_close), NULL); + n_entries = sizeof(addressbook_list_popup_entries) / + sizeof(addressbook_list_popup_entries[0]); + list_popup = menu_create_items(addressbook_list_popup_entries, + n_entries, + "<AddressBookList>", &list_factory, + NULL); + + addrbook.window = window; + addrbook.ctree = ctree; + addrbook.clist = clist; + addrbook.entry = entry; + + addrbook.del_btn = del_btn; + addrbook.reg_btn = reg_btn; + addrbook.lup_btn = lup_btn; + addrbook.to_btn = to_btn; + addrbook.cc_btn = cc_btn; + addrbook.bcc_btn = bcc_btn; + + addrbook.tree_popup = tree_popup; + addrbook.list_popup = list_popup; + addrbook.tree_factory = tree_factory; + addrbook.list_factory = list_factory; + + address_completion_start(window); + + gtk_widget_show_all(window); +} + +static gint addressbook_close(void) +{ + gtk_widget_hide(addrbook.window); + addressbook_export_to_file(); + /* tell addr_compl that there's a new addressbook file */ + invalidate_address_completion(); + return TRUE; +} + +static void addressbook_button_set_sensitive(void) +{ + gboolean to_sens = FALSE; + gboolean cc_sens = FALSE; + gboolean bcc_sens = FALSE; + + if (!addrbook.window) return; + + if (addrbook.target_compose) { + to_sens = TRUE; + cc_sens = TRUE; + if (addrbook.target_compose->use_bcc) + bcc_sens = TRUE; + } + + gtk_widget_set_sensitive(addrbook.to_btn, to_sens); + gtk_widget_set_sensitive(addrbook.cc_btn, cc_sens); + gtk_widget_set_sensitive(addrbook.bcc_btn, bcc_sens); +} + +static void addressbook_del_clicked(GtkButton *button, gpointer data) +{ + GtkCList *clist = GTK_CLIST(addrbook.clist); + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + AddressObject *pobj, *obj; + GList *cur, *next; + gint row; + + if (!clist->selection) { + addressbook_delete_folder_cb(NULL, 0, NULL); + return; + } + + pobj = gtk_ctree_node_get_row_data(ctree, addrbook.opened); + g_return_if_fail(pobj != NULL); + + if (alertpanel(_("Delete address(es)"), + _("Really delete the address(es)?"), + _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) + return; + + for (cur = clist->selection; cur != NULL; cur = next) { + next = cur->next; + row = GPOINTER_TO_INT(cur->data); + + obj = gtk_clist_get_row_data(clist, row); + if (!obj) continue; + + if (pobj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(pobj); + group->items = g_list_remove(group->items, obj); + } else if (pobj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(pobj); + + folder->items = g_list_remove(folder->items, obj); + if (obj->type == ADDR_GROUP) { + GtkCTreeNode *node; + + node = gtk_ctree_find_by_row_data + (ctree, addrbook.opened, obj); + if (node) gtk_ctree_remove_node(ctree, node); + } + } else + continue; + + addressbook_delete_object(obj); + + gtk_clist_remove(clist, row); + } +} + +static void addressbook_reg_clicked(GtkButton *button, gpointer data) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + GtkEntry *entry = GTK_ENTRY(addrbook.entry); + AddressObject *obj; + AddressItem *item; + gchar *str; + + if (*gtk_entry_get_text(entry) == '\0') { + addressbook_new_address_cb(NULL, 0, NULL); + return; + } + if (!addrbook.opened) return; + + obj = gtk_ctree_node_get_row_data(ctree, addrbook.opened); + if (!obj) return; + + g_return_if_fail(obj->type == ADDR_GROUP || obj->type == ADDR_FOLDER); + + str = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); + + item = addressbook_parse_address(str); + g_free(str); + if (item) { + if (addressbook_find_object_by_name + (addrbook.opened, item->name) != NULL) { + addressbook_delete_object(ADDRESS_OBJECT(item)); + item = NULL; + } else if (addressbook_edit_address(item) == NULL) { + addressbook_delete_object(ADDRESS_OBJECT(item)); + return; + } + } + + if (!item) { + item = addressbook_edit_address(NULL); + if (!item) return; + } + + if (addressbook_find_object_by_name(addrbook.opened, item->name)) { + addressbook_delete_object(ADDRESS_OBJECT(item)); + return; + } + + addressbook_add_object(addrbook.opened, ADDRESS_OBJECT(item)); + addrbook.open_folder = TRUE; + gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened); +} + +static AddressItem *addressbook_parse_address(const gchar *str) +{ + gchar *name = NULL; + gchar *address = NULL; + AddressItem *item; + gchar *buf; + gchar *start, *end; + + Xalloca(buf, strlen(str) + 1, return NULL); + + strcpy(buf, str); + g_strstrip(buf); + if (*buf == '\0') return NULL; + + if ((start = strchr(buf, '<'))) { + if (start > buf) { + *start = '\0'; + g_strstrip(buf); + if (*buf != '\0') + name = g_strdup(buf); + } + start++; + if ((end = strchr(start, '>'))) { + *end = '\0'; + g_strstrip(start); + if (*start != '\0') + address = g_strdup(start); + } + } else + name = g_strdup(buf); + + if (!name && !address) return NULL; + + item = g_new(AddressItem, 1); + ADDRESS_OBJECT_TYPE(item) = ADDR_ITEM; + item->name = name; + item->address = address; + item->remarks = NULL; + + return item; +} + +static void addressbook_to_clicked(GtkButton *button, gpointer data) +{ + GtkCList *clist = GTK_CLIST(addrbook.clist); + GList *cur; + + if (!addrbook.target_compose) return; + + for (cur = clist->selection; cur != NULL; cur = cur->next) { + AddressObject *obj; + + obj = gtk_clist_get_row_data(clist, + GPOINTER_TO_INT(cur->data)); + if (!obj) return; + + if (obj->type == ADDR_ITEM) { + addressbook_append_to_compose_entry + (ADDRESS_ITEM(obj), (ComposeEntryType)data); + } else if (obj->type == ADDR_GROUP) { + AddressGroup *group; + GList *cur_item; + + group = ADDRESS_GROUP(obj); + for (cur_item = group->items; cur_item != NULL; + cur_item = cur_item->next) { + if (ADDRESS_OBJECT(cur_item->data)->type + != ADDR_ITEM) + continue; + addressbook_append_to_compose_entry + (ADDRESS_ITEM(cur_item->data), + (ComposeEntryType)data); + } + } + } +} + +static void addressbook_append_to_compose_entry(AddressItem *item, + ComposeEntryType type) +{ + Compose *compose = addrbook.target_compose; + + if (item->name && item->address) { + gchar *buf; + + buf = g_strdup_printf + ("%s <%s>", item->name, item->address); + compose_entry_append(compose, buf, type); + g_free(buf); + } else if (item->address) + compose_entry_append(compose, item->address, type); +} + +static void addressbook_tree_selected(GtkCTree *ctree, GtkCTreeNode *node, + gint column, gpointer data) +{ + AddressObject *obj; + + addrbook.selected = node; + + if (!addrbook.open_folder) return; + addrbook.open_folder = FALSE; + + gtk_entry_set_text(GTK_ENTRY(addrbook.entry), ""); + + obj = gtk_ctree_node_get_row_data(ctree, node); + g_return_if_fail(obj != NULL); + + addrbook.opened = node; + + if (obj->type == ADDR_GROUP || obj->type == ADDR_FOLDER) + addressbook_set_clist(obj); +} + +static void addressbook_list_selected(GtkCList *clist, gint row, gint column, + GdkEvent *event, gpointer data) +{ + GtkEntry *entry = GTK_ENTRY(addrbook.entry); + AddressObject *obj; + GList *cur; + + if (event && event->type == GDK_2BUTTON_PRESS) { + addressbook_edit_address_cb(NULL, 0, NULL); + return; + } + +#if 0 + gtk_signal_handler_block_by_func + (GTK_OBJECT(entry), + GTK_SIGNAL_FUNC(addressbook_entry_changed), NULL); +#endif + + gtk_entry_set_text(entry, ""); + + for (cur = clist->selection; cur != NULL; cur = cur->next) { + obj = gtk_clist_get_row_data(clist, + GPOINTER_TO_INT(cur->data)); + g_return_if_fail(obj != NULL); + + if (obj->type == ADDR_ITEM) { + AddressItem *item; + + item = ADDRESS_ITEM(obj); + if (item->name && item->address) { + gchar *buf; + + buf = g_strdup_printf + ("%s <%s>", item->name, item->address); + if (*gtk_entry_get_text(entry) != '\0') + gtk_entry_append_text(entry, ", "); + gtk_entry_append_text(entry, buf); + g_free(buf); + } else if (item->address) { + if (*gtk_entry_get_text(entry) != '\0') + gtk_entry_append_text(entry, ", "); + gtk_entry_append_text(entry, item->address); + } + } + } + +#if 0 + gtk_signal_handler_unblock_by_func + (GTK_OBJECT(entry), + GTK_SIGNAL_FUNC(addressbook_entry_changed), NULL); +#endif +} + +#if 0 +static void addressbook_entry_changed(GtkWidget *widget) +{ + GtkCList *clist = GTK_CLIST(addrbook.clist); + GtkEntry *entry = GTK_ENTRY(addrbook.entry); + const gchar *str; + gint len; + gint row; + + //if (clist->selection && clist->selection->next) return; + + str = gtk_entry_get_text(entry); + if (*str == '\0') { + gtk_clist_unselect_all(clist); + return; + } + len = strlen(str); + + for (row = 0; row < clist->rows; row++) { + AddressObject *obj; + const gchar *name; + + obj = ADDRESS_OBJECT(gtk_clist_get_row_data(clist, row)); + if (!obj) continue; + if (obj->type == ADDR_ITEM) + name = ADDRESS_ITEM(obj)->name; + else if (obj->type == ADDR_GROUP) + name = ADDRESS_GROUP(obj)->name; + else + continue; + + if (name && !strncasecmp(name, str, len)) { + gtk_clist_unselect_all(clist); + gtk_clist_select_row(clist, row, -1); + return; + } + } + + gtk_clist_unselect_all(clist); +} +#endif + +static void addressbook_list_button_pressed(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + GtkCList *clist = GTK_CLIST(widget); + gint row, column; + AddressObject *obj; + + if (!event) return; + if (event->button != 3) return; + + obj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), + addrbook.opened); + g_return_if_fail(obj != NULL); + + menu_set_insensitive_all(GTK_MENU_SHELL(addrbook.list_popup)); + + if (gtk_clist_get_selection_info + (clist, event->x, event->y, &row, &column)) { + GtkCListRow *clist_row; + + clist_row = g_list_nth(clist->row_list, row)->data; + if (clist_row->state != GTK_STATE_SELECTED) { + gtk_clist_unselect_all(clist); + gtk_clist_select_row(clist, row, column); + } + gtkut_clist_set_focus_row(clist, row); + + menu_set_sensitive(addrbook.list_factory, "/Edit", TRUE); + menu_set_sensitive(addrbook.list_factory, "/Delete", TRUE); + } + + menu_set_sensitive(addrbook.list_factory, "/New address", TRUE); + if (obj->type == ADDR_FOLDER) { + menu_set_sensitive(addrbook.list_factory, "/New folder", TRUE); + menu_set_sensitive(addrbook.list_factory, "/New group", TRUE); + } + + gtk_menu_popup(GTK_MENU(addrbook.list_popup), NULL, NULL, NULL, NULL, + event->button, event->time); +} + +static void addressbook_list_button_released(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ +} + +static void addressbook_tree_button_pressed(GtkWidget *ctree, + GdkEventButton *event, + gpointer data) +{ + GtkCList *clist = GTK_CLIST(ctree); + gint row, column; + AddressObject *obj; + GtkCTreeNode *node; + + if (!event) return; + if (event->button == 1) { + addrbook.open_folder = TRUE; + return; + } + if (event->button != 3) return; + + if (!gtk_clist_get_selection_info + (clist, event->x, event->y, &row, &column)) return; + gtk_clist_select_row(clist, row, column); + + obj = gtk_clist_get_row_data(clist, row); + g_return_if_fail(obj != NULL); + + menu_set_insensitive_all(GTK_MENU_SHELL(addrbook.tree_popup)); + + if (obj->type == ADDR_FOLDER) { + node = gtk_ctree_node_nth(GTK_CTREE(ctree), row); + menu_set_sensitive(addrbook.tree_factory, "/New folder", TRUE); + menu_set_sensitive(addrbook.tree_factory, "/New group", TRUE); + if (node && GTK_CTREE_ROW(node)->level >= 2) { + menu_set_sensitive(addrbook.tree_factory, + "/Edit", TRUE); + menu_set_sensitive(addrbook.tree_factory, + "/Delete", TRUE); + } + } else if (obj->type == ADDR_GROUP) { + menu_set_sensitive(addrbook.tree_factory, "/Edit", TRUE); + menu_set_sensitive(addrbook.tree_factory, "/Delete", TRUE); + } else + return; + + menu_set_sensitive(addrbook.tree_factory, "/New address", TRUE); + + gtk_menu_popup(GTK_MENU(addrbook.tree_popup), NULL, NULL, NULL, NULL, + event->button, event->time); +} + +static void addressbook_tree_button_released(GtkWidget *ctree, + GdkEventButton *event, + gpointer data) +{ + gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened); + gtkut_ctree_set_focus_row(GTK_CTREE(addrbook.ctree), addrbook.opened); +} + +static void addressbook_popup_close(GtkMenuShell *menu_shell, gpointer data) +{ + if (!addrbook.opened) return; + + gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened); + gtkut_ctree_set_focus_row(GTK_CTREE(addrbook.ctree), + addrbook.opened); +} + +static void addressbook_new_folder_cb(gpointer data, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + AddressObject *obj; + AddressFolder *folder; + gchar *new_folder; + + if (!addrbook.selected) return; + + obj = gtk_ctree_node_get_row_data(ctree, addrbook.selected); + g_return_if_fail(obj != NULL); + if (obj->type != ADDR_FOLDER) return; + + new_folder = input_dialog(_("New folder"), + _("Input the name of new folder:"), + _("NewFolder")); + if (!new_folder) return; + g_strstrip(new_folder); + if (*new_folder == '\0') { + g_free(new_folder); + return; + } + + if (gtk_ctree_find_by_row_data_custom(ctree, addrbook.selected, + new_folder, + addressbook_obj_name_compare)) { + alertpanel_error(_("The name already exists.")); + g_free(new_folder); + return; + } + + folder = g_new(AddressFolder, 1); + ADDRESS_OBJECT_TYPE(folder) = ADDR_FOLDER; + folder->name = g_strdup(new_folder); + folder->items = NULL; + + addressbook_add_object(addrbook.selected, ADDRESS_OBJECT(folder)); + + g_free(new_folder); + + if (addrbook.selected == addrbook.opened) + addressbook_set_clist(obj); +} + +static void addressbook_new_group_cb(gpointer data, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + AddressObject *obj; + AddressGroup *group; + gchar *new_group; + + if (!addrbook.selected) return; + + obj = gtk_ctree_node_get_row_data(ctree, addrbook.selected); + g_return_if_fail(obj != NULL); + if (obj->type != ADDR_FOLDER) return; + + new_group = input_dialog(_("New group"), + _("Input the name of new group:"), + _("NewGroup")); + if (!new_group) return; + g_strstrip(new_group); + if (*new_group == '\0') { + g_free(new_group); + return; + } + + if (gtk_ctree_find_by_row_data_custom(ctree, addrbook.selected, + new_group, + addressbook_obj_name_compare)) { + alertpanel_error(_("The name already exists.")); + g_free(new_group); + return; + } + + group = g_new(AddressGroup, 1); + ADDRESS_OBJECT_TYPE(group) = ADDR_GROUP; + group->name = g_strdup(new_group); + group->items = NULL; + + addressbook_add_object(addrbook.selected, ADDRESS_OBJECT(group)); + + g_free(new_group); + + if (addrbook.selected == addrbook.opened) + addressbook_set_clist(obj); +} + +static void addressbook_change_node_name(GtkCTreeNode *node, const gchar *name) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + gchar *text[1]; + guint8 spacing; + GdkPixmap *pix_cl, *pix_op; + GdkBitmap *mask_cl, *mask_op; + gboolean is_leaf, expanded; + + gtk_ctree_get_node_info(ctree, node, text, &spacing, + &pix_cl, &mask_cl, &pix_op, &mask_op, + &is_leaf, &expanded); + gtk_ctree_set_node_info(ctree, node, name, spacing, + pix_cl, mask_cl, pix_op, mask_op, + is_leaf, expanded); +} + +static void addressbook_edit_group(GtkCTreeNode *group_node) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + GtkCList *clist = GTK_CLIST(addrbook.clist); + AddressObject *obj; + AddressGroup *group; + gchar *new_name; + GtkCTreeNode *node; + + if (!group_node && clist->selection) { + obj = gtk_clist_get_row_data(clist, + GPOINTER_TO_INT(clist->selection->data)); + g_return_if_fail(obj != NULL); + if (obj->type != ADDR_GROUP) return; + node = gtk_ctree_find_by_row_data + (ctree, addrbook.selected, obj); + if (!node) return; + } else { + if (group_node) + node = group_node; + else + node = addrbook.selected; + obj = gtk_ctree_node_get_row_data(ctree, node); + g_return_if_fail(obj != NULL); + if (obj->type != ADDR_GROUP) return; + } + + group = ADDRESS_GROUP(obj); + + new_name = input_dialog(_("Edit group"), + _("Input the new name of group:"), + group->name); + if (!new_name) return; + g_strstrip(new_name); + if (*new_name == '\0') { + g_free(new_name); + return; + } + + if (gtk_ctree_find_by_row_data_custom(ctree, addrbook.selected, + new_name, + addressbook_obj_name_compare)) { + alertpanel_error(_("The name already exists.")); + g_free(new_name); + return; + } + + g_free(group->name); + group->name = g_strdup(new_name); + + addressbook_change_node_name(node, new_name); + gtk_ctree_sort_node(ctree, GTK_CTREE_ROW(node)->parent); + + g_free(new_name); + + addrbook.open_folder = TRUE; + gtk_ctree_select(ctree, addrbook.opened); +} + +static void addressbook_edit_folder_cb(gpointer data, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + AddressObject *obj; + AddressFolder *folder; + gchar *new_name; + + if (!addrbook.selected) return; + if (GTK_CTREE_ROW(addrbook.selected)->level == 1) return; + + obj = gtk_ctree_node_get_row_data(ctree, addrbook.selected); + g_return_if_fail(obj != NULL); + g_return_if_fail(obj->type == ADDR_FOLDER || obj->type == ADDR_GROUP); + + if (obj->type == ADDR_GROUP) { + addressbook_edit_group(addrbook.selected); + return; + } + + folder = ADDRESS_FOLDER(obj); + new_name = input_dialog(_("Edit folder"), + _("Input the new name of folder:"), + folder->name); + + if (!new_name) return; + g_strstrip(new_name); + if (*new_name == '\0') { + g_free(new_name); + return; + } + + if (gtk_ctree_find_by_row_data_custom(ctree, addrbook.selected, + new_name, + addressbook_obj_name_compare)) { + alertpanel_error(_("The name already exists.")); + g_free(new_name); + return; + } + + g_free(folder->name); + folder->name = g_strdup(new_name); + + addressbook_change_node_name(addrbook.selected, new_name); + gtk_ctree_sort_node(ctree, GTK_CTREE_ROW(addrbook.selected)->parent); + + g_free(new_name); +} + +static void addressbook_delete_folder_cb(gpointer data, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + AddressObject *obj, *pobj; + gchar *name; + gchar *message; + AlertValue aval; + + if (!addrbook.selected) return; + if (GTK_CTREE_ROW(addrbook.selected)->level == 1) return; + + obj = gtk_ctree_node_get_row_data(ctree, addrbook.selected); + g_return_if_fail(obj != NULL); + + if (obj->type == ADDR_GROUP) + name = ADDRESS_GROUP(obj)->name; + else if (obj->type == ADDR_FOLDER) + name = ADDRESS_FOLDER(obj)->name; + else + return; + + message = g_strdup_printf(_("Really delete `%s' ?"), name); + aval = alertpanel(_("Delete"), message, _("Yes"), _("No"), NULL); + g_free(message); + if (aval != G_ALERTDEFAULT) return; + + pobj = gtk_ctree_node_get_row_data + (ctree, GTK_CTREE_ROW(addrbook.selected)->parent); + if (!pobj) return; + g_return_if_fail(pobj->type == ADDR_FOLDER); + ADDRESS_FOLDER(pobj)->items = + g_list_remove(ADDRESS_FOLDER(pobj)->items, obj); + + addressbook_delete_object(obj); + addrbook.open_folder = TRUE; + gtk_ctree_remove_node(ctree, addrbook.selected); + addrbook.open_folder = FALSE; +} + +#define SET_LABEL_AND_ENTRY(str, entry, top) \ +{ \ + label = gtk_label_new(str); \ + gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), \ + GTK_FILL, 0, 0, 0); \ + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); \ + \ + entry = gtk_entry_new(); \ + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, top, (top + 1), \ + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \ +} + +static void addressbook_edit_address_create(gboolean *cancelled) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *label; + GtkWidget *name_entry; + GtkWidget *addr_entry; + GtkWidget *rem_entry; + GtkWidget *hbbox; + GtkWidget *ok_btn; + GtkWidget *cancel_btn; + + debug_print("Creating edit_address window...\n"); + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_widget_set_usize(window, 400, -1); + gtk_container_set_border_width(GTK_CONTAINER(window), 8); + gtk_window_set_title(GTK_WINDOW(window), _("Edit address")); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(edit_address_delete_event), + cancelled); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(edit_address_key_pressed), + cancelled); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(window), vbox); + + table = gtk_table_new(3, 2, FALSE); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), 8); + gtk_table_set_col_spacings(GTK_TABLE(table), 8); + + SET_LABEL_AND_ENTRY(_("Name"), name_entry, 0); + SET_LABEL_AND_ENTRY(_("Address"), addr_entry, 1); + SET_LABEL_AND_ENTRY(_("Remarks"), rem_entry, 2); + + gtkut_button_set_create(&hbbox, &ok_btn, _("OK"), + &cancel_btn, _("Cancel"), NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_btn); + + gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", + GTK_SIGNAL_FUNC(edit_address_ok), cancelled); + gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", + GTK_SIGNAL_FUNC(edit_address_cancel), cancelled); + + gtk_widget_show_all(vbox); + + addredit.window = window; + addredit.name_entry = name_entry; + addredit.addr_entry = addr_entry; + addredit.rem_entry = rem_entry; + addredit.ok_btn = ok_btn; + addredit.cancel_btn = cancel_btn; +} + +static void edit_address_ok(GtkWidget *widget, gboolean *cancelled) +{ + *cancelled = FALSE; + gtk_main_quit(); +} + +static void edit_address_cancel(GtkWidget *widget, gboolean *cancelled) +{ + *cancelled = TRUE; + gtk_main_quit(); +} + +static gint edit_address_delete_event(GtkWidget *widget, GdkEventAny *event, + gboolean *cancelled) +{ + *cancelled = TRUE; + gtk_main_quit(); + + return TRUE; +} + +static void edit_address_key_pressed(GtkWidget *widget, GdkEventKey *event, + gboolean *cancelled) +{ + if (event && event->keyval == GDK_Escape) { + *cancelled = TRUE; + gtk_main_quit(); + } +} + +static AddressItem *addressbook_edit_address(AddressItem *item) +{ + static gboolean cancelled; + const gchar *str; + + if (!addredit.window) + addressbook_edit_address_create(&cancelled); + gtk_widget_grab_focus(addredit.ok_btn); + gtk_widget_grab_focus(addredit.name_entry); + gtk_widget_show(addredit.window); + manage_window_set_transient(GTK_WINDOW(addredit.window)); + + gtk_entry_set_text(GTK_ENTRY(addredit.name_entry), ""); + gtk_entry_set_text(GTK_ENTRY(addredit.addr_entry), ""); + gtk_entry_set_text(GTK_ENTRY(addredit.rem_entry), ""); + + if (item) { + if (item->name) + gtk_entry_set_text(GTK_ENTRY(addredit.name_entry), + item->name); + if (item->address) + gtk_entry_set_text(GTK_ENTRY(addredit.addr_entry), + item->address); + if (item->remarks) + gtk_entry_set_text(GTK_ENTRY(addredit.rem_entry), + item->remarks); + } + + gtk_main(); + gtk_widget_hide(addredit.window); + if (cancelled == TRUE) return NULL; + + str = gtk_entry_get_text(GTK_ENTRY(addredit.name_entry)); + if (*str == '\0') return NULL; + + if (!item) { + item = g_new0(AddressItem, 1); + ADDRESS_OBJECT_TYPE(item) = ADDR_ITEM; + } + + g_free(item->name); + item->name = g_strdup(str); + + str = gtk_entry_get_text(GTK_ENTRY(addredit.addr_entry)); + g_free(item->address); + if (*str == '\0') + item->address = NULL; + else + item->address = g_strdup(str); + + str = gtk_entry_get_text(GTK_ENTRY(addredit.rem_entry)); + g_free(item->remarks); + if (*str == '\0') + item->remarks = NULL; + else + item->remarks = g_strdup(str); + + return item; +} + +static void addressbook_new_address_cb(gpointer data, guint action, + GtkWidget *widget) +{ + AddressItem *item; + + item = addressbook_edit_address(NULL); + + if (item) { + addressbook_add_object(addrbook.selected, + ADDRESS_OBJECT(item)); + if (addrbook.selected == addrbook.opened) { + addrbook.open_folder = TRUE; + gtk_ctree_select(GTK_CTREE(addrbook.ctree), + addrbook.opened); + } + } +} + +static void addressbook_edit_address_cb(gpointer data, guint action, + GtkWidget *widget) +{ + GtkCList *clist = GTK_CLIST(addrbook.clist); + AddressObject *obj; + + if (!clist->selection) { + addressbook_edit_folder_cb(NULL, 0, NULL); + return; + } + + obj = gtk_clist_get_row_data(clist, + GPOINTER_TO_INT(clist->selection->data)); + g_return_if_fail(obj != NULL); + + if (obj->type == ADDR_ITEM) { + AddressItem *item = ADDRESS_ITEM(obj); + + if (addressbook_edit_address(item) == NULL) return; + + addrbook.open_folder = TRUE; + gtk_ctree_select(GTK_CTREE(addrbook.ctree), addrbook.opened); + + return; + } else if (obj->type == ADDR_GROUP) { + addressbook_edit_group(NULL); + } +} + +static void addressbook_delete_address_cb(gpointer data, guint action, + GtkWidget *widget) +{ + addressbook_del_clicked(NULL, NULL); +} + +static void close_cb(gpointer data, guint action, GtkWidget *widget) +{ + addressbook_close(); +} + +static void addressbook_set_clist(AddressObject *obj) +{ + GtkCList *clist = GTK_CLIST(addrbook.clist); + GList *items; + gchar *text[N_COLS]; + + if (!obj) { + gtk_clist_clear(clist); + return; + } + + gtk_clist_freeze(clist); + + gtk_clist_clear(clist); + + if (obj->type == ADDR_GROUP) + items = ADDRESS_GROUP(obj)->items; + else if (obj->type == ADDR_FOLDER) + items = ADDRESS_FOLDER(obj)->items; + else { + gtk_clist_thaw(clist); + return; + } + + for (; items != NULL; items = items->next) { + AddressObject *iobj; + gint row; + + iobj = ADDRESS_OBJECT(items->data); + + if (iobj->type == ADDR_GROUP) { + AddressGroup *group; + + group = ADDRESS_GROUP(iobj); + text[COL_NAME] = group->name; + text[COL_ADDRESS] = NULL; + text[COL_REMARKS] = NULL; + row = gtk_clist_append(clist, text); + gtk_clist_set_pixtext(clist, row, COL_NAME, + group->name, 4, + groupxpm, groupxpmmask); + gtk_clist_set_row_data(clist, row, iobj); + } else if (iobj->type == ADDR_ITEM) { + AddressItem *item; + + item = ADDRESS_ITEM(iobj); + text[COL_NAME] = item->name; + text[COL_ADDRESS] = item->address; + text[COL_REMARKS] = item->remarks; + row = gtk_clist_append(clist, text); + gtk_clist_set_row_data(clist, row, iobj); + } + } + + gtk_clist_sort(clist); + gtk_clist_thaw(clist); +} + +static void addressbook_read_file(void) +{ + XMLFile *file; + gchar *path; + + debug_print(_("Reading addressbook file...")); + + path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ADDRESS_BOOK, NULL); + if ((file = xml_open_file(path)) == NULL) { + debug_print(_("%s doesn't exist.\n"), path); + g_free(path); + addressbook_get_tree(NULL, addrbook.common, "common_address"); + addressbook_get_tree(NULL, addrbook.personal, "personal_address"); + return; + } + g_free(path); + + xml_get_dtd(file); + + if (xml_parse_next_tag(file) < 0 || + xml_compare_tag(file, "addressbook") == FALSE) { + g_warning("Invalid addressbook data\n"); + xml_close_file(file); + return; + } + + addressbook_get_tree(file, addrbook.common, "common_address"); + addressbook_get_tree(file, addrbook.personal, "personal_address"); + + xml_close_file(file); + + debug_print(_("done.\n")); +} + +static void addressbook_get_tree(XMLFile *file, GtkCTreeNode *node, + const gchar *folder_tag) +{ + AddressFolder *folder; + + g_return_if_fail(node != NULL); + + folder = g_new(AddressFolder, 1); + ADDRESS_OBJECT(folder)->type = ADDR_FOLDER; + folder->name = g_strdup(folder_tag); + folder->items = NULL; + gtk_ctree_node_set_row_data(GTK_CTREE(addrbook.ctree), node, folder); + + if (file) { + if (xml_parse_next_tag(file) < 0 || + xml_compare_tag(file, folder_tag) == FALSE) { + g_warning("Invalid addressbook data\n"); + return; + } + } + + if (file) addressbook_add_objs(file, node); +} + +static void addressbook_add_objs(XMLFile *file, GtkCTreeNode *node) +{ + GList *attr; + guint prev_level; + GtkCTreeNode *new_node; + + for (;;) { + prev_level = file->level; + if (xml_parse_next_tag(file) < 0) return; + if (file->level < prev_level) return; + + if (xml_compare_tag(file, "group")) { + AddressGroup *group; + + group = g_new(AddressGroup, 1); + ADDRESS_OBJECT_TYPE(group) = ADDR_GROUP; + attr = xml_get_current_tag_attr(file); + if (attr) + group->name = g_strdup(((XMLAttr *)attr->data)->value); + else + group->name = NULL; + group->items = NULL; + + new_node = addressbook_add_object + (node, ADDRESS_OBJECT(group)); + + addressbook_add_objs(file, new_node); + } else if (xml_compare_tag(file, "folder")) { + AddressFolder *folder; + + folder = g_new(AddressFolder, 1); + ADDRESS_OBJECT_TYPE(folder) = ADDR_FOLDER; + attr = xml_get_current_tag_attr(file); + if (attr) + folder->name = g_strdup(((XMLAttr *)attr->data)->value); + else + folder->name = NULL; + folder->items = NULL; + + new_node = addressbook_add_object + (node, ADDRESS_OBJECT(folder)); + + addressbook_add_objs(file, new_node); + } else if (xml_compare_tag(file, "item")) { + AddressItem *item; + + item = addressbook_parse_item(file); + if (!item) return; + new_node = addressbook_add_object + (node, ADDRESS_OBJECT(item)); + } else { + g_warning("Invalid tag\n"); + return; + } + + if (!new_node) return; + } +} + +static GtkCTreeNode *addressbook_add_object(GtkCTreeNode *node, + AddressObject *obj) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + GtkCTreeNode *added; + AddressObject *pobj; + + g_return_val_if_fail(node != NULL, NULL); + g_return_val_if_fail(obj != NULL, NULL); + + pobj = gtk_ctree_node_get_row_data(ctree, node); + g_return_val_if_fail(pobj != NULL, NULL); + if (pobj->type == ADDR_ITEM) { + g_warning("Parent object mustn't be an item.\n"); + return NULL; + } + if (pobj->type == ADDR_FOLDER && + (obj->type == ADDR_GROUP || obj->type == ADDR_FOLDER)) + gtk_ctree_expand(ctree, node); + + if (obj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(obj); + + if (pobj->type != ADDR_FOLDER) { + g_warning("Group can't be added in another group.\n"); + return NULL; + } + + added = gtk_ctree_insert_node(ctree, node, NULL, + &group->name, FOLDER_SPACING, + groupxpm, groupxpmmask, + groupxpm, groupxpmmask, + TRUE, FALSE); + gtk_ctree_node_set_row_data(ctree, added, obj); + } else if (obj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(obj); + + if (pobj->type != ADDR_FOLDER) { + g_warning("Group can't contain folder.\n"); + return NULL; + } + + added = gtk_ctree_insert_node(ctree, node, NULL, + &folder->name, FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + gtk_ctree_node_set_row_data(ctree, added, obj); + } else { + added = node; + } + + if (obj->type == ADDR_GROUP || obj->type == ADDR_ITEM) { + if (pobj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(pobj); + + group->items = g_list_append(group->items, obj); + } else if (pobj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(pobj); + + folder->items = g_list_append(folder->items, obj); + } + } + + gtk_ctree_sort_node(ctree, node); + + return added; +} + +static void addressbook_delete_object(AddressObject *obj) +{ + if (!obj) return; + + if (obj->type == ADDR_ITEM) { + AddressItem *item = ADDRESS_ITEM(obj); + + g_free(item->name); + g_free(item->address); + g_free(item->remarks); + g_free(item); + } else if (obj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(obj); + + g_free(group->name); + while (group->items != NULL) { + addressbook_delete_object + (ADDRESS_OBJECT(group->items->data)); + group->items = g_list_remove(group->items, + group->items->data); + } + g_free(group); + } else if (obj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(obj); + + g_free(folder->name); + while (folder->items != NULL) { + addressbook_delete_object + (ADDRESS_OBJECT(folder->items->data)); + folder->items = g_list_remove(folder->items, + folder->items->data); + } + g_free(folder); + } +} + +static AddressObject *addressbook_find_object_by_name(GtkCTreeNode *node, + const gchar *name) +{ + GtkCTree *ctree = GTK_CTREE(addrbook.ctree); + AddressObject *obj; + GList *found; + + g_return_val_if_fail(node != NULL, NULL); + + obj = gtk_ctree_node_get_row_data(ctree, node); + g_return_val_if_fail(obj != NULL, NULL); + + if (obj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(obj); + + found = g_list_find_custom(group->items, (gpointer)name, + addressbook_obj_name_compare); + if (found) return ADDRESS_OBJECT(found->data); + } else if (obj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(obj); + + found = g_list_find_custom(folder->items, (gpointer)name, + addressbook_obj_name_compare); + if (found) return ADDRESS_OBJECT(found->data); + } else if (obj->type == ADDR_ITEM) { + if (!addressbook_obj_name_compare(obj, name)) return obj; + } + + return NULL; +} + +#define PARSE_ITEM_ERROR() \ +{ \ + g_warning("addressbook_parse_item(): Parse error\n"); \ + g_free(item->name); \ + g_free(item->address); \ + g_free(item->remarks); \ + g_free(item); \ + return NULL; \ +} + +static AddressItem *addressbook_parse_item(XMLFile *file) +{ + gchar *element; + AddressItem *item; + guint level; + + item = g_new0(AddressItem, 1); + ADDRESS_OBJECT(item)->type = ADDR_ITEM; + + level = file->level; + + while (xml_parse_next_tag(file) == 0) { + if (file->level < level) return item; + if (file->level == level) break; + + element = xml_get_element(file); + + if (xml_compare_tag(file, "name")) { + item->name = element; + } else if (xml_compare_tag(file, "address")) { + item->address = element; + } else if (xml_compare_tag(file, "remarks")) { + item->remarks = element; + } + + if (xml_parse_next_tag(file) < 0) break; + if (file->level != level) break; + } + + PARSE_ITEM_ERROR(); +} + +void addressbook_export_to_file(void) +{ + PrefFile *pfile; + gchar *path; + + if (!addrbook.ctree) return; + + debug_print(_("Exporting addressbook to file...")); + + path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ADDRESS_BOOK, NULL); + if ((pfile = prefs_write_open(path)) == NULL) { + g_free(path); + return; + } + g_free(path); + + fprintf(pfile->fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", + conv_get_current_charset_str()); + fputs("<addressbook>\n\n", pfile->fp); + + addressbook_xml_recursive_write(NULL, pfile->fp); + + fputs("</addressbook>\n", pfile->fp); + + if (prefs_write_close(pfile) < 0) { + g_warning(_("failed to write addressbook data.\n")); + return; + } + + debug_print(_("done.\n")); +} + +/* Most part of this function was taken from gtk_ctree_pre_recursive() and + gtk_ctree_post_recursive(). */ +static void addressbook_xml_recursive_write(GtkCTreeNode *node, FILE *fp) +{ + GtkCTreeNode *work; + GtkCTreeNode *tmp; + + if (node) { + work = GTK_CTREE_ROW(node)->children; + addressbook_node_write_begin(node, fp); + } else + work = GTK_CTREE_NODE(GTK_CLIST(addrbook.ctree)->row_list); + + while (work) { + tmp = GTK_CTREE_ROW(work)->sibling; + addressbook_xml_recursive_write(work, fp); + work = tmp; + } + + if (node) + addressbook_node_write_end(node, fp); +} + +static void addressbook_node_write_begin(GtkCTreeNode *node, FILE *fp) +{ + AddressObject *obj; + + obj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), node); + g_return_if_fail(obj != NULL); + + if (obj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(obj); + + if (GTK_CTREE_ROW(node)->level == 1) { + fprintf(fp, "<%s>\n", folder->name); + } else { + tab_indent_out(fp, GTK_CTREE_ROW(node)->level - 1); + fputs("<folder name=\"", fp); + xml_file_put_escape_str(fp, folder->name); + fputs("\">\n", fp); + } + } else if (obj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(obj); + + tab_indent_out(fp, GTK_CTREE_ROW(node)->level - 1); + fputs("<group name=\"", fp); + xml_file_put_escape_str(fp, group->name); + fputs("\">\n", fp); + } +} + +static void addressbook_node_write_end(GtkCTreeNode *node, FILE *fp) +{ + AddressObject *obj; + + obj = gtk_ctree_node_get_row_data(GTK_CTREE(addrbook.ctree), node); + g_return_if_fail(obj != NULL); + + if (obj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(obj); + + addressbook_write_items(fp, folder->items, + GTK_CTREE_ROW(node)->level); + + if (GTK_CTREE_ROW(node)->level == 1) { + fprintf(fp, "</%s>\n\n", folder->name); + } else { + tab_indent_out(fp, GTK_CTREE_ROW(node)->level - 1); + fputs("</folder>\n", fp); + } + } else if (obj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(obj); + + addressbook_write_items(fp, group->items, + GTK_CTREE_ROW(node)->level); + + tab_indent_out(fp, GTK_CTREE_ROW(node)->level - 1); + fputs("</group>\n", fp); + } +} + +static void addressbook_write_items(FILE *fp, GList *items, guint level) +{ + AddressItem *item; + + for (; items != NULL; items = items->next) { + if (ADDRESS_OBJECT_TYPE(items->data) == ADDR_ITEM) { + item = ADDRESS_ITEM(items->data); + + tab_indent_out(fp, level); + fputs("<item>\n", fp); + + tab_indent_out(fp, level + 1); + fputs("<name>", fp); + xml_file_put_escape_str(fp, item->name); + fputs("</name>\n", fp); + + tab_indent_out(fp, level + 1); + fputs("<address>", fp); + xml_file_put_escape_str(fp, item->address); + fputs("</address>\n", fp); + + tab_indent_out(fp, level + 1); + fputs("<remarks>", fp); + xml_file_put_escape_str(fp, item->remarks); + fputs("</remarks>\n", fp); + + tab_indent_out(fp, level); + fputs("</item>\n", fp); + } + } +} + +static void tab_indent_out(FILE *fp, guint level) +{ + gint i; + + for (i = 0; i < level; i++) + fputs(" ", fp); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) + addressbook_close(); +} + +static gint addressbook_list_compare_func(GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2) +{ + AddressObject *obj1 = ((GtkCListRow *)ptr1)->data; + AddressObject *obj2 = ((GtkCListRow *)ptr2)->data; + gchar *name1, *name2; + + if (obj1) { + if (obj1->type == ADDR_ITEM) + name1 = ADDRESS_ITEM(obj1)->name; + else if (obj1->type == ADDR_GROUP) + name1 = ADDRESS_GROUP(obj1)->name; + else if (obj1->type == ADDR_FOLDER) + name1 = ADDRESS_FOLDER(obj1)->name; + else + name1 = NULL; + } else + name1 = NULL; + + if (obj2) { + if (obj2->type == ADDR_ITEM) + name2 = ADDRESS_ITEM(obj2)->name; + else if (obj2->type == ADDR_GROUP) + name2 = ADDRESS_GROUP(obj2)->name; + else if (obj2->type == ADDR_FOLDER) + name2 = ADDRESS_FOLDER(obj2)->name; + else + name2 = NULL; + } else + name2 = NULL; + + if (!name1) + return (name2 != NULL); + if (!name2) + return -1; + + return strcasecmp(name1, name2); +} + +static gint addressbook_obj_name_compare(gconstpointer a, gconstpointer b) +{ + const AddressObject *obj = a; + const gchar *name = b; + + if (!obj || !name) return -1; + + if (obj->type == ADDR_GROUP) { + AddressGroup *group = ADDRESS_GROUP(obj); + if (!group->name) + return -1; + else + return strcasecmp(group->name, name); + } else if (obj->type == ADDR_FOLDER) { + AddressFolder *folder = ADDRESS_FOLDER(obj); + if (!folder->name) + return -1; + else + return strcasecmp(folder->name, name); + } else if (obj->type == ADDR_ITEM) { + AddressItem *item = ADDRESS_ITEM(obj); + if (!item->name) + return -1; + else + return strcasecmp(item->name, name); + } else + return -1; +} diff --git a/src/addressbook.h b/src/addressbook.h new file mode 100644 index 000000000..580aaea64 --- /dev/null +++ b/src/addressbook.h @@ -0,0 +1,117 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __ADDRESSBOOK_H__ +#define __ADDRESSBOOK_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkitemfactory.h> +#include <gtk/gtkctree.h> + +#define ADDRESS_OBJECT(obj) ((AddressObject *)obj) +#define ADDRESS_OBJECT_TYPE(obj) (ADDRESS_OBJECT(obj)->type) +#define ADDRESS_ITEM(obj) ((AddressItem *)obj) +#define ADDRESS_GROUP(obj) ((AddressGroup *)obj) +#define ADDRESS_FOLDER(obj) ((AddressFolder *)obj) + +typedef struct _AddressBook AddressBook; +typedef struct _AddressObject AddressObject; +typedef struct _AddressItem AddressItem; +typedef struct _AddressGroup AddressGroup; +typedef struct _AddressFolder AddressFolder; + +#include "compose.h" + +typedef enum +{ + ADDR_ITEM, + ADDR_GROUP, + ADDR_FOLDER +} AddressObjectType; + +struct _AddressBook +{ + GtkWidget *window; + GtkWidget *ctree; + GtkWidget *clist; + GtkWidget *entry; + + GtkWidget *del_btn; + GtkWidget *reg_btn; + GtkWidget *lup_btn; + GtkWidget *to_btn; + GtkWidget *cc_btn; + GtkWidget *bcc_btn; + + GtkWidget *tree_popup; + GtkWidget *list_popup; + GtkItemFactory *tree_factory; + GtkItemFactory *list_factory; + + GtkCTreeNode *common; + GtkCTreeNode *personal; + GtkCTreeNode *selected; + GtkCTreeNode *opened; + + gboolean open_folder; + + Compose *target_compose; +}; + +struct _AddressObject +{ + AddressObjectType type; +}; + +struct _AddressItem +{ + AddressObject obj; + + gchar *name; + gchar *address; + gchar *remarks; +}; + +struct _AddressGroup +{ + AddressObject obj; + + gchar *name; + + /* Group contains only Items */ + GList *items; +}; + +struct _AddressFolder +{ + AddressObject obj; + + gchar *name; + + /* Folder contains Groups and Items */ + GList *items; +}; + +void addressbook_open (Compose *target); +void addressbook_set_target_compose (Compose *target); +Compose *addressbook_get_target_compose (void); +void addressbook_export_to_file (void); + +#endif /* __ADDRESSBOOK_H__ */ diff --git a/src/alertpanel.c b/src/alertpanel.c new file mode 100644 index 000000000..e50414843 --- /dev/null +++ b/src/alertpanel.c @@ -0,0 +1,260 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> + +#include "intl.h" +#include "alertpanel.h" +#include "manage_window.h" +#include "utils.h" +#include "gtkutils.h" + +#define TITLE_FONT "-*-helvetica-medium-r-normal--17-*-*-*-*-*-*-*," \ + "-*-*-medium-r-normal--16-*-*-*-*-*-*-*,*" +#define MESSAGE_FONT "-*-helvetica-medium-r-normal--14-*-*-*-*-*-*-*," \ + "-*-*-medium-r-normal--14-*-*-*-*-*-*-*,*" +#define ALERT_PANEL_WIDTH 380 +#define TITLE_HEIGHT 72 +#define MESSAGE_HEIGHT 62 + +static gboolean alertpanel_is_open = FALSE; +static AlertValue value; + +static GtkWidget *dialog; + +static void alertpanel_show (void); +static void alertpanel_create (const gchar *title, + const gchar *message, + const gchar *button1_label, + const gchar *button2_label, + const gchar *button3_label); +static void alertpanel_button_clicked (GtkWidget *widget, + gpointer data); +static void alertpanel_close (GtkWidget *widget, + GdkEventAny *event, + gpointer data); + +AlertValue alertpanel(const gchar *title, + const gchar *message, + const gchar *button1_label, + const gchar *button2_label, + const gchar *button3_label) +{ + if (alertpanel_is_open) + return -1; + else + alertpanel_is_open = TRUE; + + alertpanel_create(title, message, button1_label, button2_label, + button3_label); + alertpanel_show(); + + debug_print("return value = %d\n", value); + return value; +} + +void alertpanel_message(const gchar *title, const gchar *message) +{ + if (alertpanel_is_open) + return; + else + alertpanel_is_open = TRUE; + + alertpanel_create(title, message, NULL, NULL, NULL); + alertpanel_show(); +} + +void alertpanel_notice(const gchar *format, ...) +{ + va_list args; + gchar buf[256]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + strretchomp(buf); + + alertpanel_message(_("Notice"), buf); +} + +void alertpanel_warning(const gchar *format, ...) +{ + va_list args; + gchar buf[256]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + strretchomp(buf); + + alertpanel_message(_("Warning"), buf); +} + +void alertpanel_error(const gchar *format, ...) +{ + va_list args; + gchar buf[256]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + strretchomp(buf); + + alertpanel_message(_("Error"), buf); +} + +static void alertpanel_show(void) +{ + gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); + manage_window_set_transient(GTK_WINDOW(dialog)); + value = G_ALERTWAIT; + + while (value == G_ALERTWAIT) + gtk_main_iteration(); + + gtk_widget_destroy(dialog); + GTK_EVENTS_FLUSH(); + + alertpanel_is_open = FALSE; +} + +static void alertpanel_create(const gchar *title, + const gchar *message, + const gchar *button1_label, + const gchar *button2_label, + const gchar *button3_label) +{ + static GdkFont *titlefont; + GtkStyle *style; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *vbox; + GtkWidget *confirm_area; + GtkWidget *button1; + GtkWidget *button2; + GtkWidget *button3; + const gchar *label2; + const gchar *label3; + + debug_print(_("Creating alert panel dialog...\n")); + + dialog = gtk_dialog_new(); + gtk_window_set_title(GTK_WINDOW(dialog), title); + gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, FALSE); + gtk_container_set_border_width + (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); + gtk_window_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); + gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", + GTK_SIGNAL_FUNC(alertpanel_close), + (gpointer)G_ALERTOTHER); + gtk_signal_connect(GTK_OBJECT(dialog), "key_press_event", + GTK_SIGNAL_FUNC(alertpanel_close), + (gpointer)G_ALERTOTHER); + gtk_widget_realize(dialog); + + /* for title label */ + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog)->vbox), + hbox, TRUE, TRUE, 16); + + /* title label */ + //pixmapwid = create_pixmapwid(dialog, GNUstep_xpm); + //gtk_box_pack_start(GTK_BOX(hbox), pixmapwid, FALSE, FALSE, 16); + label = gtk_label_new(title); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 16); + style = gtk_style_copy(gtk_widget_get_style(label)); + if (!titlefont) + titlefont = gdk_fontset_load(TITLE_FONT); + if (titlefont) + style->font = titlefont; + gtk_widget_set_style(label, style); + + /* for message and button(s) */ + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), + vbox); + + /* for message label */ + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 20); + + /* message label */ + label = gtk_label_new(message); + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 32); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); + + /* for button(s) */ + if (!button1_label) + button1_label = _("OK"); + label2 = button2_label; + label3 = button3_label; + if (label2 && *label2 == '+') label2++; + if (label3 && *label3 == '+') label3++; + + gtkut_button_set_create(&confirm_area, + &button1, button1_label, + button2_label ? &button2 : NULL, label2, + button3_label ? &button3 : NULL, label3); + + gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default(button1); + gtk_widget_grab_focus(button1); + if (button2_label && *button2_label == '+') { + gtk_widget_grab_default(button2); + gtk_widget_grab_focus(button2); + } + if (button3_label && *button3_label == '+') { + gtk_widget_grab_default(button3); + gtk_widget_grab_focus(button3); + } + + gtk_signal_connect(GTK_OBJECT(button1), "clicked", + GTK_SIGNAL_FUNC(alertpanel_button_clicked), + (gpointer)G_ALERTDEFAULT); + if (button2_label) + gtk_signal_connect(GTK_OBJECT(button2), "clicked", + GTK_SIGNAL_FUNC(alertpanel_button_clicked), + (gpointer)G_ALERTALTERNATE); + if (button3_label) + gtk_signal_connect(GTK_OBJECT(button3), "clicked", + GTK_SIGNAL_FUNC(alertpanel_button_clicked), + (gpointer)G_ALERTOTHER); + + gtk_widget_show_all(dialog); +} + +static void alertpanel_button_clicked(GtkWidget *widget, gpointer data) +{ + value = (AlertValue)data; +} + +static void alertpanel_close(GtkWidget *widget, GdkEventAny *event, + gpointer data) +{ + if (event->type == GDK_KEY_PRESS) + if (((GdkEventKey *)event)->keyval != GDK_Escape) + return; + + value = (AlertValue)data; +} diff --git a/src/alertpanel.h b/src/alertpanel.h new file mode 100644 index 000000000..d85eec92c --- /dev/null +++ b/src/alertpanel.h @@ -0,0 +1,50 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __ALERTPANEL_H__ +#define __ALERTPANEL_H__ + +#include <glib.h> +#include <gtk/gtkwindow.h> + +typedef enum +{ + G_ALERTDEFAULT, + G_ALERTALTERNATE, + G_ALERTOTHER, + G_ALERTWAIT +} AlertValue; + +AlertValue alertpanel (const gchar *title, + const gchar *message, + const gchar *button1_label, + const gchar *button2_label, + const gchar *button3_label); + +void alertpanel_message (const gchar *title, + const gchar *message); + +void alertpanel_notice (const gchar *format, + ...) G_GNUC_PRINTF(1, 2); +void alertpanel_warning (const gchar *format, + ...) G_GNUC_PRINTF(1, 2); +void alertpanel_error (const gchar *format, + ...) G_GNUC_PRINTF(1, 2); + +#endif /* __ALERTPANEL_H__ */ diff --git a/src/automaton.c b/src/automaton.c new file mode 100644 index 000000000..968fda12d --- /dev/null +++ b/src/automaton.c @@ -0,0 +1,77 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <gdk/gdk.h> +#include <gtk/gtkmain.h> + +#include "automaton.h" + +Automaton *automaton_create(gint num) +{ + Automaton *atm; + + g_return_val_if_fail(num > 0, NULL); + + atm = g_new0(Automaton, 1); + atm->max = num - 1; + atm->state = g_new0(AtmState, num); + + return atm; +} + +void automaton_destroy(Automaton *atm) +{ + if (!atm) return; + + g_free(atm->state); + g_free(atm); +} + +void automaton_input_cb(gpointer data, gint source, + GdkInputCondition condition) +{ + Automaton *atm = (Automaton *)data; + gint next; + + //g_print("atm->num = %d\n", atm->num); + + if (atm->timeout_tag > 0) { + gtk_timeout_remove(atm->timeout_tag); + atm->timeout_tag = 0; + atm->elapsed = 0; + } + gdk_input_remove(atm->tag); + atm->tag = 0; + + next = atm->state[atm->num].handler(source, atm->data); + + if (atm->terminated) + return; + + if (next >= 0 && next <= atm->max && next != atm->num) { + atm->num = next; + atm->tag = gdk_input_add(source, + atm->state[atm->num].condition, + automaton_input_cb, + data); + } else { + atm->terminate(source, data); + } +} diff --git a/src/automaton.h b/src/automaton.h new file mode 100644 index 000000000..d954e0472 --- /dev/null +++ b/src/automaton.h @@ -0,0 +1,54 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __AUTOMATON_H__ +#define __AUTOMATON_H__ + +#include <glib.h> + +typedef struct _AtmState AtmState; +typedef struct _Automaton Automaton; + +typedef gint (*AtmHandler) (gint source, gpointer data); + +struct _AtmState +{ + GdkInputCondition condition; + gint (*handler)(gint source, gpointer data); +}; + +struct _Automaton +{ + gint max; + gint num; + gint tag; + guint timeout_tag; + guint elapsed; + gboolean terminated; + gpointer data; + AtmState *state; + gint (*terminate)(gint source, gpointer data); +}; + +Automaton *automaton_create(gint num); +void automaton_destroy(Automaton *atm); +void automaton_input_cb(gpointer data, gint source, + GdkInputCondition condition); + +#endif /* __AUTOMATON_H__ */ diff --git a/src/base64.c b/src/base64.c new file mode 100644 index 000000000..3cd3bcb79 --- /dev/null +++ b/src/base64.c @@ -0,0 +1,98 @@ +/* + * base64.c -- base-64 conversion routines. + * + * For license terms, see the file COPYING in this directory. + * + * This base 64 encoding is defined in RFC2045 section 6.8, + * "Base64 Content-Transfer-Encoding", but lines must not be broken in the + * scheme used here. + * + * Modified by Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> + */ +#include <ctype.h> + +static const char base64digits[] = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + +#define BAD -1 +static const char base64val[] = { + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, + BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63, + 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,BAD,BAD, BAD,BAD,BAD,BAD, + BAD, 0, 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,BAD, BAD,BAD,BAD,BAD, + BAD, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,BAD, BAD,BAD,BAD,BAD +}; +#define DECODE64(c) (isascii(c) ? base64val[c] : BAD) + +void to64frombits(unsigned char *out, const unsigned char *in, int inlen) +/* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */ +{ + for (; inlen >= 3; inlen -= 3) + { + *out++ = base64digits[in[0] >> 2]; + *out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)]; + *out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; + *out++ = base64digits[in[2] & 0x3f]; + in += 3; + } + if (inlen > 0) + { + unsigned char fragment; + + *out++ = base64digits[in[0] >> 2]; + fragment = (in[0] << 4) & 0x30; + if (inlen > 1) + fragment |= in[1] >> 4; + *out++ = base64digits[fragment]; + *out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c]; + *out++ = '='; + } + *out = '\0'; +} + +int from64tobits(char *out, const char *in) +/* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */ +{ + int len = 0; + register unsigned char digit1, digit2, digit3, digit4; + + if (in[0] == '+' && in[1] == ' ') + in += 2; + if (*in == '\r' || *in == '\n') + return 0; + + do { + digit1 = in[0]; + if (DECODE64(digit1) == BAD) + return -1; + digit2 = in[1]; + if (DECODE64(digit2) == BAD) + return -1; + digit3 = in[2]; + if (digit3 != '=' && DECODE64(digit3) == BAD) + return -1; + digit4 = in[3]; + if (digit4 != '=' && DECODE64(digit4) == BAD) + return -1; + in += 4; + *out++ = (DECODE64(digit1) << 2) | ((DECODE64(digit2) >> 4) & 0x03); + ++len; + if (digit3 != '=') + { + *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2); + ++len; + if (digit4 != '=') + { + *out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4); + ++len; + } + } + } while (*in && *in != '\r' && *in != '\n' && digit4 != '='); + + return len; +} + +/* base64.c ends here */ diff --git a/src/base64.h b/src/base64.h new file mode 100644 index 000000000..24e16d7bd --- /dev/null +++ b/src/base64.h @@ -0,0 +1,7 @@ +#ifndef __BASE64_H__ +#define __BASE64_H__ + +void to64frombits(unsigned char *, const unsigned char *, int); +int from64tobits(char *, const char *); + +#endif /* __BASE64_H__ */ diff --git a/src/codeconv.c b/src/codeconv.c new file mode 100644 index 000000000..32f347a21 --- /dev/null +++ b/src/codeconv.c @@ -0,0 +1,1160 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <string.h> +#include <ctype.h> +#include <stdlib.h> + +#if (HAVE_WCTYPE_H && HAVE_WCHAR_H) +# include <wchar.h> +# include <wctype.h> +#endif + +#if HAVE_LOCALE_H +# include <locale.h> +#endif + +#if HAVE_LIBJCONV +# include <jconv.h> +#endif + +#include <kcc.h> + +#include "intl.h" +#include "codeconv.h" +#include "unmime.h" +#include "base64.h" +#include "utils.h" +#include "prefs_common.h" + +#define iskanji(c) \ + (((c) & 0xff) >= 0xa1 && ((c) & 0xff) <= 0xfe) +#define iseucss(c) \ + (((c) & 0xff) == 0x8e || ((c) & 0xff) == 0x8f) +#define isunprintablekanji(c) \ + (((c) & 0xff) >= 0xa9 && ((c) & 0xff) <= 0xaf) + +void conv_jistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + KCC_filter(outbuf, "EUC", (gchar *)inbuf, "JISBB", 0, 0, 0); +} + +void conv_euctojis(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + size_t inlen, len; + + inlen = strlen(inbuf); + if (iskanji(inbuf[inlen - 1]) || iseucss(inbuf[inlen - 1])) { + /* if tail end of the string is not ended with ascii, + add dummy return code. */ + gchar *tmpin, *tmpout; + + /* length of original string + '\n' + '\0' */ + tmpin = alloca(inlen + 2); + if (tmpin == NULL) { + g_warning(_("can't allocate memory\n")); + KCC_filter(outbuf, "JISBB", (gchar *)inbuf, "EUC", + 0, 0, 0); + return; + } + strcpy(tmpin, inbuf); + tmpin[inlen] = '\n'; + tmpin[inlen + 1] = '\0'; + + tmpout = alloca(outlen + 1); + if (tmpout == NULL) { + g_warning(_("can't allocate memory\n")); + KCC_filter(outbuf, "JISBB", (gchar *)inbuf, "EUC", + 0, 0, 0); + return; + } + + KCC_filter(tmpout, "JISBB", tmpin, "EUC", 0, 0, 0); + len = strlen(tmpout); + if (tmpout[len - 1] == '\n') + tmpout[len - 1] = '\0'; + strncpy2(outbuf, tmpout, outlen); + } else + KCC_filter(outbuf, "JISBB", (gchar *)inbuf, "EUC", 0, 0, 0); +} + +void conv_sjistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + KCC_filter(outbuf, "EUC", (gchar *)inbuf, "SJIS", 0, 0, 0); +} + +void conv_anytoeuc(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + KCC_filter(outbuf, "EUC", (gchar *)inbuf, "AUTO", 0, 0, 0); +} + +void conv_anytojis(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + KCC_filter(outbuf, "JISBB", (gchar *)inbuf, "AUTO", 0, 0, 0); +} + +#define SUBST_CHAR '_' + +void conv_unreadable_eucjp(gchar *str) +{ + register guchar *p = str; + + while (*p != '\0') { + if (isascii(*p)) { + /* convert CR+LF -> LF */ + if (*p == '\r' && *(p + 1) == '\n') + memmove(p, p + 1, strlen(p)); + /* printable 7 bit code */ + p++; + } else if (iskanji(*p)) { + if (iskanji(*(p + 1)) && !isunprintablekanji(*p)) + /* printable euc-jp code */ + p += 2; + else { + /* substitute unprintable code */ + *p++ = SUBST_CHAR; + if (*p != '\0') { + if (isascii(*p)) + p++; + else + *p++ = SUBST_CHAR; + } + } + } else if (iseucss(*p)) { + if ((*(p + 1) & 0x80) != 0) + /* euc-jp hankaku kana */ + p += 2; + else + *p++ = SUBST_CHAR; + } else + /* substitute unprintable 1 byte code */ + *p++ = SUBST_CHAR; + } +} + +void conv_unreadable_8bit(gchar *str) +{ + register guchar *p = str; + + while (*p != '\0') { + /* convert CR+LF -> LF */ + if (*p == '\r' && *(p + 1) == '\n') + memmove(p, p + 1, strlen(p)); + else if (!isascii(*p)) *p = SUBST_CHAR; + p++; + } +} + +void conv_unreadable_latin(gchar *str) +{ + register guchar *p = str; + + while (*p != '\0') { + /* convert CR+LF -> LF */ + if (*p == '\r' && *(p + 1) == '\n') + memmove(p, p + 1, strlen(p)); + else if ((*p & 0xff) >= 0x80 && (*p & 0xff) <= 0x9f) + *p = SUBST_CHAR; + p++; + } +} + +#define NCV '\0' + +void conv_mb_alnum(gchar *str) +{ + static guchar char_tbl[] = { + /* 0xa0 - 0xaf */ + NCV, ' ', NCV, NCV, ',', '.', NCV, ':', + ';', '?', '!', NCV, NCV, NCV, NCV, NCV, + /* 0xb0 - 0xbf */ + NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV, + NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV, + /* 0xc0 - 0xcf */ + NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV, + NCV, NCV, '(', ')', NCV, NCV, '[', ']', + /* 0xd0 - 0xdf */ + '{', '}', NCV, NCV, NCV, NCV, NCV, NCV, + NCV, NCV, NCV, NCV, '+', '-', NCV, NCV, + /* 0xe0 - 0xef */ + NCV, '=', NCV, '<', '>', NCV, NCV, NCV, + NCV, NCV, NCV, NCV, NCV, NCV, NCV, NCV + }; + + register guchar *p = str; + register gint len; + + len = strlen(str); + + while (len > 1) { + if (*p == 0xa3) { + register guchar ch = *(p + 1); + + if (ch >= 0xb0 && ch <= 0xfa) { + /* [a-zA-Z] */ + *p = ch & 0x7f; + p++; + len--; + memmove(p, p + 1, len); + len--; + } else { + p += 2; + len -= 2; + } + } else if (*p == 0xa1) { + register guchar ch = *(p + 1); + + if (ch >= 0xa0 && ch <= 0xef && + NCV != char_tbl[ch - 0xa0]) { + *p = char_tbl[ch - 0xa0]; + p++; + len--; + memmove(p, p + 1, len); + len--; + } else { + p += 2; + len -= 2; + } + } else if (iskanji(*p)) { + p += 2; + len -= 2; + } else { + p++; + len--; + } + } +} + +void conv_jistodisp(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + conv_jistoeuc(outbuf, outlen, inbuf); + conv_unreadable_eucjp(outbuf); +} + +void conv_sjistodisp(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + conv_sjistoeuc(outbuf, outlen, inbuf); + conv_unreadable_eucjp(outbuf); +} + +void conv_euctodisp(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + strncpy2(outbuf, inbuf, outlen); + conv_unreadable_eucjp(outbuf); +} + +void conv_ustodisp(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + strncpy2(outbuf, inbuf, outlen); + conv_unreadable_8bit(outbuf); +} + +void conv_latintodisp(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + strncpy2(outbuf, inbuf, outlen); + conv_unreadable_latin(outbuf); +} + +void conv_noconv(gchar *outbuf, gint outlen, const gchar *inbuf) +{ + strncpy2(outbuf, inbuf, outlen); +} + +CodeConverter *conv_code_converter_new(const gchar *charset) +{ + CodeConverter *conv; + + conv = g_new0(CodeConverter, 1); +#if !HAVE_LIBJCONV + conv->code_conv_func = conv_get_code_conv_func(charset); +#endif + conv->charset_str = g_strdup(charset); + conv->charset = conv_get_charset_from_str(charset); + + return conv; +} + +void conv_code_converter_destroy(CodeConverter *conv) +{ + g_free(conv->charset_str); + g_free(conv); +} + +gint conv_convert(CodeConverter *conv, gchar *outbuf, gint outlen, + const gchar *inbuf) +{ +#if HAVE_LIBJCONV + gchar *str; + + str = conv_codeset_strdup(inbuf, conv->charset_str, NULL); + if (!str) + return -1; + else { + strncpy2(outbuf, str, outlen); + g_free(str); + } +#else /* !HAVE_LIBJCONV */ + conv->code_conv_func(outbuf, outlen, inbuf); +#endif + + return 0; +} + +gchar *conv_codeset_strdup(const gchar *inbuf, + const gchar *src_codeset, const gchar *dest_codeset) +{ + gchar *buf; + size_t len; +#if HAVE_LIBJCONV + gint actual_codeset; + const gchar *const *codesets; + gint n_codesets; +#else /* !HAVE_LIBJCONV */ + CharSet src_charset = C_AUTO, dest_charset = C_AUTO; +#endif + + if (!dest_codeset) { + CodeConvFunc func; + + func = conv_get_code_conv_func(src_codeset); + if (func != conv_noconv) { + if (func == conv_jistodisp || func == conv_sjistodisp) + len = strlen(inbuf) * 2 + 1; + else + len = strlen(inbuf) + 1; + buf = g_malloc(len); + if (!buf) return NULL; + func(buf, len, inbuf); + buf = g_realloc(buf, strlen(buf) + 1); + return buf; + } + } + +#if HAVE_LIBJCONV + if (src_codeset) { + codesets = &src_codeset; + n_codesets = 1; + } else + codesets = jconv_info_get_pref_codesets(&n_codesets); + if (!dest_codeset) + dest_codeset = conv_get_current_charset_str(); + + if (jconv_alloc_conv(inbuf, strlen(inbuf), &buf, &len, + codesets, n_codesets, + &actual_codeset, dest_codeset) + == 0) + return buf; + else + return NULL; +#else /* !HAVE_LIBJCONV */ + if (src_codeset) { + if (!strcasecmp(src_codeset, CS_EUC_JP) || + !strcasecmp(src_codeset, "EUCJP")) + src_charset = C_EUC_JP; + else if (!strcasecmp(src_codeset, CS_SHIFT_JIS) || + !strcasecmp(src_codeset, "SHIFT-JIS") || + !strcasecmp(src_codeset, "SJIS")) + src_charset = C_SHIFT_JIS; + if (dest_codeset && !strcasecmp(dest_codeset, CS_ISO_2022_JP)) + dest_charset = C_ISO_2022_JP; + } + + if ((src_charset == C_EUC_JP || src_charset == C_SHIFT_JIS) && + dest_charset == C_ISO_2022_JP) { + len = (strlen(inbuf) + 1) * 3; + buf = g_malloc(len); + if (buf) { + if (src_charset == C_EUC_JP) + conv_euctojis(buf, len, inbuf); + else + conv_anytojis(buf, len, inbuf); + buf = g_realloc(buf, strlen(buf) + 1); + } + } else + buf = g_strdup(inbuf); + + return buf; +#endif /* !HAVE_LIBJCONV */ +} + +CodeConvFunc conv_get_code_conv_func(const gchar *charset) +{ + CodeConvFunc code_conv; + + if (!charset) { + if (conv_get_outgoing_charset() == C_ISO_2022_JP) + return conv_jistodisp; + else + return conv_noconv; + } + + if (!strcasecmp(charset, CS_ISO_2022_JP) || + !strcasecmp(charset, CS_ISO_2022_JP_2)) + code_conv = conv_jistodisp; + else if (!strcasecmp(charset, CS_US_ASCII)) + code_conv = conv_ustodisp; + else if (!strncasecmp(charset, "ISO-8859-", 9)) + code_conv = conv_latintodisp; + else if (!strcasecmp(charset, CS_SHIFT_JIS) || + !strcasecmp(charset, "SHIFT-JIS") || + !strcasecmp(charset, "SJIS") || + !strcasecmp(charset, "X-SJIS")) + code_conv = conv_sjistodisp; + else if (!strcasecmp(charset, CS_EUC_JP) || + !strcasecmp(charset, "EUCJP")) + code_conv = conv_euctodisp; + else + code_conv = conv_noconv; + + return code_conv; +} + +static const struct { + CharSet charset; + gchar *const name; +} charsets[] = { + {C_US_ASCII, CS_US_ASCII}, + {C_UTF_8, CS_UTF_8}, + {C_ISO_8859_1, CS_ISO_8859_1}, + {C_ISO_8859_2, CS_ISO_8859_2}, + {C_ISO_8859_4, CS_ISO_8859_4}, + {C_ISO_8859_5, CS_ISO_8859_5}, + {C_ISO_8859_7, CS_ISO_8859_7}, + {C_ISO_8859_8, CS_ISO_8859_8}, + {C_ISO_8859_9, CS_ISO_8859_9}, + {C_ISO_8859_13, CS_ISO_8859_13}, + {C_ISO_8859_15, CS_ISO_8859_15}, + {C_BALTIC, CS_BALTIC}, + {C_CP1251, CS_CP1251}, + {C_WINDOWS_1251, CS_WINDOWS_1251}, + {C_KOI8_R, CS_KOI8_R}, + {C_KOI8_U, CS_KOI8_U}, + {C_ISO_2022_JP, CS_ISO_2022_JP}, + {C_ISO_2022_JP_2, CS_ISO_2022_JP_2}, + {C_EUC_JP, CS_EUC_JP}, + {C_SHIFT_JIS, CS_SHIFT_JIS}, + {C_ISO_2022_KR, CS_ISO_2022_KR}, + {C_EUC_KR, CS_EUC_KR}, + {C_ISO_2022_CN, CS_ISO_2022_CN}, + {C_EUC_CN, CS_EUC_CN}, + {C_GB2312, CS_GB2312}, + {C_EUC_TW, CS_EUC_TW}, + {C_BIG5, CS_BIG5}, +}; + +#if !HAVE_LIBJCONV +static const struct { + gchar *const locale; + CharSet charset; +} locale_table[] = { + {"ja_JP.eucJP" , C_EUC_JP}, + {"ja_JP.ujis" , C_EUC_JP}, + {"ja_JP.EUC" , C_EUC_JP}, + {"ja_JP.SJIS" , C_SHIFT_JIS}, + {"ja_JP.JIS" , C_ISO_2022_JP}, + {"ja_JP" , C_EUC_JP}, + {"ko_KR" , C_EUC_KR}, + {"zh_CN.GB2312" , C_GB2312}, + {"zh_CN" , C_GB2312}, + {"zh_TW.eucTW" , C_EUC_TW}, + {"zh_TW.Big5" , C_BIG5}, + {"zh_TW" , C_BIG5}, + + {"ru_RU.KOI8-R" , C_KOI8_R}, + {"ru_RU.CP1251" , C_CP1251}, + + {"en_US" , C_ISO_8859_1}, + {"ca_ES" , C_ISO_8859_1}, + {"da_DK" , C_ISO_8859_1}, + {"de_DE" , C_ISO_8859_1}, + {"nl_NL" , C_ISO_8859_1}, + {"et_EE" , C_ISO_8859_1}, + {"fi_FI" , C_ISO_8859_1}, + {"fr_FR" , C_ISO_8859_1}, + {"is_IS" , C_ISO_8859_1}, + {"it_IT" , C_ISO_8859_1}, + {"no_NO" , C_ISO_8859_1}, + {"pt_PT" , C_ISO_8859_1}, + {"pt_BR" , C_ISO_8859_1}, + {"es_ES" , C_ISO_8859_1}, + {"sv_SE" , C_ISO_8859_1}, + + {"hr_HR" , C_ISO_8859_2}, + {"hu_HU" , C_ISO_8859_2}, + {"pl_PL" , C_ISO_8859_2}, + {"ro_RO" , C_ISO_8859_2}, + {"sk_SK" , C_ISO_8859_2}, + {"sl_SI" , C_ISO_8859_2}, + {"ru_RU" , C_ISO_8859_5}, + {"el_GR" , C_ISO_8859_7}, + {"iw_IL" , C_ISO_8859_8}, + {"tr_TR" , C_ISO_8859_9}, + + {"lt_LT.iso88594" , C_ISO_8859_4}, + {"lt_LT.ISO8859-4" , C_ISO_8859_4}, + {"lt_LT.ISO_8859-4" , C_ISO_8859_4}, + {"lt_LT" , C_ISO_8859_13}, + {"lv_LV" , C_ISO_8859_13}, + + {"C" , C_US_ASCII}, + {"POSIX" , C_US_ASCII}, +}; +#endif /* !HAVE_LIBJCONV */ + +const gchar *conv_get_charset_str(CharSet charset) +{ + gint i; + + for (i = 0; i < sizeof(charsets) / sizeof(charsets[0]); i++) { + if (charsets[i].charset == charset) + return charsets[i].name; + } + + return NULL; +} + +CharSet conv_get_charset_from_str(const gchar *charset) +{ + gint i; + + if (!charset) return C_AUTO; + + for (i = 0; i < sizeof(charsets) / sizeof(charsets[0]); i++) { + if (!strcasecmp(charsets[i].name, charset)) + return charsets[i].charset; + } + + return C_AUTO; +} + +CharSet conv_get_current_charset(void) +{ + static CharSet cur_charset = -1; + gint i; + +#if HAVE_LIBJCONV + const gchar *cur_codeset; +#else + const gchar *cur_locale; +#endif + + if (cur_charset != -1) + return cur_charset; + +#if HAVE_LIBJCONV + cur_codeset = jconv_info_get_current_codeset(); + for (i = 0; i < sizeof(charsets) / sizeof(charsets[0]); i++) { + if (!strcasecmp(cur_codeset, charsets[i].name)) { + cur_charset = charsets[i].charset; + return cur_charset; + } + } +#else + cur_locale = g_getenv("LC_ALL"); + if (!cur_locale) cur_locale = g_getenv("LC_CTYPE"); + if (!cur_locale) cur_locale = g_getenv("LANG"); + if (!cur_locale) cur_locale = setlocale(LC_CTYPE, NULL); + + debug_print("current locale: %s\n", + cur_locale ? cur_locale : "(none)"); + + if (!cur_locale) { + cur_charset = C_US_ASCII; + return cur_charset; + } + + if (strcasestr(cur_locale, "UTF-8")) { + cur_charset = C_UTF_8; + return cur_charset; + } + + for (i = 0; i < sizeof(locale_table) / sizeof(locale_table[0]); i++) { + const gchar *p; + + /* "ja_JP.EUC" matches with "ja_JP.eucJP" and "ja_JP.EUC" */ + /* "ja_JP" matches with "ja_JP.xxxx" and "ja" */ + if (!strncasecmp(cur_locale, locale_table[i].locale, + strlen(locale_table[i].locale))) { + cur_charset = locale_table[i].charset; + return cur_charset; + } else if ((p = strchr(locale_table[i].locale, '_')) && + !strchr(p + 1, '.')) { + if (strlen(cur_locale) == 2 && + !strncasecmp(cur_locale, locale_table[i].locale, 2)) { + cur_charset = locale_table[i].charset; + return cur_charset; + } + } + } +#endif + + cur_charset = C_AUTO; + return cur_charset; +} + +const gchar *conv_get_current_charset_str(void) +{ +#if HAVE_LIBJCONV + return jconv_info_get_current_codeset(); +#else + static const gchar *codeset = NULL; + + if (!codeset) + codeset = conv_get_charset_str(conv_get_current_charset()); + + return codeset ? codeset : "US-ASCII"; +#endif +} + +CharSet conv_get_outgoing_charset(void) +{ + static CharSet out_charset = -1; + +#if HAVE_LIBJCONV + gint i, j, n_pref_codesets; + const gchar *const *pref_codesets; +#else + CharSet cur_charset; +#endif + + if (out_charset != -1) + return out_charset; + +#if HAVE_LIBJCONV + /* skip US-ASCII and UTF-8 */ + pref_codesets = jconv_info_get_pref_codesets(&n_pref_codesets); + for (i = 0; i < n_pref_codesets; i++) { + for (j = 2; j < sizeof(charsets) / sizeof(charsets[0]); j++) { + if (!strcasecmp(pref_codesets[i], charsets[j].name)) { + out_charset = charsets[j].charset; + return out_charset; + } + } + } + + for (i = 0; i < n_pref_codesets; i++) { + if (!strcasecmp(pref_codesets[i], "UTF-8")) { + out_charset = C_UTF_8; + return out_charset; + } + } + + out_charset = C_AUTO; +#else + cur_charset = conv_get_current_charset(); + switch (cur_charset) { + case C_EUC_JP: + case C_SHIFT_JIS: + out_charset = C_ISO_2022_JP; + break; + default: + out_charset = cur_charset; + } +#endif + + return out_charset; +} + +const gchar *conv_get_outgoing_charset_str(void) +{ + CharSet out_charset; + const gchar *str; + + if (prefs_common.outgoing_charset) { + if (!isalpha(prefs_common.outgoing_charset[0])) { + g_free(prefs_common.outgoing_charset); + prefs_common.outgoing_charset = g_strdup(CS_AUTO); + } else if (strcmp(prefs_common.outgoing_charset, CS_AUTO) != 0) + return prefs_common.outgoing_charset; + } + + out_charset = conv_get_outgoing_charset(); + str = conv_get_charset_str(out_charset); + + return str ? str : "US-ASCII"; +} + +void conv_unmime_header_overwrite(gchar *str) +{ + gchar *buf; + gint outlen; + CharSet cur_charset; + + cur_charset = conv_get_current_charset(); + +#if HAVE_LIBJCONV + Xstrdup_a(buf, str, {return;}); + outlen = strlen(str) + 1; + UnMimeHeaderConv(buf, str, outlen); + if (cur_charset == C_EUC_JP) + conv_unreadable_eucjp(str); +#else + if (cur_charset == C_EUC_JP) { + gchar *tmp; + gint len; + + Xstrdup_a(buf, str, {return;}); + outlen = strlen(str) + 1; + UnMimeHeader(buf); + len = strlen(buf) * 2 + 1; + Xalloca(tmp, len, {strncpy2(str, buf, outlen); return;}); + conv_jistodisp(tmp, len, buf); + strncpy2(str, tmp, outlen); + } else + UnMimeHeader(str); +#endif +} + +void conv_unmime_header(gchar *outbuf, gint outlen, const gchar *str, + const gchar *charset) +{ + gchar *buf; + CharSet cur_charset; + + Xstrdup_a(buf, str, {return;}); + cur_charset = conv_get_current_charset(); + +#if HAVE_LIBJCONV + UnMimeHeaderConv(buf, outbuf, outlen); + if (cur_charset == C_EUC_JP) + conv_unreadable_eucjp(outbuf); +#else + UnMimeHeader(buf); + if (cur_charset == C_EUC_JP) { + gchar *tmp; + gint len; + + len = strlen(buf) * 2 + 1; + Xalloca(tmp, len, {strncpy2(outbuf, buf, outlen); return;}); + conv_jistodisp(tmp, len, buf); + strncpy2(outbuf, tmp, outlen); + } else + strncpy2(outbuf, buf, outlen); +#endif +} + +#define MAX_ENCLEN 75 +#define MAX_LINELEN 76 + +#define B64LEN(len) ((len) / 3 * 4 + ((len) % 3 ? 4 : 0)) + +#if HAVE_LIBJCONV +void conv_encode_header(gchar *dest, gint len, const gchar *src, + gint header_len) +{ + wchar_t *wsrc; + wchar_t *wsrcp; + gchar *destp; + size_t line_len, mimehdr_len, mimehdr_begin_len; + gchar *mimehdr_init = "=?"; + gchar *mimehdr_end = "?="; + gchar *mimehdr_enctype = "?B?"; + const gchar *mimehdr_charset; + + //g_print("src = %s\n", src); + mimehdr_charset = conv_get_outgoing_charset_str(); + + /* convert to wide-character string */ + wsrcp = wsrc = strdup_mbstowcs(src); + + mimehdr_len = strlen(mimehdr_init) + strlen(mimehdr_end) + + strlen(mimehdr_charset) + strlen(mimehdr_enctype); + mimehdr_begin_len = strlen(mimehdr_init) + + strlen(mimehdr_charset) + strlen(mimehdr_enctype); + //line_len = 1; + line_len = header_len; + destp = dest; + *dest = '\0'; + + g_return_if_fail(wsrc != NULL); + + while (*wsrcp) { + wchar_t *wp, *wtmp, *wtmpp; + gint nspc = 0; + + /* irresponsible buffer overrun check */ + if ((len - (destp - dest)) < (MAX_LINELEN + 1) * 2) break; + + /* encode string including space + if non-ASCII string follows */ + if (is_next_nonascii(wsrcp)) { + wp = wsrcp; + while ((wp = find_wspace(wp)) != NULL) + if (!is_next_nonascii(wp)) break; + } else + wp = find_wspace(wsrcp); + + if (wp != NULL) { + wtmp = wcsndup(wsrcp, wp - wsrcp); + wsrcp = wp + 1; + while (iswspace(wsrcp[nspc])) nspc++; + } else { + wtmp = wcsdup(wsrcp); + wsrcp += wcslen(wsrcp); + } + + wtmpp = wtmp; + + do { + gint tlen = 0, str_ascii = 1; + gchar *tmp; /* internal codeset */ + gchar *raw; /* converted, but not base64 encoded */ + register gchar *tmpp; + gint raw_len; + + tmpp = tmp = g_malloc(wcslen(wtmpp) * MB_CUR_MAX + 1); + *tmp = '\0'; + raw = g_strdup(""); + raw_len = 0; + + while (*wtmpp != (wchar_t)0) { + gint mbl; + gint dummy; + gchar *raw_new = NULL; + int raw_new_len = 0; + const gchar *src_codeset; + + if (*wtmpp < 32 || *wtmpp >= 127) + str_ascii = 0; + mbl = wctomb(tmpp, *wtmpp); + if (mbl == -1) { + g_warning("invalid wide character\n"); + continue; + } + /* g_free(raw); */ + src_codeset = conv_get_current_charset_str(); + //printf ("tmp = %s, tlen = %d, mbl\n", + // tmp, tlen, mbl); + if (jconv_alloc_conv(tmp, tlen + mbl, + &raw_new, &raw_new_len, + &src_codeset, 1, + &dummy, mimehdr_charset) + != 0) { + g_warning("can't convert\n"); + tmpp[0] = '\0'; + continue; + } + if (!str_ascii) { + gint dlen = mimehdr_len + + B64LEN(raw_len); + if ((line_len + dlen + + (*(wtmpp + 1) ? 0 : nspc) + + (line_len > 1 ? 1 : 0)) + > MAX_LINELEN) { + g_free(raw_new); + if (tlen == 0) { + *destp++ = '\n'; + *destp++ = ' '; + line_len = 1; + str_ascii = 1; + continue; + } else { + *tmpp = '\0'; + break; + } + } + } else { + if ((line_len + tlen + mbl + + (*(wtmpp + 1) ? 0 : nspc) + + (line_len > 1 ? 1 : 0)) + > MAX_LINELEN) { + g_free(raw_new); + if (1 + tlen + mbl + + (*(wtmpp + 1) ? 0 : nspc) + >= MAX_LINELEN) { + *tmpp = '\0'; + break; + } + *destp++ = '\n'; + *destp++ = ' '; + line_len = 1; + continue; + } + } + + tmpp += mbl; + *tmpp = '\0'; + + tlen += mbl; + + g_free(raw); + raw = raw_new; + raw_len = raw_new_len; + + wtmpp++; + } + //g_print("tmp = %s, tlen = %d, mb_seqlen = %d\n", + // tmp, tlen, mb_seqlen); + + if (tlen == 0 || raw_len == 0) { + g_free(tmp); + g_free(raw); + continue; + } + + if (line_len > 1 && destp > dest) { + *destp++ = ' '; + *destp = '\0'; + line_len++; + } + + if (!str_ascii) { + g_snprintf(destp, len - strlen(dest), "%s%s%s", + mimehdr_init, mimehdr_charset, + mimehdr_enctype); + destp += mimehdr_begin_len; + line_len += mimehdr_begin_len; + + to64frombits(destp, raw, raw_len); + line_len += strlen(destp); + destp += strlen(destp); + + strcpy(destp, mimehdr_end); + destp += strlen(mimehdr_end); + line_len += strlen(mimehdr_end); + } else { + strcpy(destp, tmp); + line_len += strlen(destp); + destp += strlen(destp); + } + + g_free(tmp); + g_free(raw); + //g_print("line_len = %d\n\n", line_len); + } while (*wtmpp != (wchar_t)0); + + while (iswspace(*wsrcp)) { + gint mbl; + + mbl = wctomb(destp, *wsrcp++); + if (mbl != -1) { + destp += mbl; + line_len += mbl; + } + } + *destp = '\0'; + + g_free(wtmp); + } + + g_free(wsrc); + + //g_print("dest = %s\n", dest); +} +#else /* !HAVE_LIBJCONV */ + +#define JIS_SEQLEN 3 + +void conv_encode_header(gchar *dest, gint len, const gchar *src, + gint header_len) +{ + wchar_t *wsrc; + wchar_t *wsrcp; + gchar *destp; + size_t line_len, mimehdr_len, mimehdr_begin_len; + gchar *mimehdr_init = "=?"; + gchar *mimehdr_end = "?="; + gchar *mimehdr_enctype = "?B?"; + const gchar *mimehdr_charset; + + //g_print("src = %s\n", src); + mimehdr_charset = conv_get_outgoing_charset_str(); + if (strcmp(mimehdr_charset, "ISO-2022-JP") != 0) { + /* currently only supports Japanese */ + strncpy2(dest, src, len); + return; + } + + /* convert to wide-character string */ + wsrcp = wsrc = strdup_mbstowcs(src); + + mimehdr_len = strlen(mimehdr_init) + strlen(mimehdr_end) + + strlen(mimehdr_charset) + strlen(mimehdr_enctype); + mimehdr_begin_len = strlen(mimehdr_init) + + strlen(mimehdr_charset) + strlen(mimehdr_enctype); + //line_len = 1; + line_len = header_len; + destp = dest; + *dest = '\0'; + + g_return_if_fail(wsrc != NULL); + + while (*wsrcp) { + wchar_t *wp, *wtmp, *wtmpp; + gint nspc = 0; + + /* irresponsible buffer overrun check */ + if ((len - (destp - dest)) < (MAX_LINELEN + 1) * 2) break; + + /* encode string including space + if non-ASCII string follows */ + if (is_next_nonascii(wsrcp)) { + wp = wsrcp; + while ((wp = find_wspace(wp)) != NULL) + if (!is_next_nonascii(wp)) break; + } else + wp = find_wspace(wsrcp); + + if (wp != NULL) { + wtmp = wcsndup(wsrcp, wp - wsrcp); + wsrcp = wp + 1; + while (iswspace(wsrcp[nspc])) nspc++; + } else { + wtmp = wcsdup(wsrcp); + wsrcp += wcslen(wsrcp); + } + + wtmpp = wtmp; + + do { + gint prev_mbl = 1, tlen = 0, mb_seqlen = 0; + gchar *tmp; + register gchar *tmpp; + + tmpp = tmp = g_malloc(wcslen(wtmpp) * MB_CUR_MAX + 1); + *tmp = '\0'; + + while (*wtmpp != (wchar_t)0) { + gint mbl; + + mbl = wctomb(tmpp, *wtmpp); + if (mbl == -1) { + g_warning("invalid wide character\n"); + wtmpp++; + continue; + } + + /* length of KI + KO */ + if (prev_mbl == 1 && mbl == 2) + mb_seqlen += JIS_SEQLEN * 2; + + if (mb_seqlen) { + gint dlen = mimehdr_len + + B64LEN(tlen + mb_seqlen + mbl); + + if ((line_len + dlen + + (*(wtmpp + 1) ? 0 : nspc) + + (line_len > 1 ? 1 : 0)) + > MAX_LINELEN) { + if (tlen == 0) { + *destp++ = '\n'; + *destp++ = ' '; + line_len = 1; + mb_seqlen = 0; + continue; + } else { + *tmpp = '\0'; + break; + } + } + } else { + if ((line_len + tlen + mbl + + (*(wtmpp + 1) ? 0 : nspc) + + (line_len > 1 ? 1 : 0)) + > MAX_LINELEN) { + if (1 + tlen + mbl + + (*(wtmpp + 1) ? 0 : nspc) + >= MAX_LINELEN) { + *tmpp = '\0'; + break; + } + *destp++ = '\n'; + *destp++ = ' '; + line_len = 1; + continue; + } + } + + tmpp += mbl; + *tmpp = '\0'; + + tlen += mbl; + prev_mbl = mbl; + + wtmpp++; + } + //g_print("tmp = %s, tlen = %d, mb_seqlen = %d\n", + // tmp, tlen, mb_seqlen); + + if (tlen == 0) { + g_free(tmp); + continue; + } + + if (line_len > 1 && destp > dest) { + *destp++ = ' '; + *destp = '\0'; + line_len++; + } + + if (mb_seqlen) { + gchar *tmp_jis; + + tmp_jis = g_new(gchar, tlen + mb_seqlen + 1); + conv_euctojis(tmp_jis, + tlen + mb_seqlen + 1, tmp); + g_snprintf(destp, len - strlen(dest), "%s%s%s", + mimehdr_init, mimehdr_charset, + mimehdr_enctype); + destp += mimehdr_begin_len; + line_len += mimehdr_begin_len; + + to64frombits(destp, tmp_jis, strlen(tmp_jis)); + line_len += strlen(destp); + destp += strlen(destp); + + strcpy(destp, mimehdr_end); + destp += strlen(mimehdr_end); + line_len += strlen(mimehdr_end); + + g_free(tmp_jis); + } else { + strcpy(destp, tmp); + line_len += strlen(destp); + destp += strlen(destp); + } + + g_free(tmp); + //g_print("line_len = %d\n\n", line_len); + } while (*wtmpp != (wchar_t)0); + + while (iswspace(*wsrcp)) { + gint mbl; + + mbl = wctomb(destp, *wsrcp++); + if (mbl != -1) { + destp += mbl; + line_len += mbl; + } + } + *destp = '\0'; + + g_free(wtmp); + } + + g_free(wsrc); + + //g_print("dest = %s\n", dest); +} +#endif /* HAVE_LIBJCONV */ diff --git a/src/codeconv.h b/src/codeconv.h new file mode 100644 index 000000000..897d0cf43 --- /dev/null +++ b/src/codeconv.h @@ -0,0 +1,155 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __CODECONV_H__ +#define __CODECONV_H__ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> + +#if HAVE_LIBJCONV +# include <jconv.h> +#endif + +typedef struct _CodeConverter CodeConverter; + +typedef enum +{ + C_AUTO, + C_US_ASCII, + C_UTF_8, + C_ISO_8859_1, + C_ISO_8859_2, + C_ISO_8859_4, + C_ISO_8859_5, + C_ISO_8859_7, + C_ISO_8859_8, + C_ISO_8859_9, + C_ISO_8859_13, + C_ISO_8859_15, + C_BALTIC, + C_CP1251, + C_WINDOWS_1251, + C_KOI8_R, + C_KOI8_U, + C_ISO_2022_JP, + C_ISO_2022_JP_2, + C_EUC_JP, + C_SHIFT_JIS, + C_ISO_2022_KR, + C_EUC_KR, + C_ISO_2022_CN, + C_EUC_CN, + C_GB2312, + C_EUC_TW, + C_BIG5 +} CharSet; + +typedef void (*CodeConvFunc) (gchar *outbuf, gint outlen, const gchar *inbuf); + +struct _CodeConverter +{ +#if !HAVE_LIBJCONV + CodeConvFunc code_conv_func; +#endif + gchar *charset_str; + CharSet charset; +}; + +#define CS_AUTO "AUTO" +#define CS_US_ASCII "US-ASCII" +#define CS_UTF_8 "UTF-8" +#define CS_ISO_8859_1 "ISO-8859-1" +#define CS_ISO_8859_2 "ISO-8859-2" +#define CS_ISO_8859_4 "ISO-8859-4" +#define CS_ISO_8859_5 "ISO-8859-5" +#define CS_ISO_8859_7 "ISO-8859-7" +#define CS_ISO_8859_8 "ISO-8859-8" +#define CS_ISO_8859_9 "ISO-8859-9" +#define CS_ISO_8859_13 "ISO-8859-13" +#define CS_ISO_8859_15 "ISO-8859-15" +#define CS_BALTIC "BALTIC" +#define CS_CP1251 "CP1251" +#define CS_WINDOWS_1251 "Windows-1251" +#define CS_KOI8_R "KOI8-R" +#define CS_KOI8_U "KOI8-U" +#define CS_ISO_2022_JP "ISO-2022-JP" +#define CS_ISO_2022_JP_2 "ISO-2022-JP-2" +#define CS_EUC_JP "EUC-JP" +#define CS_SHIFT_JIS "Shift_JIS" +#define CS_ISO_2022_KR "ISO-2022-KR" +#define CS_EUC_KR "EUC-KR" +#define CS_ISO_2022_CN "ISO-2022-CN" +#define CS_EUC_CN "EUC-CN" +#define CS_GB2312 "GB2312" +#define CS_EUC_TW "EUC-TW" +#define CS_BIG5 "Big5" + +void conv_jistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_euctojis(gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_sjistoeuc(gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_anytoeuc(gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_anytojis(gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_unreadable_eucjp(gchar *str); +void conv_unreadable_8bit(gchar *str); +void conv_unreadable_latin(gchar *str); +void conv_mb_alnum(gchar *str); + +void conv_jistodisp (gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_sjistodisp (gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_euctodisp (gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_ustodisp (gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_latintodisp(gchar *outbuf, gint outlen, const gchar *inbuf); +void conv_noconv (gchar *outbuf, gint outlen, const gchar *inbuf); + +CodeConverter *conv_code_converter_new (const gchar *charset); +void conv_code_converter_destroy (CodeConverter *conv); +gint conv_convert (CodeConverter *conv, + gchar *outbuf, + gint outlen, + const gchar *inbuf); + +gchar *conv_codeset_strdup(const gchar *inbuf, + const gchar *src_codeset, + const gchar *dest_codeset); + +CodeConvFunc conv_get_code_conv_func(const gchar *charset); + +const gchar *conv_get_charset_str (CharSet charset); +CharSet conv_get_charset_from_str (const gchar *charset); +CharSet conv_get_current_charset (void); +const gchar *conv_get_current_charset_str (void); +CharSet conv_get_outgoing_charset (void); +const gchar *conv_get_outgoing_charset_str (void); + +void conv_unmime_header_overwrite (gchar *str); +void conv_unmime_header (gchar *outbuf, + gint outlen, + const gchar *str, + const gchar *charset); +void conv_encode_header (gchar *dest, + gint len, + const gchar *src, + gint header_len); + + +#endif /* __CODECONV_H__ */ diff --git a/src/compose.c b/src/compose.c new file mode 100644 index 000000000..9a0a68631 --- /dev/null +++ b/src/compose.c @@ -0,0 +1,4014 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkmenuitem.h> +#include <gtk/gtkitemfactory.h> +#include <gtk/gtkcheckmenuitem.h> +#include <gtk/gtkoptionmenu.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkclist.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkvpaned.h> +#include <gtk/gtktext.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkeditable.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkcontainer.h> +#include <gtk/gtkhandlebox.h> +#include <gtk/gtktoolbar.h> +#include <gtk/gtktable.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkthemes.h> +#include <gtk/gtkdnd.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <unistd.h> +#include <time.h> +/* #include <sys/utsname.h> */ +#include <stdlib.h> +#include <sys/wait.h> +#include <signal.h> +#include <errno.h> + +#if (HAVE_WCTYPE_H && HAVE_WCHAR_H) +# include <wchar.h> +# include <wctype.h> +#endif + +#include "intl.h" +#include "main.h" +#include "mainwindow.h" +#include "compose.h" +#include "addressbook.h" +#include "folderview.h" +#include "procmsg.h" +#include "menu.h" +#include "send.h" +#include "news.h" +#include "prefs_common.h" +#include "prefs_account.h" +#include "account.h" +#include "filesel.h" +#include "procheader.h" +#include "procmime.h" +#include "statusbar.h" +#include "about.h" +#include "base64.h" +#include "codeconv.h" +#include "utils.h" +#include "gtkutils.h" +#include "socket.h" +#include "alertpanel.h" +#include "manage_window.h" +#include "gtkshruler.h" +#include "folder.h" +#include "addr_compl.h" + +#if USE_GPGME +# include "rfc2015.h" +#endif + +typedef enum +{ + COL_MIMETYPE = 0, + COL_SIZE = 1, + COL_NAME = 2 +} AttachColumnPos; + +#define N_ATTACH_COLS 3 + +#define B64_LINE_SIZE 57 +#define B64_BUFFSIZE 77 + +#define MAX_REFERENCES_LEN 999 + +static GdkColor quote_color = {0, 0, 0, 0xbfff}; + +static GList *compose_list = NULL; + +static Compose *compose_create (PrefsAccount *account); +static void compose_toolbar_create (Compose *compose, + GtkWidget *container); +static GtkWidget *compose_account_option_menu_create + (Compose *compose); +static void compose_destroy (Compose *compose); + +static gint compose_parse_header (Compose *compose, + MsgInfo *msginfo); +static gchar *compose_parse_references (const gchar *ref, + const gchar *msgid); +static void compose_quote_file (Compose *compose, + MsgInfo *msginfo, + FILE *fp); +static gchar *compose_quote_parse_fmt (Compose *compose, + MsgInfo *msginfo, + const gchar *fmt); +static void compose_reply_set_entry (Compose *compose, + MsgInfo *msginfo, + gboolean to_all); +static void compose_reedit_set_entry (Compose *compose, + MsgInfo *msginfo); +static void compose_insert_sig (Compose *compose); +static void compose_insert_file (Compose *compose, + const gchar *file); +static void compose_attach_append (Compose *compose, + const gchar *file, + ContentType cnttype); +static void compose_wrap_line (Compose *compose); +static void compose_set_title (Compose *compose); + +static gint compose_send (Compose *compose); +static gint compose_write_to_file (Compose *compose, + const gchar *file, + gboolean is_draft); +static gint compose_write_body_to_file (Compose *compose, + const gchar *file); +static gint compose_save_to_outbox (Compose *compose, + const gchar *file); +static gint compose_queue (Compose *compose, + const gchar *file); +static void compose_write_attach (Compose *compose, + FILE *fp); +static gint compose_write_headers (Compose *compose, + FILE *fp, + const gchar *charset, + EncodingType encoding, + gboolean is_draft); + +static void compose_convert_header (gchar *dest, + gint len, + gchar *src, + gint header_len); +static void compose_generate_msgid (Compose *compose, + gchar *buf, + gint len); + +static void compose_attach_info_free (AttachInfo *ainfo); +static void compose_attach_remove_selected (Compose *compose); + +static void compose_attach_property (Compose *compose); +static void compose_attach_property_create (gboolean *cancelled); +static void attach_property_ok (GtkWidget *widget, + gboolean *cancelled); +static void attach_property_cancel (GtkWidget *widget, + gboolean *cancelled); +static gint attach_property_delete_event (GtkWidget *widget, + GdkEventAny *event, + gboolean *cancelled); +static void attach_property_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gboolean *cancelled); + +static void compose_exec_ext_editor (Compose *compose); +static gint compose_exec_ext_editor_real (const gchar *file); +static gboolean compose_ext_editor_kill (Compose *compose); +static void compose_input_cb (gpointer data, + gint source, + GdkInputCondition condition); +static void compose_set_ext_editor_sensitive (Compose *compose, + gboolean sensitive); + +static gint calc_cursor_xpos (GtkText *text, + gint extra, + gint char_width); + +/* callback functions */ + +static gboolean compose_edit_size_alloc (GtkEditable *widget, + GtkAllocation *allocation, + GtkSHRuler *shruler); + +static void toolbar_send_cb (GtkWidget *widget, + gpointer data); +static void toolbar_send_later_cb (GtkWidget *widget, + gpointer data); +static void toolbar_draft_cb (GtkWidget *widget, + gpointer data); +static void toolbar_insert_cb (GtkWidget *widget, + gpointer data); +static void toolbar_attach_cb (GtkWidget *widget, + gpointer data); +static void toolbar_sig_cb (GtkWidget *widget, + gpointer data); +static void toolbar_ext_editor_cb (GtkWidget *widget, + gpointer data); +static void toolbar_linewrap_cb (GtkWidget *widget, + gpointer data); +static void toolbar_address_cb (GtkWidget *widget, + gpointer data); + +static void account_activated (GtkMenuItem *menuitem, + gpointer data); + +static void attach_selected (GtkCList *clist, + gint row, + gint column, + GdkEvent *event, + gpointer data); +static void attach_button_pressed (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void attach_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); + +static void compose_send_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_send_later_cb (gpointer data, + guint action, + GtkWidget *widget); + +static void compose_draft_cb (gpointer data, + guint action, + GtkWidget *widget); + +static void compose_attach_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_insert_file_cb (gpointer data, + guint action, + GtkWidget *widget); + +static void compose_close_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_address_cb (gpointer data, + guint action, + GtkWidget *widget); + +static void compose_ext_editor_cb (gpointer data, + guint action, + GtkWidget *widget); + +static gint compose_delete_cb (GtkWidget *widget, + GdkEventAny *event, + gpointer data); +static void compose_destroy_cb (GtkWidget *widget, + Compose *compose); + +static void compose_cut_cb (Compose *compose); +static void compose_copy_cb (Compose *compose); +static void compose_paste_cb (Compose *compose); +static void compose_allsel_cb (Compose *compose); + +static void compose_grab_focus_cb (GtkWidget *widget, + Compose *compose); + +static void compose_changed_cb (GtkEditable *editable, + Compose *compose); +static void compose_button_press_cb (GtkWidget *widget, + GdkEventButton *event, + Compose *compose); +#if 0 +static void compose_key_press_cb (GtkWidget *widget, + GdkEventKey *event, + Compose *compose); +#endif + +static void compose_toggle_to_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_cc_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_bcc_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_replyto_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_followupto_cb(gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_attach_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_ruler_cb (gpointer data, + guint action, + GtkWidget *widget); +#if USE_GPGME +static void compose_toggle_sign_cb (gpointer data, + guint action, + GtkWidget *widget); +static void compose_toggle_encrypt_cb (gpointer data, + guint action, + GtkWidget *widget); +#endif + +static void compose_attach_drag_received_cb (GtkWidget *widget, + GdkDragContext *drag_context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer user_data); +static void compose_insert_drag_received_cb (GtkWidget *widget, + GdkDragContext *drag_context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer user_data); + +static void to_activated (GtkWidget *widget, + Compose *compose); +static void newsgroups_activated (GtkWidget *widget, + Compose *compose); +static void subject_activated (GtkWidget *widget, + Compose *compose); +static void cc_activated (GtkWidget *widget, + Compose *compose); +static void bcc_activated (GtkWidget *widget, + Compose *compose); +static void replyto_activated (GtkWidget *widget, + Compose *compose); +static void followupto_activated (GtkWidget *widget, + Compose *compose); + +static GtkItemFactoryEntry compose_popup_entries[] = +{ + {N_("/_Add..."), NULL, compose_attach_cb, 0, NULL}, + {N_("/_Remove"), NULL, compose_attach_remove_selected, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Property..."), NULL, compose_attach_property, 0, NULL} +}; + +static GtkItemFactoryEntry compose_entries[] = +{ + {N_("/_File"), NULL, NULL, 0, "<Branch>"}, + {N_("/_File/_Attach file"), "<control>M", compose_attach_cb, 0, NULL}, + {N_("/_File/_Insert file"), "<control>I", compose_insert_file_cb, 0, NULL}, + {N_("/_File/Insert si_gnature"), "<control>G", compose_insert_sig, 0, NULL}, + {N_("/_File/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_File/_Close"), "<alt>W", compose_close_cb, 0, NULL}, + + {N_("/_Edit"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Edit/_Undo"), "<control>Z", NULL, 0, NULL}, + {N_("/_Edit/_Redo"), "<control>Y", NULL, 0, NULL}, + {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Edit/Cu_t"), "<control>X", compose_cut_cb, 0, NULL}, + {N_("/_Edit/_Copy"), "<control>C", compose_copy_cb, 0, NULL}, + {N_("/_Edit/_Paste"), "<control>V", compose_paste_cb, 0, NULL}, + {N_("/_Edit/Select _all"), "<control>A", compose_allsel_cb, 0, NULL}, + {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Edit/Wrap long _lines"), "<alt>L", compose_wrap_line, 0, NULL}, + {N_("/_Edit/Edit with e_xternal editor"), "<alt>X", + compose_ext_editor_cb, 0, NULL}, + + {N_("/_Message"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Message/_Send"), "<shift><control>S", + compose_send_cb, 0, NULL}, + {N_("/_Message/Send _later"), "<shift><alt>S", + compose_send_later_cb, 0, NULL}, + {N_("/_Message/Save to _draft folder"), + "<alt>D", compose_draft_cb, 0, NULL}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/_To"), NULL, compose_toggle_to_cb, 0, "<ToggleItem>"}, + {N_("/_Message/_Cc"), NULL, compose_toggle_cc_cb, 0, "<ToggleItem>"}, + {N_("/_Message/_Bcc"), NULL, compose_toggle_bcc_cb, 0, "<ToggleItem>"}, + {N_("/_Message/_Reply to"), NULL, compose_toggle_replyto_cb, 0, "<ToggleItem>"}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/_Followup to"), NULL, compose_toggle_followupto_cb, 0, "<ToggleItem>"}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/_Attach"), NULL, compose_toggle_attach_cb, 0, "<ToggleItem>"}, +#if USE_GPGME + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/Si_gn"), NULL, compose_toggle_sign_cb, 0, "<ToggleItem>"}, + {N_("/_Message/_Encrypt"), NULL, compose_toggle_encrypt_cb, 0, "<ToggleItem>"}, +#endif /* USE_GPGME */ + {N_("/_Tool"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Tool/Show _ruler"), NULL, compose_toggle_ruler_cb, 0, "<ToggleItem>"}, + {N_("/_Tool/_Address book"), "<alt>A", compose_address_cb, 0, NULL}, + {N_("/_Help"), NULL, NULL, 0, "<LastBranch>"}, + {N_("/_Help/_About"), NULL, about_show, 0, NULL} +}; + +static GtkTargetEntry compose_mime_types[] = +{ + {"text/uri-list", 0, 0} +}; + +void compose_new(PrefsAccount *account) +{ + compose_new_with_recipient(account, NULL); +} + +void compose_new_with_recipient(PrefsAccount *account, const gchar *to) +{ + Compose *compose; + + if (!account) account = cur_account; + g_return_if_fail(account != NULL); + + compose = compose_create(account); + compose->mode = COMPOSE_NEW; + + if (prefs_common.auto_sig) + compose_insert_sig(compose); + gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); + gtk_text_set_point(GTK_TEXT(compose->text), 0); + + if (account->protocol != A_NNTP) { + if (to) { + compose_entry_append(compose, to, COMPOSE_TO); + gtk_widget_grab_focus(compose->subject_entry); + } else + gtk_widget_grab_focus(compose->to_entry); + } else + gtk_widget_grab_focus(compose->newsgroups_entry); +} + +void compose_reply(MsgInfo *msginfo, gboolean quote, gboolean to_all) +{ + Compose *compose; + PrefsAccount *account; + GtkText *text; + + g_return_if_fail(msginfo != NULL); + g_return_if_fail(msginfo->folder != NULL); + + account = msginfo->folder->folder->account; + if (!account) account = cur_account; + g_return_if_fail(account != NULL); + + MSG_UNSET_FLAGS(msginfo->flags, MSG_FORWARDED); + MSG_SET_FLAGS(msginfo->flags, MSG_REPLIED); + + compose = compose_create(account); + compose->mode = COMPOSE_REPLY; + + if (compose_parse_header(compose, msginfo) < 0) return; + compose_reply_set_entry(compose, msginfo, to_all); + + text = GTK_TEXT(compose->text); + gtk_text_freeze(text); + + if (quote) { + FILE *fp; + gchar *quote_str; + + if ((fp = procmime_get_text_part(msginfo)) == NULL) + g_warning(_("Can't get text part\n")); + else { + quote_str = compose_quote_parse_fmt + (compose, msginfo, prefs_common.quotefmt); + gtk_text_insert(text, NULL, NULL, NULL, quote_str, -1); + g_free(quote_str); + compose_quote_file(compose, msginfo, fp); + fclose(fp); + } + } + + if (prefs_common.auto_sig) + compose_insert_sig(compose); + gtk_editable_set_position(GTK_EDITABLE(text), 0); + gtk_text_set_point(text, 0); + + gtk_text_thaw(text); + gtk_widget_grab_focus(compose->text); +} + +#define INSERT_FW_HEADER(var, hdr) \ +if (msginfo->var && *msginfo->var) { \ + gtk_text_insert(text, NULL, NULL, NULL, hdr, -1); \ + gtk_text_insert(text, NULL, NULL, NULL, msginfo->var, -1); \ + gtk_text_insert(text, NULL, NULL, NULL, "\n", 1); \ +} + +void compose_forward(MsgInfo *msginfo, gboolean as_attach) +{ + Compose *compose; + PrefsAccount *account; + GtkText *text; + FILE *fp; + gchar buf[BUFFSIZE]; + + g_return_if_fail(msginfo != NULL); + g_return_if_fail(msginfo->folder != NULL); + + account = msginfo->folder->folder->account; + if (!account) account = cur_account; + g_return_if_fail(account != NULL); + + MSG_UNSET_FLAGS(msginfo->flags, MSG_REPLIED); + MSG_SET_FLAGS(msginfo->flags, MSG_FORWARDED); + + compose = compose_create(account); + compose->mode = COMPOSE_FORWARD; + + if (msginfo->subject && *msginfo->subject) { + gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), "Fw: "); + gtk_entry_append_text(GTK_ENTRY(compose->subject_entry), + msginfo->subject); + } + + text = GTK_TEXT(compose->text); + gtk_text_freeze(text); + + if (as_attach) { + gchar *msgfile; + + msgfile = procmsg_get_message_file_path(msginfo); + if (!is_file_exist(msgfile)) + g_warning(_("%s: file not exist\n"), msgfile); + else + compose_attach_append(compose, msgfile, + MIME_MESSAGE_RFC822); + + g_free(msgfile); + } else { + if ((fp = procmime_get_text_part(msginfo)) == NULL) + g_warning(_("Can't get text part\n")); + else { + /* insert header */ + gtk_text_insert(text, NULL, NULL, NULL, + _("\n\nBegin forwarded message:\n\n"), -1); + INSERT_FW_HEADER(date, "Date: "); + INSERT_FW_HEADER(from, "From: "); + INSERT_FW_HEADER(to, "To: "); + INSERT_FW_HEADER(newsgroups, "Newsgroups: "); + INSERT_FW_HEADER(subject, "Subject: "); + gtk_text_insert(text, NULL, NULL, NULL, "\n\n", 2); + + /* forward body */ + while (fgets(buf, sizeof(buf), fp) != NULL) + gtk_text_insert(text, NULL, NULL, NULL, + buf, -1); + fclose(fp); + } + } + + if (prefs_common.auto_sig) + compose_insert_sig(compose); + gtk_editable_set_position(GTK_EDITABLE(compose->text), 0); + gtk_text_set_point(GTK_TEXT(compose->text), 0); + + gtk_text_thaw(text); + if (account->protocol != A_NNTP) + gtk_widget_grab_focus(compose->to_entry); + else + gtk_widget_grab_focus(compose->newsgroups_entry); +} + +void compose_reedit(MsgInfo *msginfo) +{ + Compose *compose; + PrefsAccount *account; + GtkText *text; + FILE *fp; + gchar buf[BUFFSIZE]; + + g_return_if_fail(msginfo != NULL); + g_return_if_fail(msginfo->folder != NULL); + + account = msginfo->folder->folder->account; + if (!account) account = cur_account; + g_return_if_fail(account != NULL); + + compose = compose_create(account); + compose->mode = COMPOSE_REEDIT_DRAFT; + compose->targetinfo = procmsg_msginfo_copy(msginfo); + + if (compose_parse_header(compose, msginfo) < 0) return; + compose_reedit_set_entry(compose, msginfo); + + text = GTK_TEXT(compose->text); + gtk_text_freeze(text); + + if ((fp = procmime_get_text_part(msginfo)) == NULL) + g_warning(_("Can't get text part\n")); + else { + while (fgets(buf, sizeof(buf), fp) != NULL) + gtk_text_insert(text, NULL, NULL, NULL, buf, -1); + fclose(fp); + } + + gtk_text_thaw(text); + gtk_widget_grab_focus(compose->text); +} + +GList *compose_get_compose_list(void) +{ + return compose_list; +} + +void compose_entry_append(Compose *compose, const gchar *address, + ComposeEntryType type) +{ + GtkEntry *entry; + const gchar *text; + + if (!address || *address == '\0') return; + + switch (type) { + case COMPOSE_CC: + entry = GTK_ENTRY(compose->cc_entry); + break; + case COMPOSE_BCC: + entry = GTK_ENTRY(compose->bcc_entry); + break; + case COMPOSE_TO: + default: + entry = GTK_ENTRY(compose->to_entry); + break; + } + + text = gtk_entry_get_text(entry); + if (*text != '\0') + gtk_entry_append_text(entry, ", "); + gtk_entry_append_text(entry, address); +} + +static gint compose_parse_header(Compose *compose, MsgInfo *msginfo) +{ + static HeaderEntry hentry[] = {{"Reply-To:", NULL, TRUE}, + {"Cc:", NULL, FALSE}, + {"References:", NULL, FALSE}, + {"Bcc:", NULL, FALSE}, + {"Newsgroups:", NULL, FALSE}, + {"Followup-To:", NULL, FALSE}, + {NULL, NULL, FALSE}}; + + enum + { + H_REPLY_TO = 0, + H_CC = 1, + H_REFERENCES = 2, + H_BCC = 3, + H_NEWSGROUPS = 4, + H_FOLLOWUP_TO = 5 + }; + + FILE *fp; + + g_return_val_if_fail(msginfo != NULL, -1); + + if ((fp = procmsg_open_message(msginfo)) == NULL) return -1; + procheader_get_header_fields(fp, hentry); + fclose(fp); + + if (hentry[H_REPLY_TO].body != NULL) { + conv_unmime_header_overwrite(hentry[H_REPLY_TO].body); + compose->replyto = hentry[H_REPLY_TO].body; + hentry[H_REPLY_TO].body = NULL; + } + if (hentry[H_CC].body != NULL) { + conv_unmime_header_overwrite(hentry[H_CC].body); + compose->cc = hentry[H_CC].body; + hentry[H_CC].body = NULL; + } + if (hentry[H_REFERENCES].body != NULL) { + if (compose->mode == COMPOSE_REEDIT_DRAFT) + compose->references = hentry[H_REFERENCES].body; + else { + compose->references = compose_parse_references + (hentry[H_REFERENCES].body, msginfo->msgid); + g_free(hentry[H_REFERENCES].body); + } + hentry[H_REFERENCES].body = NULL; + } + if (hentry[H_BCC].body != NULL) { + if (compose->mode == COMPOSE_REEDIT_DRAFT) { + conv_unmime_header_overwrite(hentry[H_BCC].body); + compose->bcc = hentry[H_BCC].body; + } else + g_free(hentry[H_BCC].body); + hentry[H_BCC].body = NULL; + } + if (hentry[H_NEWSGROUPS].body != NULL) { + compose->newsgroups = hentry[H_NEWSGROUPS].body; + hentry[H_NEWSGROUPS].body = NULL; + } + if (hentry[H_FOLLOWUP_TO].body != NULL) { + conv_unmime_header_overwrite(hentry[H_FOLLOWUP_TO].body); + compose->followup_to = hentry[H_FOLLOWUP_TO].body; + hentry[H_FOLLOWUP_TO].body = NULL; + } + + if (compose->mode == COMPOSE_REEDIT_DRAFT && msginfo->inreplyto) + compose->inreplyto = g_strdup(msginfo->inreplyto); + else if (compose->mode != COMPOSE_REEDIT_DRAFT && + msginfo->msgid && *msginfo->msgid) { + compose->inreplyto = g_strdup(msginfo->msgid); + + if (!compose->references) { + if (msginfo->inreplyto && *msginfo->inreplyto) + compose->references = + g_strdup_printf("<%s>\n\t<%s>", + msginfo->inreplyto, + msginfo->msgid); + else + compose->references = + g_strconcat("<", msginfo->msgid, ">", + NULL); + } + } + + return 0; +} + +static gchar *compose_parse_references(const gchar *ref, const gchar *msgid) +{ + GSList *ref_id_list, *cur; + GString *new_ref; + gchar *new_ref_str; + + ref_id_list = references_list_append(NULL, ref); + if (!ref_id_list) return NULL; + if (msgid && *msgid) + ref_id_list = g_slist_append(ref_id_list, g_strdup(msgid)); + + for (;;) { + gint len = 0; + + for (cur = ref_id_list; cur != NULL; cur = cur->next) + /* "<" + Message-ID + ">" + CR+LF+TAB */ + len += strlen((gchar *)cur->data) + 5; + + if (len > MAX_REFERENCES_LEN) { + /* remove second message-ID */ + if (ref_id_list && ref_id_list->next && + ref_id_list->next->next) { + g_free(ref_id_list->next->data); + ref_id_list = g_slist_remove + (ref_id_list, ref_id_list->next->data); + } else { + slist_free_strings(ref_id_list); + g_slist_free(ref_id_list); + return NULL; + } + } else + break; + } + + new_ref = g_string_new(""); + for (cur = ref_id_list; cur != NULL; cur = cur->next) { + if (new_ref->len > 0) + g_string_append(new_ref, "\n\t"); + g_string_sprintfa(new_ref, "<%s>", (gchar *)cur->data); + } + + slist_free_strings(ref_id_list); + g_slist_free(ref_id_list); + + new_ref_str = new_ref->str; + g_string_free(new_ref, FALSE); + + return new_ref_str; +} + +static void compose_quote_file(Compose *compose, MsgInfo *msginfo, FILE *fp) +{ + GtkText *text = GTK_TEXT(compose->text); + gchar *qmark; + gchar *quote_str; + GdkColor *qcolor = NULL; + gchar buf[BUFFSIZE]; + gint qlen; + gchar *linep, *cur, *leftp; + gint line_len, cur_len; + gint wrap_len; + gint str_len; + gint ch_len; + + /* if (prefs_common.enable_color) qcolor = "e_color; */ + if (prefs_common.quotemark && *prefs_common.quotemark) + qmark = prefs_common.quotemark; + else + qmark = "> "; + quote_str = compose_quote_parse_fmt(compose, msginfo, qmark); + g_return_if_fail(quote_str != NULL); + qlen = strlen(quote_str); + + if (!prefs_common.linewrap_quote || + prefs_common.linewrap_len <= qlen) { + while (fgets(buf, sizeof(buf), fp) != NULL) { + gtk_text_insert(text, NULL, qcolor, NULL, + quote_str, -1); + gtk_text_insert(text, NULL, qcolor, NULL, buf, -1); + } + g_free(quote_str); + return; + } + + wrap_len = prefs_common.linewrap_len - qlen; + + while (fgets(buf, sizeof(buf), fp) != NULL) { + strretchomp(buf); + str_len = strlen(buf); + + if (str_len <= wrap_len) { + gtk_text_insert(text, NULL, qcolor, NULL, + quote_str, -1); + gtk_text_insert(text, NULL, qcolor, NULL, buf, -1); + gtk_text_insert(text, NULL, NULL, NULL, "\n", 1); + continue; + } + + linep = cur = leftp = buf; + line_len = cur_len = 0; + + while (*cur != '\0') { + ch_len = mblen(cur, MB_CUR_MAX); + if (ch_len < 0) ch_len = 1; + + if (ch_len == 1 && isspace(*cur)) { + linep = cur + ch_len; + line_len = cur_len + ch_len; + } + + if (cur_len + ch_len > wrap_len && line_len > 0) { + gtk_text_insert(text, NULL, qcolor, NULL, + quote_str, -1); + + if (isspace(*(linep - 1))) + gtk_text_insert(text, NULL, + qcolor, NULL, + leftp, line_len - 1); + else + gtk_text_insert(text, NULL, + qcolor, NULL, + leftp, line_len); + gtk_text_insert(text, NULL, NULL, NULL, + "\n", 1); + + leftp = linep; + cur_len = cur_len - line_len + ch_len; + line_len = 0; + cur += ch_len; + continue; + } + + if (ch_len > 1) { + linep = cur + ch_len; + line_len = cur_len + ch_len; + } + cur_len += ch_len; + cur += ch_len; + } + + if (*leftp) { + gtk_text_insert(text, NULL, qcolor, NULL, + quote_str, -1); + gtk_text_insert(text, NULL, qcolor, NULL, leftp, -1); + gtk_text_insert(text, NULL, NULL, NULL, "\n", 1); + } + } + + g_free(quote_str); +} + +static gchar *compose_quote_parse_fmt(Compose *compose, MsgInfo *msginfo, + const gchar *fmt) +{ + gchar *ext_str; + size_t buf_len = 1024; + size_t ext_len = 0; + gchar *str; + gchar *mbs; + wchar_t *wcsfmt; + wchar_t *sp; + gchar tmp[3]; + + if (!fmt || *fmt == '\0') return 0; + + Xalloca(mbs, sizeof(wchar_t) + 1, return 0); + Xalloca(wcsfmt, (strlen(fmt) + 1) * sizeof(wchar_t), return 0); + mbstowcs(wcsfmt, fmt, strlen(fmt) + 1); + sp = wcsfmt; + + ext_str = g_malloc(sizeof(gchar) * buf_len); + g_return_val_if_fail(ext_str != NULL, NULL); + + while (*sp) { + gint len; + + len = wctomb(mbs, *sp); + mbs[len] = '\0'; + + if (*mbs == '%') { + gchar *p; + + wctomb(mbs, *(++sp)); + str = NULL; + + switch (*mbs) { + case 'd': + str = msginfo->date; + sp++; + break; + case 'f': + str = msginfo->from; + sp++; + break; + case 'I': /* initial */ + if (!msginfo->fromname) {sp++; break;} + p = msginfo->fromname; + tmp[0] = tmp[1] = tmp[2] = '\0'; + + if (*p && isalnum(*p)) + tmp[0] = toupper(*p); + else { + sp++; + break; + } + + while (*p) { + while (*p && !isspace(*p)) p++; + while (*p && isspace(*p)) p++; + if (*p && isalnum(*p)) + tmp[1] = toupper(*p); + } + + if (tmp[1]) str = tmp; + sp++; + break; + case 'n': + str = msginfo->fromname; + sp++; + break; + case 'N': + if (!msginfo->fromname) {sp++; break;} + Xstrdup_a(str, msginfo->fromname, + {sp++; break;}); + p = str; + while (*p && !isspace(*p)) p++; + *p = '\0'; + sp++; + break; + case 's': + str = msginfo->subject; + sp++; + break; + case 't': + str = msginfo->to; + sp++; + break; + case 'i': + if (!msginfo->msgid) {sp++; break;} + Xalloca(str, strlen(msginfo->msgid) + 3, + {sp++; break;}); + g_snprintf(str, strlen(msginfo->msgid) + 3, + "<%s>", msginfo->msgid); + sp++; + break; + case '%': + str = "%"; + sp++; + break; + default: + break; + } + + if (str) { + while (ext_len + strlen(str) + 1 > buf_len) + buf_len += 1024; + ext_str = g_realloc(ext_str, + sizeof(gchar) * buf_len); + g_return_val_if_fail(ext_str != NULL, NULL); + strcpy(ext_str + ext_len, str); + ext_len += strlen(str); + } + } else if (*mbs == '\\') { + wctomb(mbs, *(++sp)); + str = NULL; + + switch (*mbs) { + case 'n': + str = "\n"; + break; + case 't': + str = "\t"; + break; + case '\\': + str = "\\"; + break; + default: + break; + } + + if (str) { + while (ext_len + strlen(str) + 1 > buf_len) + buf_len += 1024; + ext_str = g_realloc(ext_str, + sizeof(gchar) * buf_len); + g_return_val_if_fail(ext_str != NULL, NULL); + strcpy(ext_str + ext_len, str); + ext_len += strlen(str); + sp++; + } + } else { + while (ext_len + len + 1 > buf_len) buf_len += 1024; + ext_str = g_realloc(ext_str, sizeof(gchar) * buf_len); + g_return_val_if_fail(ext_str != NULL, NULL); + strcpy(ext_str + ext_len, mbs); + ext_len += len; + sp++; + } + } + + if (ext_str) + ext_str = g_realloc(ext_str, strlen(ext_str) + 1); + + return ext_str; +} + +static void compose_reply_set_entry(Compose *compose, MsgInfo *msginfo, + gboolean to_all) +{ + GSList *cc_list; + GSList *cur; + gchar *from; + GHashTable *to_table; + + g_return_if_fail(compose->account != NULL); + g_return_if_fail(msginfo != NULL); + + if (compose->account->protocol != A_NNTP) + gtk_entry_set_text(GTK_ENTRY(compose->to_entry), + compose->replyto ? compose->replyto + : msginfo->from ? msginfo->from : ""); + if (compose->account->protocol == A_NNTP) + gtk_entry_set_text(GTK_ENTRY(compose->newsgroups_entry), + compose->followup_to ? compose->followup_to + : compose->newsgroups ? compose->newsgroups + : ""); + + if (msginfo->subject && *msginfo->subject) { + gchar *buf, *buf2, *p; + + buf = g_strdup(msginfo->subject); + while (!strncasecmp(buf, "Re:", 3)) { + p = buf + 3; + while (isspace(*p)) p++; + memmove(buf, p, strlen(p) + 1); + } + + buf2 = g_strdup_printf("Re: %s", buf); + gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), buf2); + g_free(buf2); + g_free(buf); + } else + gtk_entry_set_text(GTK_ENTRY(compose->subject_entry), "Re: "); + + if (!to_all || compose->account->protocol == A_NNTP) return; + + from = g_strdup(compose->replyto ? compose->replyto : + msginfo->from ? msginfo->from : ""); + extract_address(from); + + cc_list = address_list_append(NULL, msginfo->to); + cc_list = address_list_append(cc_list, compose->cc); + + to_table = g_hash_table_new(g_str_hash, g_str_equal); + g_hash_table_insert(to_table, from, GINT_TO_POINTER(1)); + if (compose->account) + g_hash_table_insert(to_table, compose->account->address, + GINT_TO_POINTER(1)); + + /* remove address on To: and that of current account */ + for (cur = cc_list; cur != NULL; ) { + GSList *next = cur->next; + + if (g_hash_table_lookup(to_table, cur->data) != NULL) + cc_list = g_slist_remove(cc_list, cur->data); + else + g_hash_table_insert(to_table, cur->data, cur); + + cur = next; + } + g_hash_table_destroy(to_table); + g_free(from); + + if (cc_list) { + for (cur = cc_list; cur != NULL; cur = cur->next) + compose_entry_append(compose, (gchar *)cur->data, + COMPOSE_CC); + slist_free_strings(cc_list); + g_slist_free(cc_list); + } +} + +#define SET_ENTRY(entry, str) \ +{ \ + if (str && *str) \ + gtk_entry_set_text(GTK_ENTRY(compose->entry), str); \ +} + +static void compose_reedit_set_entry(Compose *compose, MsgInfo *msginfo) +{ + g_return_if_fail(msginfo != NULL); + + SET_ENTRY(to_entry, msginfo->to); + SET_ENTRY(subject_entry, msginfo->subject); + SET_ENTRY(cc_entry, compose->cc); + SET_ENTRY(bcc_entry, compose->bcc); + SET_ENTRY(reply_entry, compose->replyto); + + if (compose->bcc) { + GtkItemFactory *ifactory; + GtkWidget *menuitem; + + ifactory = gtk_item_factory_from_widget(compose->menubar); + menuitem = gtk_item_factory_get_item(ifactory, "/Message/Bcc"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + } + if (compose->replyto) { + GtkItemFactory *ifactory; + GtkWidget *menuitem; + + ifactory = gtk_item_factory_from_widget(compose->menubar); + menuitem = gtk_item_factory_get_item + (ifactory, "/Message/Reply to"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + } +} + +static void compose_insert_sig(Compose *compose) +{ + gchar *sigfile; + + if (compose->account && compose->account->sig_path) + sigfile = g_strdup(compose->account->sig_path); + else { + sigfile = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, + DEFAULT_SIGNATURE, NULL); + } + + if (!is_file_or_fifo_exist(sigfile)) { + g_free(sigfile); + return; + } + + gtk_text_insert(GTK_TEXT(compose->text), NULL, NULL, NULL, "\n\n", 2); + if (prefs_common.sig_sep) { + gtk_text_insert(GTK_TEXT(compose->text), NULL, NULL, NULL, + prefs_common.sig_sep, -1); + gtk_text_insert(GTK_TEXT(compose->text), NULL, NULL, NULL, + "\n", 1); + } + + compose_insert_file(compose, sigfile); + g_free(sigfile); +} + +static void compose_insert_file(Compose *compose, const gchar *file) +{ + GtkText *text = GTK_TEXT(compose->text); + gchar buf[BUFFSIZE]; + FILE *fp; + + g_return_if_fail(file != NULL); + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return; + } + + gtk_text_freeze(text); + + while (fgets(buf, sizeof(buf), fp) != NULL) + gtk_text_insert(text, NULL, NULL, NULL, buf, -1); + + gtk_text_thaw(text); + + fclose(fp); +} + +static void compose_attach_append(Compose *compose, const gchar *file, + ContentType cnttype) +{ + AttachInfo *ainfo; + gchar *text[N_ATTACH_COLS]; + off_t size; + gint row; + + if (!is_file_exist(file)) { + g_warning(_("File %s doesn't exist\n"), file); + return; + } + if ((size = get_file_size(file)) < 0) { + g_warning(_("Can't get file size of %s\n"), file); + return; + } + if (size == 0) { + alertpanel_notice(_("File %s is empty\n"), file); + return; + } + + if (!compose->use_attach) { + GtkItemFactory *ifactory; + GtkWidget *menuitem; + + ifactory = gtk_item_factory_from_widget(compose->menubar); + menuitem = gtk_item_factory_get_item(ifactory, + "/Message/Attach"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), + TRUE); + } + + ainfo = g_new0(AttachInfo, 1); + ainfo->file = g_strdup(file); + + if (cnttype == MIME_MESSAGE_RFC822) { + ainfo->content_type = g_strdup("message/rfc822"); + ainfo->encoding = ENC_7BIT; + ainfo->name = g_strdup_printf(_("Message: %s"), + g_basename(file)); + } else { + ainfo->content_type = procmime_get_mime_type(file); + if (!ainfo->content_type) + ainfo->content_type = + g_strdup("application/octet-stream"); + ainfo->encoding = ENC_BASE64; + ainfo->name = g_strdup(g_basename(file)); + } + ainfo->size = size; + + text[COL_MIMETYPE] = ainfo->content_type; + text[COL_SIZE] = to_human_readable(size); + text[COL_NAME] = ainfo->name; + + row = gtk_clist_append(GTK_CLIST(compose->attach_clist), text); + gtk_clist_set_row_data(GTK_CLIST(compose->attach_clist), row, ainfo); + + if (cnttype != MIME_MESSAGE_RFC822) + compose_changed_cb(NULL, compose); +} + +static void compose_wrap_line(Compose *compose) +{ + GtkText *text = GTK_TEXT(compose->text); + guint text_len; + guint line_pos = 0, cur_pos = 0; + gint line_len = 0, cur_len = 0; + gint ch_len; + gchar cbuf[MB_CUR_MAX]; + + gtk_text_freeze(text); + + text_len = gtk_text_get_length(text); + + for (; cur_pos < text_len; cur_pos++) { + if (text->use_wchar) + ch_len = wctomb + (cbuf, (wchar_t)GTK_TEXT_INDEX(text, cur_pos)); + else { + cbuf[0] = GTK_TEXT_INDEX(text, cur_pos); + ch_len = 1; + } + + if (ch_len == 1 && *cbuf == '\n') { + line_pos = cur_pos + 1; + line_len = cur_len = 0; + continue; + } + + if (ch_len < 0) { + cbuf[0] = '\0'; + ch_len = 1; + } + + if (ch_len == 1 && isspace(*cbuf)) { + line_pos = cur_pos + 1; + line_len = cur_len + ch_len; + } + + if (cur_len + ch_len > prefs_common.linewrap_len && + line_len > 0) { + gint tlen; + + if (text->use_wchar) + tlen = wctomb(cbuf, (wchar_t)GTK_TEXT_INDEX(text, line_pos - 1)); + else { + cbuf[0] = GTK_TEXT_INDEX(text, line_pos - 1); + tlen = 1; + } + if (tlen == 1 && isspace(*cbuf)) { + gtk_text_set_point(text, line_pos); + gtk_text_backward_delete(text, 1); + text_len--; + cur_pos--; + line_pos--; + cur_len--; + line_len--; + } + + gtk_text_set_point(text, line_pos); + gtk_text_insert(text, NULL, NULL, NULL, "\n", 1); + text_len++; + cur_pos++; + line_pos++; + cur_len = cur_len - line_len + ch_len; + line_len = 0; + continue; + } + + if (ch_len > 1) { + line_pos = cur_pos + 1; + line_len = cur_len + ch_len; + } + cur_len += ch_len; + } + + gtk_text_thaw(text); +} + +static void compose_set_title(Compose *compose) +{ + gchar *str; + gchar *edited; + + edited = compose->modified ? _(" [Edited]") : ""; + if (compose->account && compose->account->address) + str = g_strdup_printf(_("%s - Compose message%s"), + compose->account->address, edited); + else + str = g_strdup_printf(_("Compose message%s"), edited); + gtk_window_set_title(GTK_WINDOW(compose->window), str); + g_free(str); +} + +static gint compose_send(Compose *compose) +{ + gchar tmp[MAXPATHLEN + 1]; + gchar *to, *newsgroups; + gint ok = 0; + static gboolean lock = FALSE; + + if (lock) return 1; + + g_return_val_if_fail(compose->account != NULL, -1); + g_return_val_if_fail(compose->orig_account != NULL, -1); + + lock = TRUE; + + to = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); + newsgroups = gtk_entry_get_text(GTK_ENTRY(compose->newsgroups_entry)); + if (*to == '\0' && *newsgroups == '\0') { + alertpanel_error(_("Recipient is not specified.")); + lock = FALSE; + return 1; + } + + /* write to temporary file */ + g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg%d", + get_rc_dir(), G_DIR_SEPARATOR, (gint)compose); + + if (prefs_common.linewrap_at_send) + compose_wrap_line(compose); + + if (compose_write_to_file(compose, tmp, FALSE) < 0) { + lock = FALSE; + return -1; + } + + if (!compose->to_list && !compose->newsgroup_list) { + g_warning(_("can't get recipient list.")); + unlink(tmp); + lock = FALSE; + return -1; + } + + if (compose->to_list) { + PrefsAccount *ac; + + if (compose->account->protocol != A_NNTP) + ac = compose->account; + else if (compose->orig_account->protocol != A_NNTP) + ac = compose->orig_account; + else if (cur_account && cur_account->protocol != A_NNTP) + ac = cur_account; + else { + ac = account_get_default(); + if (!ac || ac->protocol == A_NNTP) { + alertpanel_error(_("Account for sending mail is not specified.\n" + "Please select a mail account before sending.")); + unlink(tmp); + lock = FALSE; + return -1; + } + } + ok = send_message(tmp, ac, compose->to_list); + statusbar_pop_all(); + } + + if (ok == 0 && compose->newsgroup_list) { + Folder *folder; + + if (compose->account->protocol == A_NNTP) + folder = FOLDER(compose->account->folder); + else + folder = FOLDER(compose->orig_account->folder); + + ok = news_post(folder, tmp); + if (ok < 0) { + alertpanel_error(_("Error occurred while posting the message to %s ."), + compose->account->nntp_server); + unlink(tmp); + lock = FALSE; + return -1; + } + } + + /* queue message if failed to send */ + if (ok < 0) { + if (prefs_common.queue_msg) { + AlertValue val; + + val = alertpanel + (_("Queueing"), + _("Error occurred while sending the message.\n" + "Put this message into queue folder?"), + _("OK"), _("Cancel"), NULL); + if (G_ALERTDEFAULT == val) { + ok = compose_queue(compose, tmp); + if (ok < 0) + alertpanel_error(_("Can't queue the message.")); + } + } else + alertpanel_error(_("Error occurred while sending the message.")); + } + + /* save message to outbox */ + if (ok == 0 && prefs_common.savemsg) { + if (compose_save_to_outbox(compose, tmp) < 0) + alertpanel_error + (_("Can't save the message to outbox.")); + } + + if (unlink(tmp) < 0) FILE_OP_ERROR(tmp, "unlink"); + lock = FALSE; + return ok; +} + +static gint compose_write_to_file(Compose *compose, const gchar *file, + gboolean is_draft) +{ + FILE *fp; + size_t len; + gchar *chars; + gchar *buf; + const gchar *out_codeset; + EncodingType encoding; + + if ((fp = fopen(file, "w")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return -1; + } + + /* chmod for security */ + if (change_file_mode_rw(fp, file) < 0) { + FILE_OP_ERROR(file, "chmod"); + g_warning(_("can't change file mode\n")); + } + + /* get all composed text */ + chars = gtk_editable_get_chars(GTK_EDITABLE(compose->text), 0, -1); + len = strlen(chars); + if (is_ascii_str(chars)) { + buf = g_strdup(chars); + out_codeset = "US-ASCII"; + encoding = ENC_7BIT; + } else { + const gchar *src_codeset; + + out_codeset = conv_get_outgoing_charset_str(); + if (!strcasecmp(out_codeset, "US-ASCII")) + out_codeset = "ISO-8859-1"; + encoding = procmime_get_encoding_for_charset(out_codeset); + debug_print("charset = %s, encoding = %s\n", + out_codeset, procmime_get_encoding_str(encoding)); + + src_codeset = conv_get_current_charset_str(); + buf = conv_codeset_strdup(chars, src_codeset, out_codeset); + if (!buf) { + g_free(chars); + fclose(fp); + unlink(file); + alertpanel_error(_("Can't convert the codeset of the message.")); + return -1; + } + } + g_free(chars); + + /* write headers */ + if (compose_write_headers + (compose, fp, out_codeset, encoding, is_draft) < 0) { + g_warning(_("can't write headers\n")); + fclose(fp); + unlink(file); + g_free(buf); + return -1; + } + + if (compose->use_attach) { +#if USE_GPGME + /* This prolog message is ignored by mime software and + * because it would make our signing/encryption task + * tougher, we don't emit it in that case */ + if (!compose->use_signing && !compose->use_encryption) +#endif + fputs("This is a multi-part message in MIME format.\n", fp); + + fprintf(fp, "\n--%s\n", compose->boundary); + fprintf(fp, "Content-Type: text/plain; charset=%s\n", + out_codeset); + fprintf(fp, "Content-Transfer-Encoding: %s\n", + procmime_get_encoding_str(encoding)); + fputc('\n', fp); + } + + /* write body */ + len = strlen(buf); + if (encoding == ENC_BASE64) { + gchar outbuf[B64_BUFFSIZE]; + gint i, l; + + for (i = 0; i < len; i += B64_LINE_SIZE) { + l = MIN(B64_LINE_SIZE, len - i); + to64frombits(outbuf, buf + i, l); + fputs(outbuf, fp); + fputc('\n', fp); + } + } else if (fwrite(buf, sizeof(gchar), len, fp) != len) { + FILE_OP_ERROR(file, "fwrite"); + fclose(fp); + unlink(file); + g_free(buf); + return -1; + } + g_free(buf); + + if (compose->use_attach) + compose_write_attach(compose, fp); + + if (fclose(fp) == EOF) { + FILE_OP_ERROR(file, "fclose"); + unlink(file); + return -1; + } + +#if USE_GPGME + if (compose->use_signing) { + if (rfc2015_sign(file) < 0) { + unlink(file); + return -1; + } + } + if (compose->use_encryption) { + if (rfc2015_encrypt(file, compose->to_list) < 0) { + unlink(file); + return -1; + } + } +#endif /* USE_GPGME */ + + return 0; +} + +static gint compose_write_body_to_file(Compose *compose, const gchar *file) +{ + FILE *fp; + size_t len; + gchar *chars; + + if ((fp = fopen(file, "w")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return -1; + } + + /* chmod for security */ + if (change_file_mode_rw(fp, file) < 0) { + FILE_OP_ERROR(file, "chmod"); + g_warning(_("can't change file mode\n")); + } + + chars = gtk_editable_get_chars(GTK_EDITABLE(compose->text), 0, -1); + + /* write body */ + len = strlen(chars); + if (fwrite(chars, sizeof(gchar), len, fp) != len) { + FILE_OP_ERROR(file, "fwrite"); + g_free(chars); + fclose(fp); + unlink(file); + return -1; + } + + g_free(chars); + + if (fclose(fp) == EOF) { + FILE_OP_ERROR(file, "fclose"); + unlink(file); + return -1; + } + return 0; +} + +static gint compose_save_to_outbox(Compose *compose, const gchar *file) +{ + FolderItem *outbox; + gchar *path; + gint num; + FILE *fp; + + debug_print(_("saving sent message...\n")); + + outbox = folder_get_default_outbox(); + folder_item_scan(outbox); + if ((num = folder_item_add_msg(outbox, file)) < 0) { + g_warning(_("can't save message\n")); + return -1; + } + + path = folder_item_get_path(outbox); + if ((fp = procmsg_open_mark_file(path, TRUE)) == NULL) + g_warning(_("can't open mark file\n")); + else { + MsgInfo newmsginfo; + + newmsginfo.msgnum = num; + newmsginfo.flags = 0; + procmsg_write_flags(&newmsginfo, fp); + fclose(fp); + } + g_free(path); + + return 0; +} + +static gint compose_queue(Compose *compose, const gchar *file) +{ + FolderItem *queue; + gchar *tmp, *queue_path; + FILE *fp, *src_fp; + GSList *cur; + gchar buf[BUFFSIZE]; + gint num; + + debug_print(_("queueing message...\n")); + g_return_val_if_fail(compose->to_list != NULL, -1); + g_return_val_if_fail(compose->account != NULL, -1); + + tmp = g_strdup_printf("%s%cqueue.%d", g_get_tmp_dir(), + G_DIR_SEPARATOR, (gint)compose); + if ((fp = fopen(tmp, "w")) == NULL) { + FILE_OP_ERROR(tmp, "fopen"); + g_free(tmp); + return -1; + } + if ((src_fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + fclose(fp); + unlink(tmp); + g_free(tmp); + return -1; + } + if (change_file_mode_rw(fp, tmp) < 0) { + FILE_OP_ERROR(tmp, "chmod"); + g_warning(_("can't change file mode\n")); + } + + /* queueing variables */ + fprintf(fp, "AF:\n"); + fprintf(fp, "NF:0\n"); + fprintf(fp, "PS:10\n"); + fprintf(fp, "SRH:1\n"); + fprintf(fp, "SFN:\n"); + fprintf(fp, "DSR:\n"); + if (compose->msgid) + fprintf(fp, "MID:<%s>\n", compose->msgid); + else + fprintf(fp, "MID:\n"); + fprintf(fp, "CFG:\n"); + fprintf(fp, "PT:0\n"); + fprintf(fp, "S:%s\n", compose->account->address); + fprintf(fp, "RQ:\n"); + if (compose->account->smtp_server) + fprintf(fp, "SSV:%s\n", compose->account->smtp_server); + else + fprintf(fp, "SSV:\n"); + if (compose->account->nntp_server) + fprintf(fp, "NSV:%s\n", compose->account->nntp_server); + else + fprintf(fp, "NSV:\n"); + fprintf(fp, "SSH:\n"); + fprintf(fp, "R:<%s>", (gchar *)compose->to_list->data); + for (cur = compose->to_list->next; cur != NULL; cur = cur->next) + fprintf(fp, ",<%s>", (gchar *)cur->data); + fprintf(fp, "\n"); + fprintf(fp, "\n"); + + while (fgets(buf, sizeof(buf), src_fp) != NULL) { + if (fputs(buf, fp) == EOF) { + FILE_OP_ERROR(tmp, "fputs"); + fclose(fp); + fclose(src_fp); + unlink(tmp); + g_free(tmp); + return -1; + } + } + + fclose(src_fp); + if (fclose(fp) == EOF) { + FILE_OP_ERROR(tmp, "fclose"); + unlink(tmp); + g_free(tmp); + return -1; + } + + queue = folder_get_default_queue(); + folder_item_scan(queue); + if ((num = folder_item_add_msg(queue, tmp)) < 0) { + g_warning(_("can't queue the message\n")); + unlink(tmp); + g_free(tmp); + return -1; + } + unlink(tmp); + g_free(tmp); + + queue_path = folder_item_get_path(queue); + if ((fp = procmsg_open_mark_file(queue_path, TRUE)) == NULL) + g_warning(_("can't open mark file\n")); + else { + MsgInfo newmsginfo; + + newmsginfo.msgnum = num; + newmsginfo.flags = 0; + procmsg_write_flags(&newmsginfo, fp); + fclose(fp); + } + g_free(queue_path); + + return 0; +} + +static void compose_write_attach(Compose *compose, FILE *fp) +{ + AttachInfo *ainfo; + GtkCList *clist = GTK_CLIST(compose->attach_clist); + gint row; + FILE *attach_fp; + gchar filename[BUFFSIZE]; + gint len; + + for (row = 0; (ainfo = gtk_clist_get_row_data(clist, row)) != NULL; + row++) { + if ((attach_fp = fopen(ainfo->file, "r")) == NULL) { + g_warning(_("Can't open file %s\n"), ainfo->file); + continue; + } + + fprintf(fp, "\n--%s\n", compose->boundary); + + if (!strcmp2(ainfo->content_type, "message/rfc822")) { + fprintf(fp, "Content-Type: %s\n", ainfo->content_type); + fprintf(fp, "Content-Disposition: inline\n"); + } else { + conv_encode_header(filename, sizeof(filename), + ainfo->name, 12); + fprintf(fp, "Content-Type: %s;\n" + " name=\"%s\"\n", + ainfo->content_type, filename); + fprintf(fp, "Content-Disposition: attachment;\n" + " filename=\"%s\"\n", filename); + } + + fprintf(fp, "Content-Transfer-Encoding: %s\n\n", + procmime_get_encoding_str(ainfo->encoding)); + + if (ainfo->encoding == ENC_7BIT) { + gchar buf[BUFFSIZE]; + + while (fgets(buf, sizeof(buf), attach_fp) != NULL) { + len = strlen(buf); + if (len > 1 && buf[len - 1] == '\n' && + buf[len - 2] == '\r') { + buf[len - 2] = '\n'; + buf[len - 1] = '\0'; + } + fputs(buf, fp); + } + } else { + gchar inbuf[B64_LINE_SIZE], outbuf[B64_BUFFSIZE]; + + while ((len = fread(inbuf, sizeof(gchar), + B64_LINE_SIZE, attach_fp)) + == B64_LINE_SIZE) { + to64frombits(outbuf, inbuf, B64_LINE_SIZE); + fputs(outbuf, fp); + fputc('\n', fp); + } + if (len > 0 && feof(attach_fp)) { + to64frombits(outbuf, inbuf, len); + fputs(outbuf, fp); + fputc('\n', fp); + } + } + + fclose(attach_fp); + } + + fprintf(fp, "\n--%s--\n", compose->boundary); +} + +static gint compose_write_headers(Compose *compose, FILE *fp, + const gchar *charset, EncodingType encoding, + gboolean is_draft) +{ + gchar buf[BUFFSIZE]; + gchar *str; + /* struct utsname utsbuf; */ + + g_return_val_if_fail(fp != NULL, -1); + g_return_val_if_fail(charset != NULL, -1); + g_return_val_if_fail(compose->account != NULL, -1); + g_return_val_if_fail(compose->account->address != NULL, -1); + + /* Date */ + if (compose->account->add_date) { + get_rfc822_date(buf, sizeof(buf)); + fprintf(fp, "Date: %s\n", buf); + } + + /* From */ + if (compose->account->name && *compose->account->name) { + compose_convert_header + (buf, sizeof(buf), compose->account->name, + strlen("From: ")); + fprintf(fp, "From: %s <%s>\n", buf, compose->account->address); + } else + fprintf(fp, "From: %s\n", compose->account->address); + + slist_free_strings(compose->to_list); + g_slist_free(compose->to_list); + compose->to_list = NULL; + + /* To */ + if (compose->use_to) { + str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + if (*str != '\0') { + compose->to_list = address_list_append + (compose->to_list, str); + compose_convert_header(buf, sizeof(buf), str, + strlen("To: ")); + fprintf(fp, "To: %s\n", buf); + } + } + } + + slist_free_strings(compose->newsgroup_list); + g_slist_free(compose->newsgroup_list); + compose->newsgroup_list = NULL; + + /* Newsgroups */ + str = gtk_entry_get_text(GTK_ENTRY(compose->newsgroups_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + remove_space(str); + if (*str != '\0') { + compose->newsgroup_list = + newsgroup_list_append(compose->newsgroup_list, + str); + compose_convert_header(buf, sizeof(buf), str, + strlen("Newsgroups: ")); + fprintf(fp, "Newsgroups: %s\n", buf); + } + } + + if (!is_draft && !compose->to_list && !compose->newsgroup_list) + return -1; + + /* Cc */ + if (compose->use_cc) { + str = gtk_entry_get_text(GTK_ENTRY(compose->cc_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + if (*str != '\0') { + compose->to_list = address_list_append + (compose->to_list, str); + compose_convert_header(buf, sizeof(buf), str, + strlen("Cc: ")); + fprintf(fp, "Cc: %s\n", buf); + } + } + } + + /* Bcc */ + if (compose->use_bcc) { + str = gtk_entry_get_text(GTK_ENTRY(compose->bcc_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + if (*str != '\0') { + compose->to_list = address_list_append + (compose->to_list, str); + if (is_draft) { + compose_convert_header + (buf, sizeof(buf), str, + strlen("Bcc: ")); + fprintf(fp, "Bcc: %s\n", buf); + } + } + } + } + + /* Subject */ + str = gtk_entry_get_text(GTK_ENTRY(compose->subject_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + if (*str != '\0') { + compose_convert_header(buf, sizeof(buf), str, + strlen("Subject: ")); + fprintf(fp, "Subject: %s\n", buf); + } + } + + /* Message-ID */ + if (compose->account->gen_msgid) { + compose_generate_msgid(compose, buf, sizeof(buf)); + fprintf(fp, "Message-Id: <%s>\n", buf); + compose->msgid = g_strdup(buf); + } + + /* In-Reply-To */ + if (compose->inreplyto && compose->to_list) + fprintf(fp, "In-Reply-To: <%s>\n", compose->inreplyto); + + /* References */ + if (compose->references) + fprintf(fp, "References: %s\n", compose->references); + + /* Followup-To */ + if (compose->use_followupto) { + str = gtk_entry_get_text(GTK_ENTRY(compose->followup_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + remove_space(str); + if (*str != '\0') { + compose_convert_header(buf, sizeof(buf), str, + strlen("Followup-To: ")); + fprintf(fp, "Followup-To: %s\n", buf); + } + } + } + + /* Reply-To */ + if (compose->use_replyto) { + str = gtk_entry_get_text(GTK_ENTRY(compose->reply_entry)); + if (*str != '\0') { + Xstrdup_a(str, str, return -1); + g_strstrip(str); + if (*str != '\0') { + compose_convert_header(buf, sizeof(buf), str, + strlen("Reply-To: ")); + fprintf(fp, "Reply-To: %s\n", buf); + } + } + } + + /* Program version and system info */ + /* uname(&utsbuf); */ + str = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); + if (*str != '\0') { + fprintf(fp, "X-Mailer: %s (GTK+ %d.%d.%d; %s)\n", + prog_version, + gtk_major_version, gtk_minor_version, gtk_micro_version, + HOST_ALIAS); + /* utsbuf.sysname, utsbuf.release, utsbuf.machine); */ + } + str = gtk_entry_get_text(GTK_ENTRY(compose->newsgroups_entry)); + if (*str != '\0') { + fprintf(fp, "X-Newsreader: %s (GTK+ %d.%d.%d; %s)\n", + prog_version, + gtk_major_version, gtk_minor_version, gtk_micro_version, + HOST_ALIAS); + /* utsbuf.sysname, utsbuf.release, utsbuf.machine); */ + } + + /* Organization */ + if (compose->account->organization) { + compose_convert_header(buf, sizeof(buf), + compose->account->organization, + strlen("Organization: ")); + fprintf(fp, "Organization: %s\n", buf); + } + + /* MIME */ + fprintf(fp, "Mime-Version: 1.0\n"); + if (compose->use_attach) { + get_rfc822_date(buf, sizeof(buf)); + subst_char(buf, ' ', '_'); + subst_char(buf, ',', '_'); + compose->boundary = g_strdup_printf("Multipart_%s_%08x", + buf, (guint)compose); + fprintf(fp, + "Content-Type: multipart/mixed;\n" + " boundary=\"%s\"\n", compose->boundary); + } else { + fprintf(fp, "Content-Type: text/plain; charset=%s\n", charset); + fprintf(fp, "Content-Transfer-Encoding: %s\n", + procmime_get_encoding_str(encoding)); + } + + /* separator between header and body */ + fputs("\n", fp); + + return 0; +} + +static void compose_convert_header(gchar *dest, gint len, gchar *src, + gint header_len) +{ + g_return_if_fail(src != NULL); + g_return_if_fail(dest != NULL); + + if (len < 1) return; + + remove_return(src); + + if (is_ascii_str(src)) { + strncpy2(dest, src, len); + dest[len - 1] = '\0'; + return; + } else + conv_encode_header(dest, len, src, header_len); +} + +static void compose_generate_msgid(Compose *compose, gchar *buf, gint len) +{ + struct tm *lt; + time_t t; + gchar *addr; + + t = time(NULL); + lt = localtime(&t); + + if (compose->account && compose->account->address && + *compose->account->address) { + if (strchr(compose->account->address, '@')) + addr = g_strdup(compose->account->address); + else + addr = g_strconcat(compose->account->address, "@", + get_domain_name(), NULL); + } else + addr = g_strconcat(g_get_user_name(), "@", get_domain_name(), + NULL); + + g_snprintf(buf, len, "%04d%02d%02d%02d%02d%02d.%08x.%s", + lt->tm_year + 1900, lt->tm_mon + 1, + lt->tm_mday, lt->tm_hour, + lt->tm_min, lt->tm_sec, + (guint)random(), addr); + + debug_print(_("generated Message-ID: %s\n"), buf); + + g_free(addr); +} + +static void compose_add_entry_field(GtkWidget *table, GtkWidget **hbox, + GtkWidget **entry, gint *count, + const gchar *label_str, + gboolean is_addr_entry) +{ + GtkWidget *label; + + if (GTK_TABLE(table)->nrows < (*count) + 1) + gtk_table_resize(GTK_TABLE(table), (*count) + 1, 2); + + *hbox = gtk_hbox_new(FALSE, 0); + label = gtk_label_new + (prefs_common.trans_hdr ? gettext(label_str) : label_str); + gtk_box_pack_end(GTK_BOX(*hbox), label, FALSE, FALSE, 0); + gtk_table_attach(GTK_TABLE(table), *hbox, 0, 1, *count, (*count) + 1, + GTK_FILL, 0, 2, 0); + *entry = gtk_entry_new(); + gtk_table_attach_defaults + (GTK_TABLE(table), *entry, 1, 2, *count, (*count) + 1); + if (GTK_TABLE(table)->nrows > (*count) + 1) + gtk_table_set_row_spacing(GTK_TABLE(table), *count, 4); + + if (is_addr_entry) + address_completion_register_entry(GTK_ENTRY(*entry)); + + (*count)++; +} + +static Compose *compose_create(PrefsAccount *account) +{ + Compose *compose; + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *menubar; + GtkWidget *handlebox; + + GtkWidget *vbox2; + + GtkWidget *table_vbox; + GtkWidget *label; + GtkWidget *from_optmenu_hbox; + GtkWidget *to_entry; + GtkWidget *to_hbox; + GtkWidget *newsgroups_entry; + GtkWidget *newsgroups_hbox; + GtkWidget *subject_entry; + GtkWidget *cc_entry; + GtkWidget *cc_hbox; + GtkWidget *bcc_entry; + GtkWidget *bcc_hbox; + GtkWidget *reply_entry; + GtkWidget *reply_hbox; + GtkWidget *followup_entry; + GtkWidget *followup_hbox; + + GtkWidget *paned; + + GtkWidget *attach_scrwin; + GtkWidget *attach_clist; + + GtkWidget *edit_vbox; + GtkWidget *ruler_hbox; + GtkWidget *ruler; + GtkWidget *scrolledwin; + GtkWidget *text; + + GtkWidget *table; + GtkWidget *hbox; + + gchar *titles[] = {_("MIME type"), _("Size"), _("Name")}; + guint n_menu_entries; + GtkStyle *style, *new_style; + GdkColormap *cmap; + GdkColor color[1]; + gboolean success[1]; + GdkFont *font; + GtkWidget *popupmenu; + GtkWidget *menuitem; + GtkItemFactory *popupfactory; + GtkItemFactory *ifactory; + gint n_entries; + gint count = 0; + gint i; + + g_return_val_if_fail(account != NULL, NULL); + + debug_print(_("Creating compose window...\n")); + compose = g_new0(Compose, 1); + + compose->account = account; + compose->orig_account = account; + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); + gtk_widget_set_usize(window, -1, prefs_common.compose_height); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(compose_delete_cb), compose); + gtk_signal_connect(GTK_OBJECT(window), "destroy", + GTK_SIGNAL_FUNC(compose_destroy_cb), compose); + gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + gtk_widget_realize(window); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(window), vbox); + + n_menu_entries = sizeof(compose_entries) / sizeof(compose_entries[0]); + menubar = menubar_create(window, compose_entries, + n_menu_entries, "<Compose>", compose); + gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); + + handlebox = gtk_handle_box_new(); + gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0); + + compose_toolbar_create(compose, handlebox); + + vbox2 = gtk_vbox_new(FALSE, 2); + gtk_box_pack_start(GTK_BOX(vbox), vbox2, TRUE, TRUE, 0); + gtk_container_set_border_width(GTK_CONTAINER(vbox2), BORDER_WIDTH); + + table_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox2), table_vbox, FALSE, TRUE, 0); + gtk_container_set_border_width(GTK_CONTAINER(table_vbox), + BORDER_WIDTH * 2); + + table = gtk_table_new(8, 2, FALSE); + gtk_box_pack_start(GTK_BOX(table_vbox), table, FALSE, TRUE, 0); + + /* option menu for selecting accounts */ + hbox = gtk_hbox_new(FALSE, 0); + label = gtk_label_new(prefs_common.trans_hdr ? _("From:") : "From:"); + gtk_box_pack_end(GTK_BOX(hbox), label, FALSE, FALSE, 0); + gtk_table_attach(GTK_TABLE(table), hbox, 0, 1, count, count + 1, + GTK_FILL, 0, 2, 0); + from_optmenu_hbox = compose_account_option_menu_create(compose); + gtk_table_attach_defaults(GTK_TABLE(table), from_optmenu_hbox, + 1, 2, count, count + 1); + gtk_table_set_row_spacing(GTK_TABLE(table), 0, 4); + count++; + + /* header labels and entries */ + compose_add_entry_field(table, &to_hbox, &to_entry, &count, + "To:", TRUE); + compose_add_entry_field(table, &newsgroups_hbox, &newsgroups_entry, + &count, "Newsgroups:", FALSE); + compose_add_entry_field(table, &hbox, &subject_entry, &count, + "Subject:", FALSE); + compose_add_entry_field(table, &cc_hbox, &cc_entry, &count, + "Cc:", TRUE); + compose_add_entry_field(table, &bcc_hbox, &bcc_entry, &count, + "Bcc:", TRUE); + compose_add_entry_field(table, &reply_hbox, &reply_entry, &count, + "Reply-To:", TRUE); + compose_add_entry_field(table, &followup_hbox, &followup_entry, &count, + "Followup-To:", FALSE); + + gtk_table_set_col_spacings(GTK_TABLE(table), 4); + + gtk_signal_connect(GTK_OBJECT(to_entry), "activate", + GTK_SIGNAL_FUNC(to_activated), compose); + gtk_signal_connect(GTK_OBJECT(newsgroups_entry), "activate", + GTK_SIGNAL_FUNC(newsgroups_activated), compose); + gtk_signal_connect(GTK_OBJECT(subject_entry), "activate", + GTK_SIGNAL_FUNC(subject_activated), compose); + gtk_signal_connect(GTK_OBJECT(cc_entry), "activate", + GTK_SIGNAL_FUNC(cc_activated), compose); + gtk_signal_connect(GTK_OBJECT(bcc_entry), "activate", + GTK_SIGNAL_FUNC(bcc_activated), compose); + gtk_signal_connect(GTK_OBJECT(reply_entry), "activate", + GTK_SIGNAL_FUNC(replyto_activated), compose); + gtk_signal_connect(GTK_OBJECT(followup_entry), "activate", + GTK_SIGNAL_FUNC(followupto_activated), compose); + + gtk_signal_connect(GTK_OBJECT(subject_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect(GTK_OBJECT(to_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect(GTK_OBJECT(newsgroups_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect(GTK_OBJECT(cc_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect(GTK_OBJECT(bcc_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect(GTK_OBJECT(reply_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect(GTK_OBJECT(followup_entry), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + + /* attachment list */ + attach_scrwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(attach_scrwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_ALWAYS); + gtk_widget_set_usize(attach_scrwin, -1, 80); + + attach_clist = gtk_clist_new_with_titles(N_ATTACH_COLS, titles); + gtk_clist_set_column_justification(GTK_CLIST(attach_clist), COL_SIZE, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_width(GTK_CLIST(attach_clist), COL_MIMETYPE, 240); + gtk_clist_set_column_width(GTK_CLIST(attach_clist), COL_SIZE, 64); + gtk_clist_set_selection_mode(GTK_CLIST(attach_clist), + GTK_SELECTION_EXTENDED); + for (i = 0; i < N_ATTACH_COLS; i++) + GTK_WIDGET_UNSET_FLAGS + (GTK_CLIST(attach_clist)->column[i].button, + GTK_CAN_FOCUS); + gtk_container_add(GTK_CONTAINER(attach_scrwin), attach_clist); + + gtk_signal_connect(GTK_OBJECT(attach_clist), "select_row", + GTK_SIGNAL_FUNC(attach_selected), compose); + gtk_signal_connect(GTK_OBJECT(attach_clist), "button_press_event", + GTK_SIGNAL_FUNC(attach_button_pressed), compose); + gtk_signal_connect(GTK_OBJECT(attach_clist), "key_press_event", + GTK_SIGNAL_FUNC(attach_key_pressed), compose); + + /* drag and drop */ + gtk_drag_dest_set(attach_clist, + GTK_DEST_DEFAULT_ALL, compose_mime_types, 1, + GDK_ACTION_COPY); + gtk_signal_connect(GTK_OBJECT(attach_clist), "drag_data_received", + GTK_SIGNAL_FUNC(compose_attach_drag_received_cb), + compose); + + /* pane between attach clist and text */ + paned = gtk_vpaned_new(); + gtk_paned_add1(GTK_PANED(paned), attach_scrwin); + gtk_widget_ref(paned); + gtk_widget_show_all(paned); + + edit_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox2), edit_vbox, TRUE, TRUE, 0); + + /* ruler */ + ruler_hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(edit_vbox), ruler_hbox, FALSE, FALSE, 0); + + ruler = gtk_shruler_new(); + gtk_ruler_set_range(GTK_RULER(ruler), 0.0, 100.0, 1.0, 100.0); + gtk_box_pack_start(GTK_BOX(ruler_hbox), ruler, TRUE, TRUE, + BORDER_WIDTH + 1); + gtk_widget_set_usize(ruler_hbox, 1, -1); + + /* text widget */ + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_box_pack_start(GTK_BOX(edit_vbox), scrolledwin, TRUE, TRUE, 0); + gtk_widget_set_usize(scrolledwin, prefs_common.compose_width, -1); + + text = gtk_text_new(gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(scrolledwin)), + gtk_scrolled_window_get_vadjustment + (GTK_SCROLLED_WINDOW(scrolledwin))); + gtk_text_set_editable(GTK_TEXT(text), TRUE); + gtk_text_set_word_wrap(GTK_TEXT(text), TRUE); + gtk_container_add(GTK_CONTAINER(scrolledwin), text); + + gtk_signal_connect(GTK_OBJECT(text), "changed", + GTK_SIGNAL_FUNC(compose_changed_cb), compose); + gtk_signal_connect(GTK_OBJECT(text), "grab_focus", + GTK_SIGNAL_FUNC(compose_grab_focus_cb), compose); + gtk_signal_connect_after(GTK_OBJECT(text), "button_press_event", + GTK_SIGNAL_FUNC(compose_button_press_cb), + compose); +#if 0 + gtk_signal_connect_after(GTK_OBJECT(text), "key_press_event", + GTK_SIGNAL_FUNC(compose_key_press_cb), + compose); +#endif + gtk_signal_connect_after(GTK_OBJECT(text), "size_allocate", + GTK_SIGNAL_FUNC(compose_edit_size_alloc), + ruler); + + /* drag and drop */ + gtk_drag_dest_set(text, GTK_DEST_DEFAULT_ALL, compose_mime_types, 1, + GDK_ACTION_COPY); + gtk_signal_connect(GTK_OBJECT(text), "drag_data_received", + GTK_SIGNAL_FUNC(compose_insert_drag_received_cb), + compose); + + gtk_widget_show_all(vbox); + + style = gtk_widget_get_style(text); + + /* workaround for the slow down of GtkText when using Pixmap theme */ + if (style->engine) { + GtkThemeEngine *engine; + + engine = style->engine; + style->engine = NULL; + new_style = gtk_style_copy(style); + style->engine = engine; + } else + new_style = gtk_style_copy(style); + + if (prefs_common.textfont) { + CharSet charset; + + charset = conv_get_current_charset(); + if (MB_CUR_MAX == 1) { + gchar *fontstr, *p; + + Xstrdup_a(fontstr, prefs_common.textfont, ); + if (fontstr && (p = strchr(fontstr, ',')) != NULL) + *p = '\0'; + font = gdk_font_load(fontstr); + } else + font = gdk_fontset_load(prefs_common.textfont); + if (font) { + gdk_font_unref(new_style->font); + new_style->font = font; + } + } + + gtk_widget_set_style(text, new_style); + + color[0] = quote_color; + cmap = gdk_window_get_colormap(window->window); + gdk_colormap_alloc_colors(cmap, color, 1, FALSE, TRUE, success); + if (success[0] == FALSE) { + g_warning("Compose: color allocation failed.\n"); + style = gtk_widget_get_style(text); + quote_color = style->black; + } + + n_entries = sizeof(compose_popup_entries) / + sizeof(compose_popup_entries[0]); + popupmenu = menu_create_items(compose_popup_entries, n_entries, + "<Compose>", &popupfactory, + compose); + + ifactory = gtk_item_factory_from_widget(menubar); + menu_set_sensitive(ifactory, "/Edit/Undo", FALSE); + menu_set_sensitive(ifactory, "/Edit/Redo", FALSE); + + gtk_widget_hide(bcc_hbox); + gtk_widget_hide(bcc_entry); + gtk_widget_hide(reply_hbox); + gtk_widget_hide(reply_entry); + gtk_widget_hide(followup_hbox); + gtk_widget_hide(followup_entry); + gtk_widget_hide(ruler_hbox); + gtk_table_set_row_spacing(GTK_TABLE(table), 4, 0); + gtk_table_set_row_spacing(GTK_TABLE(table), 5, 0); + gtk_table_set_row_spacing(GTK_TABLE(table), 6, 0); + + if (account->protocol == A_NNTP) { + gtk_widget_hide(to_hbox); + gtk_widget_hide(to_entry); + gtk_widget_hide(cc_hbox); + gtk_widget_hide(cc_entry); + gtk_table_set_row_spacing(GTK_TABLE(table), 1, 0); + gtk_table_set_row_spacing(GTK_TABLE(table), 3, 0); + } else { + gtk_widget_hide(newsgroups_hbox); + gtk_widget_hide(newsgroups_entry); + gtk_table_set_row_spacing(GTK_TABLE(table), 2, 0); + menu_set_sensitive(ifactory, "/Message/Followup to", FALSE); + } + + switch (prefs_common.toolbar_style) { + case TOOLBAR_NONE: + gtk_widget_hide(handlebox); + break; + case TOOLBAR_ICON: + gtk_toolbar_set_style(GTK_TOOLBAR(compose->toolbar), + GTK_TOOLBAR_ICONS); + break; + case TOOLBAR_TEXT: + gtk_toolbar_set_style(GTK_TOOLBAR(compose->toolbar), + GTK_TOOLBAR_TEXT); + break; + case TOOLBAR_BOTH: + gtk_toolbar_set_style(GTK_TOOLBAR(compose->toolbar), + GTK_TOOLBAR_BOTH); + break; + } + + gtk_widget_show(window); + + address_completion_start(window); + + compose->window = window; + compose->vbox = vbox; + compose->menubar = menubar; + compose->handlebox = handlebox; + + compose->vbox2 = vbox2; + + compose->table_vbox = table_vbox; + compose->table = table; + compose->to_hbox = to_hbox; + compose->to_entry = to_entry; + compose->newsgroups_hbox = newsgroups_hbox; + compose->newsgroups_entry = newsgroups_entry; + compose->subject_entry = subject_entry; + compose->cc_hbox = cc_hbox; + compose->cc_entry = cc_entry; + compose->bcc_hbox = bcc_hbox; + compose->bcc_entry = bcc_entry; + compose->reply_hbox = reply_hbox; + compose->reply_entry = reply_entry; + compose->followup_hbox = followup_hbox; + compose->followup_entry = followup_entry; + + compose->paned = paned; + + compose->attach_scrwin = attach_scrwin; + compose->attach_clist = attach_clist; + + compose->edit_vbox = edit_vbox; + compose->ruler_hbox = ruler_hbox; + compose->ruler = ruler; + compose->scrolledwin = scrolledwin; + compose->text = text; + + compose->focused_editable = NULL; + + compose->popupmenu = popupmenu; + compose->popupfactory = popupfactory; + + compose->mode = COMPOSE_NEW; + + compose->replyto = NULL; + compose->cc = NULL; + compose->bcc = NULL; + compose->followup_to = NULL; + compose->inreplyto = NULL; + compose->references = NULL; + compose->msgid = NULL; + compose->boundary = NULL; + + compose->use_to = FALSE; + compose->use_cc = FALSE; + compose->use_bcc = FALSE; + compose->use_replyto = FALSE; + compose->use_followupto = FALSE; + compose->use_attach = FALSE; + +#if USE_GPGME + compose->use_signing = FALSE; + compose->use_encryption = FALSE; +#endif /* USE_GPGME */ + + compose->modified = FALSE; + + compose->to_list = NULL; + compose->newsgroup_list = NULL; + + compose->exteditor_file = NULL; + compose->exteditor_pid = -1; + compose->exteditor_readdes = -1; + compose->exteditor_tag = -1; + + compose_set_title(compose); + + if (account->protocol != A_NNTP) { + menuitem = gtk_item_factory_get_item(ifactory, "/Message/To"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + gtk_widget_set_sensitive(menuitem, FALSE); + menuitem = gtk_item_factory_get_item(ifactory, "/Message/Cc"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + gtk_widget_set_sensitive(menuitem, FALSE); + } + if (account->set_autocc && account->auto_cc) { + gtk_entry_set_text(GTK_ENTRY(cc_entry), account->auto_cc); + menuitem = gtk_item_factory_get_item(ifactory, "/Message/Cc"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + } + if (account->set_autobcc && account->auto_bcc) { + gtk_entry_set_text(GTK_ENTRY(bcc_entry), account->auto_bcc); + menuitem = gtk_item_factory_get_item(ifactory, "/Message/Bcc"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + } + if (account->set_autoreplyto && account->auto_replyto) { + gtk_entry_set_text(GTK_ENTRY(reply_entry), + account->auto_replyto); + menuitem = gtk_item_factory_get_item(ifactory, + "/Message/Reply to"); + gtk_check_menu_item_set_active + (GTK_CHECK_MENU_ITEM(menuitem), TRUE); + } + + menuitem = gtk_item_factory_get_item(ifactory, "/Tool/Show ruler"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), + prefs_common.show_ruler); + +#if USE_GPGME + menuitem = gtk_item_factory_get_item(ifactory, "/Message/Sign"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), + prefs_common.default_sign); + menuitem = gtk_item_factory_get_item(ifactory, "/Message/Encrypt"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), + prefs_common.default_encrypt); +#endif /* USE_GPGME */ + + addressbook_set_target_compose(compose); + + compose_list = g_list_append(compose_list, compose); + + return compose; +} + +#include "pixmaps/stock_mail_send.xpm" +#include "pixmaps/stock_mail.xpm" +#include "pixmaps/stock_paste.xpm" +#include "pixmaps/stock_mail_attach.xpm" +#include "pixmaps/stock_mail_compose.xpm" +#include "pixmaps/linewrap.xpm" +//#include "pixmaps/tb_mail_queue_send.xpm" +#include "pixmaps/tb_address_book.xpm" + +#define CREATE_TOOLBAR_ICON(xpm_d) \ +{ \ + icon = gdk_pixmap_create_from_xpm_d(container->window, &mask, \ + &container->style->white, \ + xpm_d); \ + icon_wid = gtk_pixmap_new(icon, mask); \ +} + +static void compose_toolbar_create(Compose *compose, GtkWidget *container) +{ + GtkWidget *toolbar; + GdkPixmap *icon; + GdkBitmap *mask; + GtkWidget *icon_wid; + GtkWidget *send_btn; + GtkWidget *sendl_btn; + GtkWidget *draft_btn; + GtkWidget *insert_btn; + GtkWidget *attach_btn; + GtkWidget *sig_btn; + GtkWidget *exteditor_btn; + GtkWidget *linewrap_btn; + GtkWidget *addrbook_btn; + + toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, + GTK_TOOLBAR_BOTH); + gtk_container_add(GTK_CONTAINER(container), toolbar); + gtk_container_set_border_width(GTK_CONTAINER(container), 2); + gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE); + gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar), + GTK_TOOLBAR_SPACE_LINE); + + CREATE_TOOLBAR_ICON(stock_mail_send_xpm); + send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Send"), + _("Send message"), + "Send", + icon_wid, toolbar_send_cb, compose); + + CREATE_TOOLBAR_ICON(stock_mail_send_xpm); + //CREATE_TOOLBAR_ICON(tb_mail_queue_send_xpm); + sendl_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Send later"), + _("Put into queue folder and send later"), + "Send later", + icon_wid, toolbar_send_later_cb, + compose); + + CREATE_TOOLBAR_ICON(stock_mail_xpm); + draft_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Draft"), + _("Save to draft folder"), + "Draft", + icon_wid, toolbar_draft_cb, + compose); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_paste_xpm); + insert_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Insert"), + _("Insert file"), + "Insert", + icon_wid, toolbar_insert_cb, + compose); + + CREATE_TOOLBAR_ICON(stock_mail_attach_xpm); + attach_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Attach"), + _("Attach file"), + "Attach", + icon_wid, toolbar_attach_cb, + compose); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_mail_xpm); + sig_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Signature"), + _("Insert signature"), + "Signature", + icon_wid, toolbar_sig_cb, compose); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_mail_compose_xpm); + exteditor_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Editor"), + _("Edit with external editor"), + "Editor", + icon_wid, + toolbar_ext_editor_cb, + compose); + + CREATE_TOOLBAR_ICON(linewrap_xpm); + linewrap_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Linewrap"), + _("Wrap long lines"), + "Linewrap", + icon_wid, + toolbar_linewrap_cb, + compose); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(tb_address_book_xpm); + addrbook_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Address"), + _("Address book"), + "Address", + icon_wid, toolbar_address_cb, + compose); + + compose->toolbar = toolbar; + compose->send_btn = send_btn; + compose->sendl_btn = sendl_btn; + compose->draft_btn = draft_btn; + compose->insert_btn = insert_btn; + compose->attach_btn = attach_btn; + compose->sig_btn = sig_btn; + compose->exteditor_btn = exteditor_btn; + compose->linewrap_btn = linewrap_btn; + compose->addrbook_btn = addrbook_btn; + + gtk_widget_show_all(toolbar); +} + +static GtkWidget *compose_account_option_menu_create(Compose *compose) +{ + GList *accounts; + GtkWidget *hbox; + GtkWidget *optmenu; + GtkWidget *menu; + gint num = 0, def_menu = 0; + + accounts = account_get_list(); + g_return_val_if_fail(accounts != NULL, NULL); + + hbox = gtk_hbox_new(FALSE, 0); + optmenu = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); + menu = gtk_menu_new(); + + for (; accounts != NULL; accounts = accounts->next, num++) { + PrefsAccount *ac = (PrefsAccount *)accounts->data; + GtkWidget *menuitem; + gchar *name; + + if (ac == compose->account) def_menu = num; + + name = g_strdup_printf("%s <%s> (%s)", + ac->name, ac->address, ac->account_name); + MENUITEM_ADD(menu, menuitem, name, ac); + g_free(name); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(account_activated), + compose); + } + + gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), menu); + gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), def_menu); + + return hbox; +} + +static void compose_destroy(Compose *compose) +{ + gint row; + GtkCList *clist = GTK_CLIST(compose->attach_clist); + AttachInfo *ainfo; + + /* NOTE: address_completion_end() does nothing with the window + * however this may change. */ + address_completion_end(compose->window); + + slist_free_strings(compose->to_list); + g_slist_free(compose->to_list); + slist_free_strings(compose->newsgroup_list); + g_slist_free(compose->newsgroup_list); + + procmsg_msginfo_free(compose->targetinfo); + + g_free(compose->replyto); + g_free(compose->cc); + g_free(compose->bcc); + g_free(compose->newsgroups); + g_free(compose->followup_to); + + g_free(compose->inreplyto); + g_free(compose->references); + g_free(compose->msgid); + g_free(compose->boundary); + + g_free(compose->exteditor_file); + + for (row = 0; (ainfo = gtk_clist_get_row_data(clist, row)) != NULL; + row++) + compose_attach_info_free(ainfo); + + if (addressbook_get_target_compose() == compose) + addressbook_set_target_compose(NULL); + + prefs_common.compose_width = compose->scrolledwin->allocation.width; + prefs_common.compose_height = compose->window->allocation.height; + + gtk_widget_destroy(compose->paned); + + g_free(compose); + + compose_list = g_list_remove(compose_list, compose); +} + +static void compose_attach_info_free(AttachInfo *ainfo) +{ + g_free(ainfo->file); + g_free(ainfo->content_type); + g_free(ainfo->name); + g_free(ainfo); +} + +static void compose_attach_remove_selected(Compose *compose) +{ + GtkCList *clist = GTK_CLIST(compose->attach_clist); + AttachInfo *ainfo; + gint row; + + while (clist->selection != NULL) { + row = GPOINTER_TO_INT(clist->selection->data); + ainfo = gtk_clist_get_row_data(clist, row); + compose_attach_info_free(ainfo); + gtk_clist_remove(clist, row); + } +} + +static struct _AttachProperty +{ + GtkWidget *window; + GtkWidget *mimetype_entry; + GtkWidget *encoding_optmenu; + GtkWidget *path_entry; + GtkWidget *filename_entry; + GtkWidget *ok_btn; + GtkWidget *cancel_btn; +} attach_prop; + +static void compose_attach_property(Compose *compose) +{ + GtkCList *clist = GTK_CLIST(compose->attach_clist); + AttachInfo *ainfo; + gint row; + gboolean cancelled; + GtkOptionMenu *optmenu; + + if (!clist->selection) return; + row = GPOINTER_TO_INT(clist->selection->data); + + ainfo = gtk_clist_get_row_data(clist, row); + if (!ainfo) return; + + if (!attach_prop.window) + compose_attach_property_create(&cancelled); + gtk_widget_grab_focus(attach_prop.ok_btn); + gtk_widget_show(attach_prop.window); + manage_window_set_transient(GTK_WINDOW(attach_prop.window)); + + optmenu = GTK_OPTION_MENU(attach_prop.encoding_optmenu); + if (ainfo->encoding == ENC_UNKNOWN) + gtk_option_menu_set_history(optmenu, ENC_BASE64); + else + gtk_option_menu_set_history(optmenu, ainfo->encoding); + + gtk_entry_set_text(GTK_ENTRY(attach_prop.mimetype_entry), + ainfo->content_type ? ainfo->content_type : ""); + gtk_entry_set_text(GTK_ENTRY(attach_prop.path_entry), + ainfo->file ? ainfo->file : ""); + gtk_entry_set_text(GTK_ENTRY(attach_prop.filename_entry), + ainfo->name ? ainfo->name : ""); + + for (;;) { + gchar *text; + gchar *cnttype = NULL; + gchar *file = NULL; + off_t size = 0; + GtkWidget *menu; + GtkWidget *menuitem; + + gtk_main(); + + if (cancelled == TRUE) { + gtk_widget_hide(attach_prop.window); + break; + } + + text = gtk_entry_get_text(GTK_ENTRY(attach_prop.mimetype_entry)); + if (*text != '\0') { + gchar *p; + + text = g_strstrip(g_strdup(text)); + if ((p = strchr(text, '/')) && !strchr(p + 1, '/')) { + cnttype = g_strdup(text); + g_free(text); + } else { + alertpanel_error(_("Invalid MIME type.")); + g_free(text); + continue; + } + } + + menu = gtk_option_menu_get_menu(optmenu); + menuitem = gtk_menu_get_active(GTK_MENU(menu)); + ainfo->encoding = GPOINTER_TO_INT + (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + + text = gtk_entry_get_text(GTK_ENTRY(attach_prop.path_entry)); + if (*text != '\0') { + if (is_file_exist(text) && + (size = get_file_size(text)) > 0) + file = g_strdup(text); + else { + alertpanel_error + (_("File doesn't exist or is empty.")); + g_free(cnttype); + continue; + } + } + + text = gtk_entry_get_text(GTK_ENTRY(attach_prop.filename_entry)); + if (*text != '\0') { + g_free(ainfo->name); + ainfo->name = g_strdup(text); + } + + if (cnttype) { + g_free(ainfo->content_type); + ainfo->content_type = cnttype; + } + if (file) { + g_free(ainfo->file); + ainfo->file = file; + } + if (size) + ainfo->size = size; + + gtk_clist_set_text(clist, row, COL_MIMETYPE, + ainfo->content_type); + gtk_clist_set_text(clist, row, COL_SIZE, + to_human_readable(ainfo->size)); + gtk_clist_set_text(clist, row, COL_NAME, ainfo->name); + + gtk_widget_hide(attach_prop.window); + break; + } +} + +#define SET_LABEL_AND_ENTRY(str, entry, top) \ +{ \ + label = gtk_label_new(str); \ + gtk_table_attach(GTK_TABLE(table), label, 0, 1, top, (top + 1), \ + GTK_FILL, 0, 0, 0); \ + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); \ + \ + entry = gtk_entry_new(); \ + gtk_table_attach(GTK_TABLE(table), entry, 1, 2, top, (top + 1), \ + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); \ +} + +static void compose_attach_property_create(gboolean *cancelled) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *label; + GtkWidget *mimetype_entry; + GtkWidget *hbox; + GtkWidget *optmenu; + GtkWidget *optmenu_menu; + GtkWidget *menuitem; + GtkWidget *path_entry; + GtkWidget *filename_entry; + GtkWidget *hbbox; + GtkWidget *ok_btn; + GtkWidget *cancel_btn; + + debug_print("Creating attach_property window...\n"); + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_widget_set_usize(window, 480, -1); + gtk_container_set_border_width(GTK_CONTAINER(window), 8); + gtk_window_set_title(GTK_WINDOW(window), _("Property")); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(attach_property_delete_event), + cancelled); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(attach_property_key_pressed), + cancelled); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(window), vbox); + + table = gtk_table_new(4, 2, FALSE); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); + gtk_table_set_row_spacings(GTK_TABLE(table), 8); + gtk_table_set_col_spacings(GTK_TABLE(table), 8); + + SET_LABEL_AND_ENTRY(_("MIME type"), mimetype_entry, 0); + + label = gtk_label_new(_("Encoding")); + gtk_table_attach(GTK_TABLE(table), label, 0, 1, 1, 2, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_table_attach(GTK_TABLE(table), hbox, 1, 2, 1, 2, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + + optmenu = gtk_option_menu_new(); + gtk_box_pack_start(GTK_BOX(hbox), optmenu, FALSE, FALSE, 0); + + optmenu_menu = gtk_menu_new(); + MENUITEM_ADD(optmenu_menu, menuitem, "7bit", ENC_7BIT); + gtk_widget_set_sensitive(menuitem, FALSE); + MENUITEM_ADD(optmenu_menu, menuitem, "8bit", ENC_8BIT); + gtk_widget_set_sensitive(menuitem, FALSE); + MENUITEM_ADD(optmenu_menu, menuitem, "quoted-printable", ENC_QUOTED_PRINTABLE); + gtk_widget_set_sensitive(menuitem, FALSE); + MENUITEM_ADD(optmenu_menu, menuitem, "base64", ENC_BASE64); + + gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), optmenu_menu); + + SET_LABEL_AND_ENTRY(_("Path"), path_entry, 2); + SET_LABEL_AND_ENTRY(_("File name"), filename_entry, 3); + + gtkut_button_set_create(&hbbox, &ok_btn, _("OK"), + &cancel_btn, _("Cancel"), NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_btn); + + gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", + GTK_SIGNAL_FUNC(attach_property_ok), + cancelled); + gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", + GTK_SIGNAL_FUNC(attach_property_cancel), + cancelled); + + gtk_widget_show_all(vbox); + + attach_prop.window = window; + attach_prop.mimetype_entry = mimetype_entry; + attach_prop.encoding_optmenu = optmenu; + attach_prop.path_entry = path_entry; + attach_prop.filename_entry = filename_entry; + attach_prop.ok_btn = ok_btn; + attach_prop.cancel_btn = cancel_btn; +} + +static void attach_property_ok(GtkWidget *widget, gboolean *cancelled) +{ + *cancelled = FALSE; + gtk_main_quit(); +} + +static void attach_property_cancel(GtkWidget *widget, gboolean *cancelled) +{ + *cancelled = TRUE; + gtk_main_quit(); +} + +static gint attach_property_delete_event(GtkWidget *widget, GdkEventAny *event, + gboolean *cancelled) +{ + *cancelled = TRUE; + gtk_main_quit(); + + return TRUE; +} + +static void attach_property_key_pressed(GtkWidget *widget, GdkEventKey *event, + gboolean *cancelled) +{ + if (event && event->keyval == GDK_Escape) { + *cancelled = TRUE; + gtk_main_quit(); + } +} + +static void compose_exec_ext_editor(Compose *compose) +{ + gchar tmp[64]; + pid_t pid; + gint pipe_fds[2]; + + g_snprintf(tmp, sizeof(tmp), "%s%ctmpmsg.%08x", + g_get_tmp_dir(), G_DIR_SEPARATOR, (gint)compose); + + if (pipe(pipe_fds) < 0) { + perror("pipe"); + return; + } + + if ((pid = fork()) < 0) { + perror("fork"); + return; + } + + if (pid != 0) { + /* close the write side of the pipe */ + close(pipe_fds[1]); + + compose->exteditor_file = g_strdup(tmp); + compose->exteditor_pid = pid; + compose->exteditor_readdes = pipe_fds[0]; + + compose_set_ext_editor_sensitive(compose, FALSE); + + compose->exteditor_tag = + gdk_input_add(pipe_fds[0], GDK_INPUT_READ, + compose_input_cb, compose); + } else { /* process-monitoring process */ + pid_t pid_ed; + + if (setpgid(0, 0)) + perror("setpgid"); + + /* close the read side of the pipe */ + close(pipe_fds[0]); + + if (compose_write_body_to_file(compose, tmp) < 0) { + sock_write(pipe_fds[1], "2\n", 2); + _exit(1); + } + + pid_ed = compose_exec_ext_editor_real(tmp); + if (pid_ed < 0) { + sock_write(pipe_fds[1], "1\n", 2); + _exit(1); + } + + /* wait until editor is terminated */ + waitpid(pid_ed, NULL, 0); + + sock_write(pipe_fds[1], "0\n", 2); + + close(pipe_fds[1]); + _exit(0); + } +} + +static gint compose_exec_ext_editor_real(const gchar *file) +{ + static gchar *def_cmd = "emacs %s"; + gchar buf[1024]; + gchar *p; + gchar **cmdline; + pid_t pid; + + g_return_val_if_fail(file != NULL, -1); + + if ((pid = fork()) < 0) { + perror("fork"); + return -1; + } + + if (pid != 0) return pid; + + /* grandchild process */ + + if (setpgid(0, getppid())) + perror("setpgid"); + + if (prefs_common.ext_editor_cmd && + (p = strchr(prefs_common.ext_editor_cmd, '%')) && + *(p + 1) == 's' && !strchr(p + 2, '%')) { + g_snprintf(buf, sizeof(buf), prefs_common.ext_editor_cmd, file); + } else { + if (prefs_common.ext_editor_cmd) + g_warning(_("External editor command line is invalid: `%s'\n"), + prefs_common.ext_editor_cmd); + g_snprintf(buf, sizeof(buf), def_cmd, file); + } + + cmdline = g_strsplit(buf, " ", 1024); + execvp(cmdline[0], cmdline); + + perror("execvp"); + g_strfreev(cmdline); + + _exit(1); +} + +static gboolean compose_ext_editor_kill(Compose *compose) +{ + pid_t pgid = compose->exteditor_pid * -1; + gint ret; + + ret = kill(pgid, 0); + + if (ret == 0 || (ret == -1 && EPERM == errno)) { + AlertValue val; + gchar *msg; + + msg = g_strdup_printf + (_("The external editor is still working.\n" + "Force terminating the process?\n" + "process group id: %d"), -pgid); + val = alertpanel(_("Notice"), msg, _("Yes"), _("+No"), NULL); + g_free(msg); + + if (val == G_ALERTDEFAULT) { + gdk_input_remove(compose->exteditor_tag); + close(compose->exteditor_readdes); + + if (kill(pgid, SIGTERM) < 0) perror("kill"); + waitpid(compose->exteditor_pid, NULL, 0); + + g_warning(_("Terminated process group id: %d"), -pgid); + g_warning(_("Temporary file: %s"), + compose->exteditor_file); + + compose_set_ext_editor_sensitive(compose, TRUE); + + g_free(compose->exteditor_file); + compose->exteditor_file = NULL; + compose->exteditor_pid = -1; + compose->exteditor_readdes = -1; + compose->exteditor_tag = -1; + } else + return FALSE; + } + + return TRUE; +} + +static void compose_input_cb(gpointer data, gint source, + GdkInputCondition condition) +{ + gchar buf[3]; + Compose *compose = (Compose *)data; + gint i = 0; + + debug_print(_("Compose: input from monitoring process\n")); + + gdk_input_remove(compose->exteditor_tag); + + for (;;) { + if (read(source, &buf[i], 1) < 1) { + buf[0] = '3'; + break; + } + if (buf[i] == '\n') { + buf[i] = '\0'; + break; + } + i++; + if (i == sizeof(buf) - 1) + break; + } + + waitpid(compose->exteditor_pid, NULL, 0); + + if (buf[0] == '0') { /* success */ + GtkText *text = GTK_TEXT(compose->text); + + gtk_text_freeze(text); + gtk_text_set_point(text, 0); + gtk_text_forward_delete(text, gtk_text_get_length(text)); + compose_insert_file(compose, compose->exteditor_file); + compose_changed_cb(NULL, compose); + gtk_text_thaw(text); + + if (unlink(compose->exteditor_file) < 0) + FILE_OP_ERROR(compose->exteditor_file, "unlink"); + } else if (buf[0] == '1') { /* failed */ + g_warning(_("Couldn't exec external editor\n")); + if (unlink(compose->exteditor_file) < 0) + FILE_OP_ERROR(compose->exteditor_file, "unlink"); + } else if (buf[0] == '2') { + g_warning(_("Couldn't write to file\n")); + } else if (buf[0] == '3') { + g_warning(_("Pipe read failed\n")); + } + + close(source); + + compose_set_ext_editor_sensitive(compose, TRUE); + + g_free(compose->exteditor_file); + compose->exteditor_file = NULL; + compose->exteditor_pid = -1; + compose->exteditor_readdes = -1; + compose->exteditor_tag = -1; +} + +static void compose_set_ext_editor_sensitive(Compose *compose, + gboolean sensitive) +{ + GtkItemFactory *ifactory; + + ifactory = gtk_item_factory_from_widget(compose->menubar); + + menu_set_sensitive(ifactory, "/Message/Send", sensitive); + menu_set_sensitive(ifactory, "/Message/Send later", sensitive); + menu_set_sensitive(ifactory, "/Message/Save to draft folder", + sensitive); + menu_set_sensitive(ifactory, "/File/Insert file", sensitive); + menu_set_sensitive(ifactory, "/File/Insert signature", sensitive); + menu_set_sensitive(ifactory, "/Edit/Wrap long lines", sensitive); + menu_set_sensitive(ifactory, "/Edit/Edit with external editor", + sensitive); + + gtk_widget_set_sensitive(compose->text, sensitive); + gtk_widget_set_sensitive(compose->send_btn, sensitive); + gtk_widget_set_sensitive(compose->sendl_btn, sensitive); + gtk_widget_set_sensitive(compose->draft_btn, sensitive); + gtk_widget_set_sensitive(compose->insert_btn, sensitive); + gtk_widget_set_sensitive(compose->sig_btn, sensitive); + gtk_widget_set_sensitive(compose->exteditor_btn, sensitive); + gtk_widget_set_sensitive(compose->linewrap_btn, sensitive); +} + +static gint calc_cursor_xpos(GtkText *text, gint extra, gint char_width) +{ + gint cursor_pos; + + cursor_pos = (text->cursor_pos_x - extra) / char_width; + cursor_pos = MAX(cursor_pos, 0); + + return cursor_pos; +} + +/* callback functions */ + +/* compose_edit_size_alloc() - called when resized. don't know whether Gtk + * includes "non-client" (windows-izm) in calculation, so this calculation + * may not be accurate. + */ +static gboolean compose_edit_size_alloc(GtkEditable *widget, + GtkAllocation *allocation, + GtkSHRuler *shruler) +{ + if (prefs_common.show_ruler) { + gint char_width; + gint line_width_in_chars; + + char_width = gtkut_get_font_width + (GTK_WIDGET(widget)->style->font); + line_width_in_chars = + (allocation->width - allocation->x) / char_width; + + /* got the maximum */ + gtk_ruler_set_range(GTK_RULER(shruler), + 0.0, line_width_in_chars, + calc_cursor_xpos(GTK_TEXT(widget), + allocation->x, + char_width), + /*line_width_in_chars*/ char_width); + } + + return TRUE; +} + +static void toolbar_send_cb(GtkWidget *widget, gpointer data) +{ + compose_send_cb(data, 0, NULL); +} + +static void toolbar_send_later_cb(GtkWidget *widget, gpointer data) +{ + compose_send_later_cb(data, 0, NULL); +} + +static void toolbar_draft_cb(GtkWidget *widget, gpointer data) +{ + compose_draft_cb(data, 0, NULL); +} + +static void toolbar_insert_cb(GtkWidget *widget, gpointer data) +{ + compose_insert_file_cb(data, 0, NULL); +} + +static void toolbar_attach_cb(GtkWidget *widget, gpointer data) +{ + compose_attach_cb(data, 0, NULL); +} + +static void toolbar_sig_cb(GtkWidget *widget, gpointer data) +{ + Compose *compose = (Compose *)data; + + compose_insert_sig(compose); +} + +static void toolbar_ext_editor_cb(GtkWidget *widget, gpointer data) +{ + Compose *compose = (Compose *)data; + + compose_exec_ext_editor(compose); +} + +static void toolbar_linewrap_cb(GtkWidget *widget, gpointer data) +{ + Compose *compose = (Compose *)data; + + compose_wrap_line(compose); +} + +static void toolbar_address_cb(GtkWidget *widget, gpointer data) +{ + compose_address_cb(data, 0, NULL); +} + +static void account_activated(GtkMenuItem *menuitem, gpointer data) +{ + Compose *compose = (Compose *)data; + + PrefsAccount *ac; + + ac = (PrefsAccount *)gtk_object_get_user_data(GTK_OBJECT(menuitem)); + g_return_if_fail(ac != NULL); + + if (ac != compose->account) { + compose->account = ac; + compose_set_title(compose); + } +} + +static void attach_selected(GtkCList *clist, gint row, gint column, + GdkEvent *event, gpointer data) +{ + Compose *compose = (Compose *)data; + + if (event && event->type == GDK_2BUTTON_PRESS) + compose_attach_property(compose); +} + +static void attach_button_pressed(GtkWidget *widget, GdkEventButton *event, + gpointer data) +{ + Compose *compose = (Compose *)data; + GtkCList *clist = GTK_CLIST(compose->attach_clist); + gint row, column; + + if (!event) return; + + if (event->button == 3) { + if ((clist->selection && !clist->selection->next) || + !clist->selection) { + gtk_clist_unselect_all(clist); + if (gtk_clist_get_selection_info(clist, + event->x, event->y, + &row, &column)) { + gtk_clist_select_row(clist, row, column); + gtkut_clist_set_focus_row(clist, row); + } + } + gtk_menu_popup(GTK_MENU(compose->popupmenu), NULL, NULL, + NULL, NULL, event->button, event->time); + } +} + +static void attach_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) +{ + Compose *compose = (Compose *)data; + + if (!event) return; + + switch (event->keyval) { + case GDK_Delete: + compose_attach_remove_selected(compose); + break; + } +} + +static void compose_send_cb(gpointer data, guint action, GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + gint val; + + val = compose_send(compose); + + if (val == 0) gtk_widget_destroy(compose->window); +} + +static void compose_send_later_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + gchar tmp[22]; + gchar *to, *newsgroups; + + to = gtk_entry_get_text(GTK_ENTRY(compose->to_entry)); + newsgroups = gtk_entry_get_text(GTK_ENTRY(compose->newsgroups_entry)); + if (*to == '\0' && *newsgroups == '\0') { + alertpanel_error(_("Recipient is not specified.")); + return; + } + + g_snprintf(tmp, 22, "%s%ctmpmsg%d", + g_get_tmp_dir(), G_DIR_SEPARATOR, (gint)compose); + + if (prefs_common.linewrap_at_send) + compose_wrap_line(compose); + + if (compose_write_to_file(compose, tmp, FALSE) < 0 || + compose_queue(compose, tmp) < 0) { + alertpanel_error(_("Can't queue the message.")); + return; + } + + if (prefs_common.savemsg) { + if (compose_save_to_outbox(compose, tmp) < 0) + alertpanel_error + (_("Can't save the message to outbox.")); + } + + if (unlink(tmp) < 0) + FILE_OP_ERROR(tmp, "unlink"); + + gtk_widget_destroy(compose->window); +} + +static void compose_draft_cb(gpointer data, guint action, GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + FolderItem *draft; + gchar *tmp; + + draft = folder_get_default_draft(); + folder_item_scan(draft); + + if (procmsg_msg_exist(compose->targetinfo) && + compose->targetinfo->folder == draft) { + if (folder_item_remove_msg(draft, + compose->targetinfo->msgnum) < 0) + g_warning(_("can't remove the old draft message\n")); + } + tmp = g_strdup_printf("%s%cdraft.%d", g_get_tmp_dir(), + G_DIR_SEPARATOR, (gint)compose); + + if (compose_write_to_file(compose, tmp, TRUE) < 0) { + g_free(tmp); + return; + } + + if (folder_item_add_msg(draft, tmp) < 0) { + unlink(tmp); + g_free(tmp); + return; + } + + unlink(tmp); + g_free(tmp); + + //folderview_scan_folder_a(DRAFT_DIR, TRUE); + + gtk_widget_destroy(compose->window); +} + +static void compose_attach_cb(gpointer data, guint action, GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + gchar *file; + + file = filesel_select_file(_("Select file"), NULL); + + if (file) + compose_attach_append(compose, file, MIME_UNKNOWN); +} + +static void compose_insert_file_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + gchar *file; + + file = filesel_select_file(_("Select file"), NULL); + + if (file) + compose_insert_file(compose, file); +} + +static gint compose_delete_cb(GtkWidget *widget, GdkEventAny *event, + gpointer data) +{ + compose_close_cb(data, 0, NULL); + return TRUE; +} + +static void compose_close_cb(gpointer data, guint action, GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + AlertValue val; + + if (compose->exteditor_tag != -1) { + if (!compose_ext_editor_kill(compose)) + return; + } + + if (compose->modified) { + val = alertpanel(_("Discard message"), + _("This message has been modified. discard it?"), + _("Discard"), _("to Draft"), _("Cancel")); + + switch (val) { + case G_ALERTDEFAULT: + break; + case G_ALERTALTERNATE: + compose_draft_cb(data, 0, NULL); + return; + default: + return; + } + } + + gtk_widget_destroy(compose->window); +} + +static void compose_address_cb(gpointer data, guint action, GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + addressbook_open(compose); +} + +static void compose_ext_editor_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + compose_exec_ext_editor(compose); +} + +static void compose_destroy_cb(GtkWidget *widget, Compose *compose) +{ + compose_destroy(compose); +} + +static void compose_cut_cb(Compose *compose) +{ + if (compose->focused_editable && + GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) + gtk_editable_cut_clipboard + (GTK_EDITABLE(compose->focused_editable)); +} + +static void compose_copy_cb(Compose *compose) +{ + if (compose->focused_editable && + GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) + gtk_editable_copy_clipboard + (GTK_EDITABLE(compose->focused_editable)); +} + +static void compose_paste_cb(Compose *compose) +{ + if (compose->focused_editable && + GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) + gtk_editable_paste_clipboard + (GTK_EDITABLE(compose->focused_editable)); +} + +static void compose_allsel_cb(Compose *compose) +{ + if (compose->focused_editable && + GTK_WIDGET_HAS_FOCUS(compose->focused_editable)) + gtk_editable_select_region + (GTK_EDITABLE(compose->focused_editable), 0, -1); +} + +static void compose_grab_focus_cb(GtkWidget *widget, Compose *compose) +{ + if (GTK_IS_EDITABLE(widget)) + compose->focused_editable = widget; +} + +static void compose_changed_cb(GtkEditable *editable, Compose *compose) +{ + if (compose->modified == FALSE) { + compose->modified = TRUE; + compose_set_title(compose); + } +} + +static void compose_button_press_cb(GtkWidget *widget, GdkEventButton *event, + Compose *compose) +{ + gtk_text_set_point(GTK_TEXT(widget), + gtk_editable_get_position(GTK_EDITABLE(widget))); +} + +#if 0 +static void compose_key_press_cb(GtkWidget *widget, GdkEventKey *event, + Compose *compose) +{ + gtk_text_set_point(GTK_TEXT(widget), + gtk_editable_get_position(GTK_EDITABLE(widget))); +} +#endif + +static void compose_toggle_to_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(compose->to_hbox); + gtk_widget_show(compose->to_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 1, 4); + compose->use_to = TRUE; + } else { + gtk_widget_hide(compose->to_hbox); + gtk_widget_hide(compose->to_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 1, 0); + gtk_widget_queue_resize(compose->table_vbox); + compose->use_to = FALSE; + } + + if (addressbook_get_target_compose() == compose) + addressbook_set_target_compose(compose); +} + +static void compose_toggle_cc_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(compose->cc_hbox); + gtk_widget_show(compose->cc_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 3, 4); + compose->use_cc = TRUE; + } else { + gtk_widget_hide(compose->cc_hbox); + gtk_widget_hide(compose->cc_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 3, 0); + gtk_widget_queue_resize(compose->table_vbox); + compose->use_cc = FALSE; + } + + if (addressbook_get_target_compose() == compose) + addressbook_set_target_compose(compose); +} + +static void compose_toggle_bcc_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(compose->bcc_hbox); + gtk_widget_show(compose->bcc_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 4, 4); + compose->use_bcc = TRUE; + } else { + gtk_widget_hide(compose->bcc_hbox); + gtk_widget_hide(compose->bcc_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 4, 0); + gtk_widget_queue_resize(compose->table_vbox); + compose->use_bcc = FALSE; + } + + if (addressbook_get_target_compose() == compose) + addressbook_set_target_compose(compose); +} + +static void compose_toggle_replyto_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(compose->reply_hbox); + gtk_widget_show(compose->reply_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 5, 4); + compose->use_replyto = TRUE; + } else { + gtk_widget_hide(compose->reply_hbox); + gtk_widget_hide(compose->reply_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 5, 0); + gtk_widget_queue_resize(compose->table_vbox); + compose->use_replyto = FALSE; + } +} + +static void compose_toggle_followupto_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(compose->followup_hbox); + gtk_widget_show(compose->followup_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 6, 4); + compose->use_followupto = TRUE; + } else { + gtk_widget_hide(compose->followup_hbox); + gtk_widget_hide(compose->followup_entry); + gtk_table_set_row_spacing(GTK_TABLE(compose->table), 6, 0); + gtk_widget_queue_resize(compose->table_vbox); + compose->use_followupto = FALSE; + } +} + +static void compose_toggle_attach_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_ref(compose->edit_vbox); + + gtk_container_remove(GTK_CONTAINER(compose->vbox2), + compose->edit_vbox); + gtk_paned_add2(GTK_PANED(compose->paned), compose->edit_vbox); + gtk_box_pack_start(GTK_BOX(compose->vbox2), compose->paned, + TRUE, TRUE, 0); + gtk_widget_show(compose->paned); + + gtk_widget_unref(compose->edit_vbox); + gtk_widget_unref(compose->paned); + + compose->use_attach = TRUE; + } else { + gtk_widget_ref(compose->paned); + gtk_widget_ref(compose->edit_vbox); + + gtk_container_remove(GTK_CONTAINER(compose->vbox2), + compose->paned); + gtk_container_remove(GTK_CONTAINER(compose->paned), + compose->edit_vbox); + gtk_box_pack_start(GTK_BOX(compose->vbox2), + compose->edit_vbox, TRUE, TRUE, 0); + + gtk_widget_unref(compose->edit_vbox); + + compose->use_attach = FALSE; + } +} + +#if USE_GPGME +static void compose_toggle_sign_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) + compose->use_signing = TRUE; + else + compose->use_signing = FALSE; +} + +static void compose_toggle_encrypt_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) + compose->use_encryption = TRUE; + else + compose->use_encryption = FALSE; +} +#endif /* USE_GPGME */ + +static void compose_toggle_ruler_cb(gpointer data, guint action, + GtkWidget *widget) +{ + Compose *compose = (Compose *)data; + + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(compose->ruler_hbox); + prefs_common.show_ruler = TRUE; + } else { + gtk_widget_hide(compose->ruler_hbox); + gtk_widget_queue_resize(compose->edit_vbox); + prefs_common.show_ruler = FALSE; + } +} + +static void compose_attach_drag_received_cb (GtkWidget *widget, + GdkDragContext *drag_context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer user_data) +{ + Compose *compose = (Compose *)user_data; + GList *list, *tmp; + + list = uri_list_extract_filenames((const gchar *)data->data); + for (tmp = list; tmp != NULL; tmp = tmp->next) + compose_attach_append(compose, (const gchar *)tmp->data, + MIME_UNKNOWN); + list_free_strings(list); + g_list_free(list); +} + +static void compose_insert_drag_received_cb (GtkWidget *widget, + GdkDragContext *drag_context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + gpointer user_data) +{ + Compose *compose = (Compose *)user_data; + GList *list, *tmp; + + list = uri_list_extract_filenames((const gchar *)data->data); + for (tmp = list; tmp != NULL; tmp = tmp->next) + compose_insert_file(compose, (const gchar *)tmp->data); + list_free_strings(list); + g_list_free(list); +} + +static void to_activated(GtkWidget *widget, Compose *compose) +{ + if (GTK_WIDGET_VISIBLE(compose->newsgroups_entry)) + gtk_widget_grab_focus(compose->newsgroups_entry); + else + gtk_widget_grab_focus(compose->subject_entry); +} + +static void newsgroups_activated(GtkWidget *widget, Compose *compose) +{ + gtk_widget_grab_focus(compose->subject_entry); +} + +static void subject_activated(GtkWidget *widget, Compose *compose) +{ + if (GTK_WIDGET_VISIBLE(compose->cc_entry)) + gtk_widget_grab_focus(compose->cc_entry); + else if (GTK_WIDGET_VISIBLE(compose->bcc_entry)) + gtk_widget_grab_focus(compose->bcc_entry); + else if (GTK_WIDGET_VISIBLE(compose->reply_entry)) + gtk_widget_grab_focus(compose->reply_entry); + else if (GTK_WIDGET_VISIBLE(compose->followup_entry)) + gtk_widget_grab_focus(compose->followup_entry); + else + gtk_widget_grab_focus(compose->text); +} + +static void cc_activated(GtkWidget *widget, Compose *compose) +{ + if (GTK_WIDGET_VISIBLE(compose->bcc_entry)) + gtk_widget_grab_focus(compose->bcc_entry); + else if (GTK_WIDGET_VISIBLE(compose->reply_entry)) + gtk_widget_grab_focus(compose->reply_entry); + else if (GTK_WIDGET_VISIBLE(compose->followup_entry)) + gtk_widget_grab_focus(compose->followup_entry); + else + gtk_widget_grab_focus(compose->text); +} + +static void bcc_activated(GtkWidget *widget, Compose *compose) +{ + if (GTK_WIDGET_VISIBLE(compose->reply_entry)) + gtk_widget_grab_focus(compose->reply_entry); + else if (GTK_WIDGET_VISIBLE(compose->followup_entry)) + gtk_widget_grab_focus(compose->followup_entry); + else + gtk_widget_grab_focus(compose->text); +} + +static void replyto_activated(GtkWidget *widget, Compose *compose) +{ + if (GTK_WIDGET_VISIBLE(compose->followup_entry)) + gtk_widget_grab_focus(compose->followup_entry); + else + gtk_widget_grab_focus(compose->text); +} + +static void followupto_activated(GtkWidget *widget, Compose *compose) +{ + gtk_widget_grab_focus(compose->text); +} diff --git a/src/compose.h b/src/compose.h new file mode 100644 index 000000000..4a3fca088 --- /dev/null +++ b/src/compose.h @@ -0,0 +1,183 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __COMPOSE_H__ +#define __COMPOSE_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkitemfactory.h> + +typedef struct _Compose Compose; +typedef struct _AttachInfo AttachInfo; + +#include "procmsg.h" +#include "procmime.h" +#include "addressbook.h" +#include "prefs_account.h" + +typedef enum +{ + COMPOSE_MAIL, + COMPOSE_NEWS +} ComposeMode; + +typedef enum +{ + COMPOSE_TO, + COMPOSE_CC, + COMPOSE_BCC +} ComposeEntryType; + +typedef enum +{ + COMPOSE_REPLY, + COMPOSE_REPLY_WITH_QUOTE, + COMPOSE_REPLY_WITHOUT_QUOTE, + COMPOSE_REPLY_TO_ALL, + COMPOSE_REPLY_TO_ALL_WITH_QUOTE, + COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE, + COMPOSE_FORWARD, + COMPOSE_FORWARD_AS_ATTACH, + COMPOSE_NEW, + COMPOSE_REEDIT_DRAFT +} ComposeReplyMode; + +struct _Compose +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *menubar; + + GtkWidget *handlebox; + GtkWidget *toolbar; + GtkWidget *send_btn; + GtkWidget *sendl_btn; + GtkWidget *draft_btn; + GtkWidget *insert_btn; + GtkWidget *attach_btn; + GtkWidget *sig_btn; + GtkWidget *exteditor_btn; + GtkWidget *linewrap_btn; + GtkWidget *addrbook_btn; + + GtkWidget *vbox2; + + GtkWidget *table_vbox; + GtkWidget *table; + GtkWidget *to_hbox; + GtkWidget *to_entry; + GtkWidget *newsgroups_hbox; + GtkWidget *newsgroups_entry; + GtkWidget *subject_entry; + GtkWidget *cc_hbox; + GtkWidget *cc_entry; + GtkWidget *bcc_hbox; + GtkWidget *bcc_entry; + GtkWidget *reply_hbox; + GtkWidget *reply_entry; + GtkWidget *followup_hbox; + GtkWidget *followup_entry; + + GtkWidget *paned; + + GtkWidget *attach_scrwin; + GtkWidget *attach_clist; + + GtkWidget *edit_vbox; + GtkWidget *ruler_hbox; + GtkWidget *ruler; + GtkWidget *scrolledwin; + GtkWidget *text; + + GtkWidget *focused_editable; + + GtkWidget *popupmenu; + + GtkItemFactory *popupfactory; + + ComposeReplyMode mode; + + MsgInfo *targetinfo; + + gchar *replyto; + gchar *cc; + gchar *bcc; + gchar *newsgroups; + gchar *followup_to; + + gchar *inreplyto; + gchar *references; + gchar *msgid; + gchar *boundary; + + gboolean use_to; + gboolean use_cc; + gboolean use_bcc; + gboolean use_replyto; + gboolean use_followupto; + gboolean use_attach; + + /* privacy settings */ + gboolean use_signing; + gboolean use_encryption; + + gboolean modified; + + GSList *to_list; + GSList *newsgroup_list; + + PrefsAccount *account; + PrefsAccount *orig_account; + + /* external editor */ + gchar *exteditor_file; + pid_t exteditor_pid; + gint exteditor_readdes; + gint exteditor_tag; +}; + +struct _AttachInfo +{ + gchar *file; + gchar *content_type; + EncodingType encoding; + gchar *name; + off_t size; +}; + +void compose_new (PrefsAccount *account); + +void compose_new_with_recipient (PrefsAccount *account, + const gchar *to); + +void compose_reply (MsgInfo *msginfo, + gboolean quote, + gboolean to_all); +void compose_forward (MsgInfo *msginfo, + gboolean as_attach); +void compose_reedit (MsgInfo *msginfo); + +GList *compose_get_compose_list (void); + +void compose_entry_append (Compose *compose, + const gchar *address, + ComposeEntryType type); + +#endif /* __COMPOSE_H__ */ diff --git a/src/defs.h b/src/defs.h new file mode 100644 index 000000000..b1cf11006 --- /dev/null +++ b/src/defs.h @@ -0,0 +1,94 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __DEFS_H__ +#define __DEFS_H__ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#if HAVE_PATHS_H +# include <paths.h> +#endif + +#if HAVE_SYS_PARAM_H +# include <sys/param.h> +#endif + +#define PROG_VERSION "Sylpheed version "VERSION +#define INBOX_DIR "inbox" +#define OUTBOX_DIR "outbox" +#define QUEUE_DIR "queue" +#define DRAFT_DIR "draft" +#define TRASH_DIR "trash" +#define RC_DIR ".sylpheed" +#define NEWS_CACHE_DIR "newscache" +#define IMAP_CACHE_DIR "imapcache" +#define MIME_TMP_DIR "mimetmp" +#define COMMON_RC "sylpheedrc" +#define ACCOUNT_RC "accountrc" +#define FILTER_RC "filterrc" +#define MENU_RC "menurc" +#define ADDRESS_BOOK "addressbook.xml" +#define MANUAL_HTML_INDEX "sylpheed.html" +#define HOMEPAGE_URI "http://sylpheed.good-day.net/" +#define FOLDER_LIST "folderlist.xml" +#define CACHE_FILE ".sylpheed_cache" +#define MARK_FILE ".sylpheed_mark" +#define CACHE_VERSION 17 +#define MARK_VERSION 2 + +#define DEFAULT_SIGNATURE ".signature" +#define DEFAULT_INC_PATH "/usr/bin/mh/inc" +#define DEFAULT_INC_PROGRAM "inc" +/* #define DEFAULT_INC_PATH "/usr/bin/imget" */ +/* #define DEFAULT_INC_PROGRAM "imget" */ + +#ifdef _PATH_MAILDIR +# define DEFAULT_SPOOL_PATH _PATH_MAILDIR +#else +# define DEFAULT_SPOOL_PATH "/var/spool/mail" +#endif + +#define BUFFSIZE 8192 + +#ifndef MAXPATHLEN +# define MAXPATHLEN 4095 +#endif + +#define DEFAULT_HEIGHT 460 +#define DEFAULT_FOLDERVIEW_WIDTH 179 +#define DEFAULT_MAINVIEW_WIDTH 600 +#define DEFAULT_SUMMARY_HEIGHT 140 +#define DEFAULT_HEADERVIEW_HEIGHT 40 +#define DEFAULT_COMPOSE_HEIGHT 560 +#define BORDER_WIDTH 2 +#define CTREE_INDENT 18 +#define FOLDER_SPACING 4 +#define COLOR_DIM 35000 + +#define NORMAL_FONT "-*-helvetica-medium-r-normal--12-*," \ + "-*-*-medium-r-normal--12-*-*-*-*-*-*-*,*" +#define BOLD_FONT "-*-helvetica-bold-r-normal--12-*," \ + "-*-*-bold-r-normal--12-*-*-*-*-*-*-*,*" +#define SMALL_FONT "-*-helvetica-medium-r-normal--10-*," \ + "-*-*-medium-r-normal--10-*-*-*-*-*-*-*,*" + +#endif /* __DEFS_H__ */ diff --git a/src/esmtp.c b/src/esmtp.c new file mode 100644 index 000000000..dfb2ef1bb --- /dev/null +++ b/src/esmtp.c @@ -0,0 +1,249 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <stdio.h> +#include <string.h> + +#include "esmtp.h" +#include "smtp.h" +#include "socket.h" +#include "utils.h" +#include "md5.h" +#include "base64.h" + +#define MSGBUFSIZE 8192 + +static gint verbose = 1; +static gchar esmtp_response[MSGBUFSIZE]; + +/* +** Function: hmac_md5 +** taken from the file rfc2104.txt +*/ +void hmac_md5(guchar *text, gint text_len, guchar *key, gint key_len, + guchar *digest) +{ + MD5_CTX context; + guchar k_ipad[65]; /* inner padding - + * key XORd with ipad + */ + guchar k_opad[65]; /* outer padding - + * key XORd with opad + */ + guchar tk[16]; + gint i; + + /* if key is longer than 64 bytes reset it to key=MD5(key) */ + if (key_len > 64) { + MD5_CTX tctx; + + MD5Init(&tctx); + MD5Update(&tctx, key, key_len); + MD5Final(tk, &tctx); + + key = tk; + key_len = 16; + } + + /* + * the HMAC_MD5 transform looks like: + * + * MD5(K XOR opad, MD5(K XOR ipad, text)) + * + * where K is an n byte key + * ipad is the byte 0x36 repeated 64 times + * opad is the byte 0x5c repeated 64 times + * and text is the data being protected + */ + + /* start out by storing key in pads */ + bzero(k_ipad, sizeof k_ipad); + bzero(k_opad, sizeof k_opad); + bcopy(key, k_ipad, key_len); + bcopy(key, k_opad, key_len); + + /* XOR key with ipad and opad values */ + for (i = 0; i < 64; i++) { + k_ipad[i] ^= 0x36; + k_opad[i] ^= 0x5c; + } + + /* + * perform inner MD5 + */ + MD5Init(&context); /* init context for 1st + * pass */ + MD5Update(&context, k_ipad, 64); /* start with inner pad */ + MD5Update(&context, text, text_len); /* then text of datagram */ + MD5Final(digest, &context); /* finish up 1st pass */ + + /* + * perform outer MD5 + */ + MD5Init(&context); /* init context for 2nd + * pass */ + MD5Update(&context, k_opad, 64); /* start with outer pad */ + MD5Update(&context, digest, 16); /* then results of 1st + * hash */ + MD5Final(digest, &context); /* finish up 2nd pass */ +} + +void md5_hex_hmac(gchar *hexdigest, guchar *text, gint text_len, + guchar *key, gint key_len) +{ + guchar digest[16]; + gint i; + + hmac_md5(text, text_len, key, key_len, digest); + for(i = 0; i < 16; i++) + sprintf(hexdigest + 2 * i, "%02x", digest[i]); +} + +gint esmtp_auth_cram_md5(gint sock) +{ + gchar buf[MSGBUFSIZE]; + + g_snprintf(buf, sizeof(buf), "AUTH CRAM-MD5"); + sock_printf(sock, "%s\r\n", buf); + + if (verbose) + log_print("ESMTP> %s\n", buf); + + return esmtp_ok(sock); +} + +gint esmtp_auth_login(gint sock) +{ + gchar buf[MSGBUFSIZE]; + + g_snprintf(buf, sizeof(buf), "AUTH LOGIN"); + sock_printf(sock, "%s\r\n", buf); + + if (verbose) + log_print("ESMTP> %s\n", buf); + + return esmtp_ok(sock); +} + +gint esmtp_auth(gint sock, SMTPAuthType authtype, + const gchar *userid, const gchar *passwd, + gboolean use_smtp_auth) +{ + gchar buf[MSGBUFSIZE]; + guchar hexdigest[33]; + gchar *challenge, *response, *response64; + gint challengelen; + //const gchar delimiters[]=" "; + gchar *token; + + switch (authtype) { + case SMTPAUTH_LOGIN: + if (!strncmp(esmtp_response, "334 ", 4)) + to64frombits(buf, userid, strlen(userid)); + else + /* Server rejects AUTH */ + g_snprintf(buf, sizeof(buf), "*"); + + sock_printf(sock, "%s\r\n", buf); + if (verbose) log_print("ESMTP> USERID\n"); + + esmtp_ok(sock); /* to read the answer from the server */ + + if (!strncmp(esmtp_response, "334 ", 4)) + to64frombits(buf, passwd, strlen(passwd)); + else + /* Server rejects AUTH */ + g_snprintf(buf, sizeof(buf), "*"); + + sock_printf(sock, "%s\r\n", buf); + if (verbose) log_print("ESMTP> PASSWORD\n"); + break; + case SMTPAUTH_CRAM_MD5: + if (!strncmp(esmtp_response, "334 ", 4)) { + /* remove 334 from esmtp_response */ + g_snprintf(buf, sizeof(buf), "%s",esmtp_response); + token = strtok(buf, " "); + token = strtok(NULL, " "); + challenge = g_malloc(strlen(token)+1); + challengelen = from64tobits(challenge,token); + if (verbose) + log_print("ESMTP< Decoded: %s\n", challenge); + + g_snprintf(buf, sizeof(buf), "%s", passwd); + md5_hex_hmac(hexdigest, challenge, challengelen, + buf, strlen(passwd)); + + response = g_strdup_printf("%s %s", userid, hexdigest); + if (verbose) + log_print("ESMTP> Encoded %s\n",response); + + response64 = g_malloc((strlen(response) + 3) * 2 + 1); + to64frombits(response64, response, strlen(response)); + g_free(response); + + sock_printf(sock, "%s\r\n", response64); + if (verbose) log_print("ESMTP> %s\n", response64); + g_free(response64); + } else { + /* Server rejects AUTH */ + g_snprintf(buf, sizeof(buf), "*"); + sock_printf(sock, "%s\r\n", buf); + if (verbose) + log_print("ESMTP> %s\n",buf); + } + break; + case SMTPAUTH_DIGEST_MD5: + default: + /* stop esmtp_auth when no correct authtype */ + g_snprintf(buf, sizeof(buf), "*"); + sock_printf(sock, "%s\r\n", buf); + if (verbose) log_print("ESMTP> %s\n", buf); + break; + } + + return esmtp_ok(sock); +} + +gint esmtp_ok(gint sock) +{ + while (sock_read(sock, esmtp_response, sizeof(esmtp_response) - 1) + != -1) { + if (strlen(esmtp_response) < 4) + return SM_ERROR; + strretchomp(esmtp_response); + + if (verbose) + log_print("ESMTP< %s\n", esmtp_response); + + if ((esmtp_response[0] == '1' || esmtp_response[0] == '2' || + esmtp_response[0] == '3') && esmtp_response[3] == ' ') + return SM_OK; + else if (esmtp_response[3] != '-') + return SM_ERROR; + else if (esmtp_response[0] == '5' && + esmtp_response[1] == '0' && + (esmtp_response[3] == '4' || + esmtp_response[3] == '3' || + esmtp_response[3] == '1')) + return SM_ERROR; + } + + return SM_UNRECOVERABLE; +} diff --git a/src/esmtp.h b/src/esmtp.h new file mode 100644 index 000000000..39b8ad23c --- /dev/null +++ b/src/esmtp.h @@ -0,0 +1,41 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __ESMTP_H__ +#define __ESMTP_H__ + +#include <glib.h> + +typedef enum +{ + SMTPAUTH_LOGIN = 1, + SMTPAUTH_CRAM_MD5 = 2, + SMTPAUTH_DIGEST_MD5 = 3 +} SMTPAuthType; + +gint esmtp_auth_login(gint sock); +gint esmtp_auth_cram_md5(gint sock); +gint esmtp_auth(gint sock, SMTPAuthType authtype, + const gchar *userid, const gchar *passwd, + gboolean use_smtp_auth); +gint esmtp_ok(gint sock); +void md5_hex_hmac(gchar *hexdigest, guchar *text, gint text_len, + guchar *key, gint key_len); + +#endif /* __ESMTP_H__ */ diff --git a/src/filesel.c b/src/filesel.c new file mode 100644 index 000000000..a988f46f9 --- /dev/null +++ b/src/filesel.c @@ -0,0 +1,128 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkfilesel.h> +#include <gtk/gtkmain.h> +#include <gtk/gtksignal.h> + +#include "filesel.h" +#include "manage_window.h" +#include "gtkutils.h" + +static GtkWidget *filesel; +static gboolean filesel_ack; + +static void filesel_create(const gchar *title); +static void filesel_ok_cb(GtkWidget *widget, gpointer data); +static void filesel_cancel_cb(GtkWidget *widget, gpointer data); +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); + +gchar *filesel_select_file(const gchar *title, const gchar *file) +{ + static gchar *filename = NULL; + static gchar *cwd = NULL; + + filesel_create(title); + + manage_window_set_transient(GTK_WINDOW(filesel)); + + if (filename) { + g_free(filename); + filename = NULL; + } + + if (!cwd) + cwd = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, NULL); + + gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), cwd); + + if (file) + gtk_file_selection_set_filename(GTK_FILE_SELECTION(filesel), + file); + + gtk_widget_show(filesel); + + gtk_main(); + + if (filesel_ack) { + gchar *str; + + str = gtk_file_selection_get_filename + (GTK_FILE_SELECTION(filesel)); + if (str && str[0] != '\0') { + gchar *dir; + + filename = g_strdup(str); + dir = g_dirname(str); + g_free(cwd); + cwd = g_strconcat(dir, G_DIR_SEPARATOR_S, NULL); + g_free(dir); + } + } + + manage_window_focus_out(filesel, NULL, NULL); + gtk_widget_destroy(filesel); + GTK_EVENTS_FLUSH(); + + return filename; +} + +static void filesel_create(const gchar *title) +{ + filesel = gtk_file_selection_new(title); + gtk_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(filesel)->ok_button), + "clicked", GTK_SIGNAL_FUNC(filesel_ok_cb), + NULL); + gtk_signal_connect + (GTK_OBJECT(GTK_FILE_SELECTION(filesel)->cancel_button), + "clicked", GTK_SIGNAL_FUNC(filesel_cancel_cb), + NULL); + gtk_signal_connect(GTK_OBJECT(filesel), "delete_event", + GTK_SIGNAL_FUNC(filesel_cancel_cb), + NULL); + gtk_signal_connect(GTK_OBJECT(filesel), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(filesel), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(filesel), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + + gtk_window_set_modal(GTK_WINDOW(filesel), TRUE); +} + +static void filesel_ok_cb(GtkWidget *widget, gpointer data) +{ + filesel_ack = TRUE; + gtk_main_quit(); +} + +static void filesel_cancel_cb(GtkWidget *widget, gpointer data) +{ + filesel_ack = FALSE; + gtk_main_quit(); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) + filesel_cancel_cb(NULL, NULL); +} diff --git a/src/filesel.h b/src/filesel.h new file mode 100644 index 000000000..e40185852 --- /dev/null +++ b/src/filesel.h @@ -0,0 +1,27 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __FILESEL_H__ +#define __FILESEL_H__ + +#include <glib.h> + +gchar *filesel_select_file(const gchar *title, const gchar *file); + +#endif /* __FILESEL_H__ */ diff --git a/src/filter.c b/src/filter.c new file mode 100644 index 000000000..268a94ce1 --- /dev/null +++ b/src/filter.c @@ -0,0 +1,248 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> + +#include "intl.h" +#include "procheader.h" +#include "filter.h" +#include "folder.h" +#include "utils.h" + +FolderItem *filter_get_dest_folder(GSList *fltlist, const gchar *file) +{ + static FolderItem *dummy = NULL; + FolderItem *dest_folder = NULL; + GSList *hlist, *cur; + Filter *filter; + + g_return_val_if_fail(file != NULL, NULL); + if (!fltlist) return NULL; + + hlist = procheader_get_header_list(file); + if (!hlist) return NULL; + + for (cur = fltlist; cur != NULL; cur = cur->next) { + filter = (Filter *)cur->data; + if (filter_match_condition(filter, hlist)) { + if (filter->action == FLT_NOTRECV) { + if (!dummy) { + dummy = folder_item_new(NULL, NULL); + dummy->path = g_strdup(FILTER_NOT_RECEIVE); + } + dest_folder = dummy; + } else + dest_folder = folder_find_item_from_path + (filter->dest); + break; + } + } + + procheader_header_list_destroy(hlist); + + return dest_folder; +} + +static gboolean strfind(const gchar *haystack, const gchar *needle) +{ + return strstr(haystack, needle) != NULL ? TRUE : FALSE; +} + +static gboolean strnotfind(const gchar *haystack, const gchar *needle) +{ + return strstr(haystack, needle) != NULL ? FALSE : TRUE; +} + +static gboolean strcasefind(const gchar *haystack, const gchar *needle) +{ + return strcasestr(haystack, needle) != NULL ? TRUE : FALSE; +} + +static gboolean strcasenotfind(const gchar *haystack, const gchar *needle) +{ + return strcasestr(haystack, needle) != NULL ? FALSE : TRUE; +} + +gboolean filter_match_condition(Filter *filter, GSList *hlist) +{ + Header *header; + gboolean (*StrFind1) (const gchar *hs, const gchar *nd); + gboolean (*StrFind2) (const gchar *hs, const gchar *nd); + + g_return_val_if_fail(filter->name1 != NULL, FALSE); + + if (FLT_IS_CASE_SENS(filter->flag1)) + StrFind1 = FLT_IS_CONTAIN(filter->flag1) + ? strfind : strnotfind; + else + StrFind1 = FLT_IS_CONTAIN(filter->flag1) + ? strcasefind : strcasenotfind; + + if (FLT_IS_CASE_SENS(filter->flag2)) + StrFind2 = FLT_IS_CONTAIN(filter->flag2) + ? strfind : strnotfind; + else + StrFind2 = FLT_IS_CONTAIN(filter->flag2) + ? strcasefind : strcasenotfind; + + if (filter->cond == FLT_AND) { + gboolean match1 = FALSE, match2 = FALSE; + + /* ignore second condition if not set */ + if (!filter->name2) match2 = TRUE; + + for (; hlist != NULL; hlist = hlist->next) { + header = hlist->data; + + if (!match1 && + !strcasecmp(header->name, filter->name1)) { + if (!filter->body1 || + StrFind1(header->body, filter->body1)) + match1 = TRUE; + } + if (!match2 && + !strcasecmp(header->name, filter->name2)) { + if (!filter->body2 || + StrFind2(header->body, filter->body2)) + match2 = TRUE; + } + + if (match1 && match2) return TRUE; + } + } else if (filter->cond == FLT_OR) { + for (; hlist != NULL; hlist = hlist->next) { + header = hlist->data; + + if (!strcasecmp(header->name, filter->name1)) + if (!filter->body1 || + StrFind1(header->body, filter->body1)) + return TRUE; + if (filter->name2 && + !strcasecmp(header->name, filter->name2)) + if (!filter->body2 || + StrFind2(header->body, filter->body2)) + return TRUE; + } + } + + return FALSE; +} + +gchar *filter_get_str(Filter *filter) +{ + gchar *str; + + str = g_strdup_printf + ("%s\t%s\t%c\t%s\t%s\t%s\t%d\t%d\t%c", + filter->name1, filter->body1 ? filter->body1 : "", + filter->name2 ? (filter->cond == FLT_AND ? '&' : '|') : ' ', + filter->name2 ? filter->name2 : "", + filter->body2 ? filter->body2 : "", + filter->dest ? filter->dest : "", + (guint)filter->flag1, (guint)filter->flag2, + filter->action == FLT_MOVE ? 'm' : + filter->action == FLT_NOTRECV ? 'n' : + filter->action == FLT_DELETE ? 'd' : ' '); + + return str; +} + +#define PARSE_ONE_PARAM(p, srcp) \ +{ \ + p = strchr(srcp, '\t'); \ + if (!p) return NULL; \ + else \ + *p++ = '\0'; \ +} + +Filter *filter_read_str(const gchar *str) +{ + Filter *filter; + gchar *tmp; + gchar *name1, *body1, *op, *name2, *body2, *dest; + gchar *flag1 = NULL, *flag2 = NULL, *action = NULL; + + Xalloca(tmp, strlen(str) + 1, return NULL); + strcpy(tmp, str); + + name1 = tmp; + PARSE_ONE_PARAM(body1, name1); + PARSE_ONE_PARAM(op, body1); + PARSE_ONE_PARAM(name2, op); + PARSE_ONE_PARAM(body2, name2); + PARSE_ONE_PARAM(dest, body2); + if (strchr(dest, '\t')) { + gchar *p; + + PARSE_ONE_PARAM(flag1, dest); + PARSE_ONE_PARAM(flag2, flag1); + PARSE_ONE_PARAM(action, flag2); + if ((p = strchr(action, '\t'))) *p = '\0'; + } + + filter = g_new0(Filter, 1); + filter->name1 = *name1 ? g_strdup(name1) : NULL; + filter->body1 = *body1 ? g_strdup(body1) : NULL; + filter->name2 = *name2 ? g_strdup(name2) : NULL; + filter->body2 = *body2 ? g_strdup(body2) : NULL; + filter->cond = (*op == '|') ? FLT_OR : FLT_AND; + filter->dest = *dest ? g_strdup(dest) : NULL; + + filter->flag1 = FLT_CONTAIN; + filter->flag2 = FLT_CONTAIN; + if (flag1) filter->flag1 = (FilterFlag)strtoul(flag1, NULL, 10); + if (flag2) filter->flag2 = (FilterFlag)strtoul(flag2, NULL, 10); + + if (!strcmp2(dest, FILTER_NOT_RECEIVE)) + filter->action = FLT_NOTRECV; + else + filter->action = FLT_MOVE; + if (action) { + switch (*action) { + case 'm': filter->action = FLT_MOVE; break; + case 'n': filter->action = FLT_NOTRECV; break; + case 'd': filter->action = FLT_DELETE; break; + default: g_warning("Invalid action: `%c'\n", *action); + } + } + + return filter; +} + +void filter_free(Filter *filter) +{ + if (!filter) return; + + g_free(filter->name1); + g_free(filter->body1); + + g_free(filter->name2); + g_free(filter->body2); + + g_free(filter->dest); + + g_free(filter); +} diff --git a/src/filter.h b/src/filter.h new file mode 100644 index 000000000..0d4420dc7 --- /dev/null +++ b/src/filter.h @@ -0,0 +1,81 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __FILTER_H__ +#define __FILTER_H__ + +#include <glib.h> + +#include "folder.h" + +typedef struct _Filter Filter; + +typedef enum +{ + FLT_CONTAIN = 1 << 0, + FLT_CASE_SENS = 1 << 1 +} FilterFlag; + +typedef enum +{ + FLT_AND, + FLT_OR, + FLT_NOT +} FilterCond; + +typedef enum +{ + FLT_MOVE, + FLT_NOTRECV, + FLT_DELETE +} FilterAction; + +#define FLT_IS_CONTAIN(flag) ((flag & FLT_CONTAIN) != 0) +#define FLT_IS_CASE_SENS(flag) ((flag & FLT_CASE_SENS) != 0) + +struct _Filter +{ + gchar *name1; + gchar *body1; + + gchar *name2; + gchar *body2; + + FilterFlag flag1; + FilterFlag flag2; + + FilterCond cond; + + /* destination folder */ + gchar *dest; + + FilterAction action; +}; + +#define FILTER_NOT_RECEIVE "//NOT_RECEIVE//" + +FolderItem *filter_get_dest_folder (GSList *fltlist, + const gchar *file); +gboolean filter_match_condition (Filter *filter, + GSList *hlist); +gchar *filter_get_str (Filter *filter); +Filter *filter_read_str (const gchar *str); +void filter_free (Filter *filter); + +#endif /* __FILTER_H__ */ diff --git a/src/folder.c b/src/folder.c new file mode 100644 index 000000000..f4c4e181f --- /dev/null +++ b/src/folder.c @@ -0,0 +1,975 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <string.h> + +#include "intl.h" +#include "folder.h" +#include "session.h" +#include "imap.h" +#include "news.h" +#include "mh.h" +#include "utils.h" +#include "xml.h" +#include "codeconv.h" +#include "prefs.h" +#include "account.h" +#include "prefs_account.h" + +static GList *folder_list = NULL; + +static void folder_init (Folder *folder, + FolderType type, + const gchar *name); + +static void local_folder_destroy (LocalFolder *lfolder); +static void remote_folder_destroy (RemoteFolder *rfolder); +static void mh_folder_destroy (MHFolder *folder); +static void imap_folder_destroy (IMAPFolder *folder); +static void news_folder_destroy (NewsFolder *folder); + +static gboolean folder_read_folder_func (GNode *node, + gpointer data); +static gchar *folder_get_list_path (void); +static void folder_write_list_recursive (GNode *node, + gpointer data); + + +Folder *folder_new(FolderType type, const gchar *name, const gchar *path) +{ + Folder *folder = NULL; + + name = name ? name : path; + switch (type) { + case F_MH: + folder = mh_folder_new(name, path); + break; + case F_IMAP: + folder = imap_folder_new(name, path); + break; + case F_NEWS: + folder = news_folder_new(name, path); + break; + default: + return NULL; + } + + return folder; +} + +Folder *mh_folder_new(const gchar *name, const gchar *path) +{ + Folder *folder; + + folder = (Folder *)g_new0(MHFolder, 1); + folder_init(folder, F_MH, name); + LOCAL_FOLDER(folder)->rootpath = g_strdup(path); + + return folder; +} + +Folder *mbox_folder_new(const gchar *name, const gchar *path) +{ + /* not yet implemented */ + return NULL; +} + +Folder *maildir_folder_new(const gchar *name, const gchar *path) +{ + /* not yet implemented */ + return NULL; +} + +Folder *imap_folder_new(const gchar *name, const gchar *path) +{ + Folder *folder; + + folder = (Folder *)g_new0(IMAPFolder, 1); + folder_init(folder, F_IMAP, name); + + return folder; +} + +Folder *news_folder_new(const gchar *name, const gchar *path) +{ + Folder *folder; + + folder = (Folder *)g_new0(NewsFolder, 1); + folder_init(folder, F_NEWS, name); + + return folder; +} + +FolderItem *folder_item_new(const gchar *name, const gchar *path) +{ + FolderItem *item; + + item = g_new0(FolderItem, 1); + + item->stype = F_NORMAL; + item->name = g_strdup(name); + item->path = g_strdup(path); + item->account = NULL; + item->mtime = 0; + item->new = 0; + item->unread = 0; + item->total = 0; + item->last_num = -1; + item->parent = NULL; + item->folder = NULL; + item->data = NULL; + + return item; +} + +void folder_item_append(FolderItem *parent, FolderItem *item) +{ + GNode *node; + + g_return_if_fail(parent != NULL); + g_return_if_fail(parent->folder != NULL); + g_return_if_fail(item != NULL); + + node = parent->folder->node; + node = g_node_find(node, G_PRE_ORDER, G_TRAVERSE_ALL, parent); + g_return_if_fail(node != NULL); + + item->parent = parent; + item->folder = parent->folder; + g_node_append_data(node, item); +} + +void folder_item_remove(FolderItem *item) +{ + GNode *node; + + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + + node = item->folder->node; + node = g_node_find(node, G_PRE_ORDER, G_TRAVERSE_ALL, item); + g_return_if_fail(node != NULL); + + /* TODO: free all FolderItem's first */ + if (item->folder->node == node) + item->folder->node = NULL; + g_node_destroy(node); +} + +void folder_set_ui_func(Folder *folder, FolderUIFunc func, gpointer data) +{ + g_return_if_fail(folder != NULL); + + folder->ui_func = func; + folder->ui_func_data = data; +} + +void folder_set_name(Folder *folder, const gchar *name) +{ + g_return_if_fail(folder != NULL); + + g_free(folder->name); + folder->name = name ? g_strdup(name) : NULL; + if (folder->node && folder->node->data) { + FolderItem *item = (FolderItem *)folder->node->data; + + g_free(item->name); + item->name = name ? g_strdup(name) : NULL; + } +} + +void folder_destroy(Folder *folder) +{ + g_return_if_fail(folder != NULL); + + folder_list = g_list_remove(folder_list, folder); + + switch (folder->type) { + case F_MH: + mh_folder_destroy(MH_FOLDER(folder)); + break; + case F_IMAP: + imap_folder_destroy(IMAP_FOLDER(folder)); + break; + case F_NEWS: + news_folder_destroy(NEWS_FOLDER(folder)); + break; + default: + } + + folder_tree_destroy(folder); + g_free(folder->name); + g_free(folder); +} + +void folder_tree_destroy(Folder *folder) +{ + /* TODO: destroy all FolderItem before */ + g_node_destroy(folder->node); +} + +void folder_add(Folder *folder) +{ + Folder *cur_folder; + GList *cur; + gint i; + + g_return_if_fail(folder != NULL); + + for (i = 0, cur = folder_list; cur != NULL; cur = cur->next, i++) { + cur_folder = FOLDER(cur->data); + if (folder->type == F_MH) { + if (cur_folder->type != F_MH) break; + } else if (folder->type == F_IMAP) { + if (cur_folder->type != F_MH && + cur_folder->type != F_IMAP) break; + } else if (folder->type == F_NEWS) { + if (cur_folder->type != F_MH && + cur_folder->type != F_IMAP && + cur_folder->type != F_NEWS) break; + } + } + + folder_list = g_list_insert(folder_list, folder, i); +} + +GList *folder_get_list(void) +{ + return folder_list; +} + +gint folder_read_list(void) +{ + GNode *node; + XMLNode *xmlnode; + + node = xml_parse_file(folder_get_list_path()); + if (!node) return -1; + + xmlnode = node->data; + if (strcmp2(xmlnode->tag->tag, "folderlist") != 0) { + g_warning("wrong folder list\n"); + xml_free_tree(node); + return -1; + } + + g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, 2, + folder_read_folder_func, NULL); + + xml_free_tree(node); + if (folder_list) + return 0; + else + return -1; +} + +void folder_write_list(void) +{ + GList *list; + Folder *folder; + gchar *path; + PrefFile *pfile; + + path = folder_get_list_path(); + if ((pfile = prefs_write_open(path)) == NULL) return; + + fprintf(pfile->fp, "<?xml version=\"1.0\" encoding=\"%s\"?>\n", + conv_get_current_charset_str()); + fputs("\n<folderlist>\n", pfile->fp); + + for (list = folder_list; list != NULL; list = list->next) { + folder = list->data; + folder_write_list_recursive(folder->node, pfile->fp); + } + + fputs("</folderlist>\n", pfile->fp); + + if (prefs_write_close(pfile) < 0) + g_warning("failed to write folder list.\n"); +} + +Folder *folder_find_from_path(const gchar *path) +{ + GList *list; + Folder *folder; + + for (list = folder_list; list != NULL; list = list->next) { + folder = list->data; + if (folder->type == F_MH && + !path_cmp(LOCAL_FOLDER(folder)->rootpath, path)) + return folder; + } + + return NULL; +} + +static gboolean folder_item_find_func(GNode *node, gpointer data) +{ + FolderItem *item = node->data; + gpointer *d = data; + const gchar *path = d[0]; + + if (path_cmp(path, item->path) != 0) + return FALSE; + + d[1] = item; + + return TRUE; +} + +FolderItem *folder_find_item_from_path(const gchar *path) +{ + Folder *folder; + gpointer d[2]; + + folder = folder_get_default_folder(); + g_return_val_if_fail(folder != NULL, NULL); + + d[0] = (gpointer)path; + d[1] = NULL; + g_node_traverse(folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, + folder_item_find_func, d); + return d[1]; +} + +Folder *folder_get_default_folder(void) +{ + return FOLDER(folder_list->data); +} + +FolderItem *folder_get_default_inbox(void) +{ + Folder *folder; + + folder = FOLDER(folder_list->data); + g_return_val_if_fail(folder != NULL, NULL); + return folder->inbox; +} + +FolderItem *folder_get_default_outbox(void) +{ + Folder *folder; + + folder = FOLDER(folder_list->data); + g_return_val_if_fail(folder != NULL, NULL); + return folder->outbox; +} + +FolderItem *folder_get_default_draft(void) +{ + Folder *folder; + + folder = FOLDER(folder_list->data); + g_return_val_if_fail(folder != NULL, NULL); + return folder->draft; +} + +FolderItem *folder_get_default_queue(void) +{ + Folder *folder; + + folder = FOLDER(folder_list->data); + g_return_val_if_fail(folder != NULL, NULL); + return folder->queue; +} + +FolderItem *folder_get_default_trash(void) +{ + Folder *folder; + + folder = FOLDER(folder_list->data); + g_return_val_if_fail(folder != NULL, NULL); + return folder->trash; +} + +gchar *folder_item_get_path(FolderItem *item) +{ + gchar *folder_path; + gchar *path; + + g_return_val_if_fail(item != NULL, NULL); + + if (FOLDER_TYPE(item->folder) == F_MH) + folder_path = g_strdup(LOCAL_FOLDER(item->folder)->rootpath); + else if (FOLDER_TYPE(item->folder) == F_IMAP) { + g_return_val_if_fail(item->folder->account != NULL, NULL); + folder_path = g_strconcat(get_imap_cache_dir(), + G_DIR_SEPARATOR_S, + item->folder->account->recv_server, + G_DIR_SEPARATOR_S, + item->folder->account->userid, + NULL); + } else if (FOLDER_TYPE(item->folder) == F_NEWS) { + g_return_val_if_fail(item->folder->account != NULL, NULL); + folder_path = g_strconcat(get_news_cache_dir(), + G_DIR_SEPARATOR_S, + item->folder->account->nntp_server, + NULL); + } else + return NULL; + + g_return_val_if_fail(folder_path != NULL, NULL); + + if (folder_path[0] == G_DIR_SEPARATOR) { + if (item->path) + path = g_strconcat(folder_path, G_DIR_SEPARATOR_S, + item->path, NULL); + else + path = g_strdup(folder_path); + } else { + if (item->path) + path = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, + folder_path, G_DIR_SEPARATOR_S, + item->path, NULL); + else + path = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, + folder_path, NULL); + } + + g_free(folder_path); + return path; +} + +void folder_item_scan(FolderItem *item) +{ + Folder *folder; + + g_return_if_fail(item != NULL); + + folder = item->folder; + folder->scan(folder, item); +} + +static void folder_item_scan_foreach_func(gpointer key, gpointer val, + gpointer data) +{ + folder_item_scan(FOLDER_ITEM(key)); +} + +void folder_item_scan_foreach(GHashTable *table) +{ + g_hash_table_foreach(table, folder_item_scan_foreach_func, NULL); +} + +gchar *folder_item_fetch_msg(FolderItem *item, gint num) +{ + Folder *folder; + + g_return_val_if_fail(item != NULL, NULL); + + folder = item->folder; + if (item->last_num < 0) folder->scan(folder, item); + + return folder->fetch_msg(folder, item, num); +} + +gint folder_item_add_msg(FolderItem *dest, const gchar *file) +{ + Folder *folder; + gint num; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(file != NULL, -1); + g_return_val_if_fail(dest->folder->add_msg != NULL, -1); + + folder = dest->folder; + if (dest->last_num < 0) folder->scan(folder, dest); + + num = folder->add_msg(folder, dest, file); + if (num > 0) dest->last_num = num; + + return num; +} + +gint folder_item_move_msg(FolderItem *dest, MsgInfo *msginfo) +{ + Folder *folder; + gint num; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msginfo != NULL, -1); + + folder = dest->folder; + if (dest->last_num < 0) folder->scan(folder, dest); + + num = folder->move_msg(folder, dest, msginfo); + if (num > 0) dest->last_num = num; + + return num; +} + +gint folder_item_move_msgs_with_dest(FolderItem *dest, GSList *msglist) +{ + Folder *folder; + gint num; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msglist != NULL, -1); + + folder = dest->folder; + if (dest->last_num < 0) folder->scan(folder, dest); + + num = folder->move_msgs_with_dest(folder, dest, msglist); + if (num > 0) dest->last_num = num; + + return num; +} + +gint folder_item_copy_msg(FolderItem *dest, MsgInfo *msginfo) +{ + Folder *folder; + gint num; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msginfo != NULL, -1); + + folder = dest->folder; + if (dest->last_num < 0) folder->scan(folder, dest); + + num = folder->copy_msg(folder, dest, msginfo); + if (num > 0) dest->last_num = num; + + return num; +} + +gint folder_item_copy_msgs_with_dest(FolderItem *dest, GSList *msglist) +{ + Folder *folder; + gint num; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msglist != NULL, -1); + + folder = dest->folder; + if (dest->last_num < 0) folder->scan(folder, dest); + + num = folder->copy_msgs_with_dest(folder, dest, msglist); + if (num > 0) dest->last_num = num; + + return num; +} + +gint folder_item_remove_msg(FolderItem *item, gint num) +{ + Folder *folder; + + g_return_val_if_fail(item != NULL, -1); + + folder = item->folder; + if (item->last_num < 0) folder->scan(folder, item); + + return folder->remove_msg(folder, item, num); +} + +gint folder_item_remove_all_msg(FolderItem *item) +{ + Folder *folder; + + g_return_val_if_fail(item != NULL, -1); + + folder = item->folder; + if (item->last_num < 0) folder->scan(folder, item); + + return folder->remove_all_msg(folder, item); +} + +gboolean folder_item_is_msg_changed(FolderItem *item, MsgInfo *msginfo) +{ + Folder *folder; + + g_return_val_if_fail(item != NULL, FALSE); + + folder = item->folder; + return folder->is_msg_changed(folder, item, msginfo); +} + +gchar *folder_item_get_cache_file(FolderItem *item) +{ + gchar *path; + gchar *file; + + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(item->path != NULL, NULL); + + path = folder_item_get_path(item); + g_return_val_if_fail(path != NULL, NULL); + if (!is_dir_exist(path)) + make_dir_hier(path); + file = g_strconcat(path, G_DIR_SEPARATOR_S, CACHE_FILE, NULL); + g_free(path); + + return file; +} + +gchar *folder_item_get_mark_file(FolderItem *item) +{ + gchar *path; + gchar *file; + + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(item->path != NULL, NULL); + + path = folder_item_get_path(item); + g_return_val_if_fail(path != NULL, NULL); + if (!is_dir_exist(path)) + make_dir_hier(path); + file = g_strconcat(path, G_DIR_SEPARATOR_S, MARK_FILE, NULL); + g_free(path); + + return file; +} + + +static void folder_init(Folder *folder, FolderType type, const gchar *name) +{ + FolderItem *item; + + g_return_if_fail(folder != NULL); + + folder->type = type; + folder_set_name(folder, name); + folder->account = NULL; + folder->inbox = NULL; + folder->outbox = NULL; + folder->draft = NULL; + folder->queue = NULL; + folder->trash = NULL; + folder->ui_func = NULL; + folder->ui_func_data = NULL; + item = folder_item_new(name, NULL); + item->folder = folder; + folder->node = g_node_new(item); + folder->data = NULL; + + switch (type) { + case F_MH: + folder->get_msg_list = mh_get_msg_list; + folder->fetch_msg = mh_fetch_msg; + folder->add_msg = mh_add_msg; + folder->move_msg = mh_move_msg; + folder->move_msgs_with_dest = mh_move_msgs_with_dest; + folder->copy_msg = mh_copy_msg; + folder->copy_msgs_with_dest = mh_copy_msgs_with_dest; + folder->remove_msg = mh_remove_msg; + folder->remove_all_msg = mh_remove_all_msg; + folder->is_msg_changed = mh_is_msg_changed; + folder->scan = mh_scan_folder; + folder->scan_tree = mh_scan_tree; + folder->create_tree = mh_create_tree; + folder->create_folder = mh_create_folder; + folder->rename_folder = mh_rename_folder; + folder->remove_folder = mh_remove_folder; + break; + case F_IMAP: + folder->get_msg_list = imap_get_msg_list; + folder->fetch_msg = imap_fetch_msg; + folder->move_msg = imap_move_msg; + folder->move_msgs_with_dest = imap_move_msgs_with_dest; + folder->remove_msg = imap_remove_msg; + folder->remove_all_msg = imap_remove_all_msg; + folder->scan = imap_scan_folder; + folder->create_folder = imap_create_folder; + break; + case F_NEWS: + folder->get_msg_list = news_get_article_list; + folder->fetch_msg = news_fetch_msg; + folder->scan = news_scan_group; + break; + default: + } + + switch (type) { + case F_MH: + case F_MBOX: + case F_MAILDIR: + LOCAL_FOLDER(folder)->rootpath = NULL; + break; + case F_IMAP: + case F_NEWS: + REMOTE_FOLDER(folder)->session = NULL; + break; + default: + } +} + +static void local_folder_destroy(LocalFolder *lfolder) +{ + g_return_if_fail(lfolder != NULL); + + g_free(lfolder->rootpath); +} + +static void remote_folder_destroy(RemoteFolder *rfolder) +{ + g_return_if_fail(rfolder != NULL); + + if (rfolder->session) + session_destroy(rfolder->session); +} + +static void mh_folder_destroy(MHFolder *folder) +{ + local_folder_destroy(LOCAL_FOLDER(folder)); +} + +static void imap_folder_destroy(IMAPFolder *folder) +{ + remote_folder_destroy(REMOTE_FOLDER(folder)); +} + +static void news_folder_destroy(NewsFolder *folder) +{ + remote_folder_destroy(REMOTE_FOLDER(folder)); +} + +static gboolean folder_build_tree(GNode *node, gpointer data) +{ + Folder *folder = FOLDER(data); + FolderItem *item; + XMLNode *xmlnode; + GList *list; + SpecialFolderItemType stype = F_NORMAL; + const gchar *name = NULL; + const gchar *path = NULL; + PrefsAccount *account = NULL; + gint mtime = 0, new = 0, unread = 0, total = 0; + + g_return_val_if_fail(node->data != NULL, FALSE); + if (!node->parent) return FALSE; + + xmlnode = node->data; + if (strcmp2(xmlnode->tag->tag, "folderitem") != 0) { + g_warning("tag name != \"folderitem\"\n"); + return FALSE; + } + + list = xmlnode->tag->attr; + for (; list != NULL; list = list->next) { + XMLAttr *attr = list->data; + + if (!attr || !attr->name || !attr->value) continue; + if (!strcmp(attr->name, "type")) { + if (!strcasecmp(attr->value, "normal")) + stype = F_NORMAL; + else if (!strcasecmp(attr->value, "inbox")) + stype = F_INBOX; + else if (!strcasecmp(attr->value, "outbox")) + stype = F_OUTBOX; + else if (!strcasecmp(attr->value, "draft")) + stype = F_DRAFT; + else if (!strcasecmp(attr->value, "queue")) + stype = F_QUEUE; + else if (!strcasecmp(attr->value, "trash")) + stype = F_TRASH; + } else if (!strcmp(attr->name, "name")) + name = attr->value; + else if (!strcmp(attr->name, "path")) + path = attr->value; + else if (!strcmp(attr->name, "account_id")) { + account = account_find_from_id(atoi(attr->value)); + if (!account) g_warning("account_id: %s not found\n", + attr->value); + } + else if (!strcmp(attr->name, "mtime")) + mtime = atoi(attr->value); + else if (!strcmp(attr->name, "new")) + new = atoi(attr->value); + else if (!strcmp(attr->name, "unread")) + unread = atoi(attr->value); + else if (!strcmp(attr->name, "total")) + total = atoi(attr->value); + } + + item = folder_item_new(name, path); + item->stype = stype; + item->account = account; + item->mtime = mtime; + item->new = new; + item->unread = unread; + item->total = total; + item->parent = FOLDER_ITEM(node->parent->data); + item->folder = folder; + switch (stype) { + case F_INBOX: folder->inbox = item; break; + case F_OUTBOX: folder->outbox = item; break; + case F_DRAFT: folder->draft = item; break; + case F_QUEUE: folder->queue = item; break; + case F_TRASH: folder->trash = item; break; + default: + } + node->data = item; + xml_free_node(xmlnode); + + return FALSE; +} + +static gboolean folder_read_folder_func(GNode *node, gpointer data) +{ + Folder *folder; + XMLNode *xmlnode; + GList *list; + FolderType type = F_UNKNOWN; + const gchar *name = NULL; + const gchar *path = NULL; + PrefsAccount *account = NULL; + + if (g_node_depth(node) != 2) return FALSE; + g_return_val_if_fail(node->data != NULL, FALSE); + + xmlnode = node->data; + if (strcmp2(xmlnode->tag->tag, "folder") != 0) { + g_warning("tag name != \"folder\"\n"); + return TRUE; + } + g_node_unlink(node); + list = xmlnode->tag->attr; + for (; list != NULL; list = list->next) { + XMLAttr *attr = list->data; + + if (!attr || !attr->name || !attr->value) continue; + if (!strcmp(attr->name, "type")) { + if (!strcasecmp(attr->value, "mh")) + type = F_MH; + else if (!strcasecmp(attr->value, "mbox")) + type = F_MBOX; + else if (!strcasecmp(attr->value, "maildir")) + type = F_MAILDIR; + else if (!strcasecmp(attr->value, "imap")) + type = F_IMAP; + else if (!strcasecmp(attr->value, "news")) + type = F_NEWS; + } else if (!strcmp(attr->name, "name")) + name = attr->value; + else if (!strcmp(attr->name, "path")) + path = attr->value; + else if (!strcmp(attr->name, "account_id")) { + account = account_find_from_id(atoi(attr->value)); + if (!account) g_warning("account_id: %s not found\n", + attr->value); + } + } + + folder = folder_new(type, name, path); + g_return_val_if_fail(folder != NULL, FALSE); + folder->account = account; + if (account && (type == F_IMAP || type == F_NEWS)) + account->folder = REMOTE_FOLDER(folder); + node->data = folder->node->data; + g_node_destroy(folder->node); + folder->node = node; + folder_add(folder); + + g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, + folder_build_tree, folder); + + return FALSE; +} + +static gchar *folder_get_list_path(void) +{ + static gchar *filename = NULL; + + if (!filename) + filename = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + FOLDER_LIST, NULL); + + return filename; +} + +static void folder_write_list_recursive(GNode *node, gpointer data) +{ + FILE *fp = (FILE *)data; + FolderItem *item = FOLDER_ITEM(node->data); + gint i, depth; + static gchar *folder_type_str[] = {"mh", "mbox", "maildir", "imap", + "news", "unknown"}; + static gchar *folder_item_stype_str[] = {"normal", "inbox", "outbox", + "draft", "queue", "trash"}; + + g_return_if_fail(item != NULL); + + depth = g_node_depth(node); + for (i = 0; i < depth; i++) + fputs(" ", fp); + if (depth == 1) { + Folder *folder = item->folder; + + fprintf(fp, "<folder type=\"%s\"", folder_type_str[folder->type]); + if (folder->name) { + fputs(" name=\"", fp); + xml_file_put_escape_str(fp, folder->name); + fputs("\"", fp); + } + if (folder->type == F_MH) { + fputs(" path=\"", fp); + xml_file_put_escape_str + (fp, LOCAL_FOLDER(folder)->rootpath); + fputs("\"", fp); + } + if (folder->account) + fprintf(fp, " account_id=\"%d\"", + folder->account->account_id); + } else { + fprintf(fp, "<folderitem type=\"%s\"", + folder_item_stype_str[item->stype]); + if (item->name) { + fputs(" name=\"", fp); + xml_file_put_escape_str(fp, item->name); + fputs("\"", fp); + } + if (item->path) { + fputs(" path=\"", fp); + xml_file_put_escape_str(fp, item->path); + fputs("\"", fp); + } + if (item->account) + fprintf(fp, " account_id = \"%d\"", + item->account->account_id); + fprintf(fp, + " mtime=\"%ld\" new=\"%d\" unread=\"%d\" total=\"%d\"", + item->mtime, item->new, item->unread, item->total); + } + + if (node->children) { + GNode *child; + fputs(">\n", fp); + + child = node->children; + while (child) { + GNode *cur; + + cur = child; + child = cur->next; + folder_write_list_recursive(cur, data); + } + + for (i = 0; i < depth; i++) + fputs(" ", fp); + fprintf(fp, "</%s>\n", depth == 1 ? "folder" : "folderitem"); + } else + fputs(" />\n", fp); +} diff --git a/src/folder.h b/src/folder.h new file mode 100644 index 000000000..dcecf8738 --- /dev/null +++ b/src/folder.h @@ -0,0 +1,274 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __FOLDER_H__ +#define __FOLDER_H__ + +#include <glib.h> +#include <time.h> + +typedef struct _Folder Folder; +typedef struct _LocalFolder LocalFolder; +typedef struct _RemoteFolder RemoteFolder; +typedef struct _MHFolder MHFolder; +typedef struct _MboxFolder MboxFolder; +typedef struct _MaildirFolder MaildirFolder; +typedef struct _IMAPFolder IMAPFolder; +typedef struct _NewsFolder NewsFolder; +typedef struct _FolderItem FolderItem; + +#include "prefs_account.h" +#include "session.h" +#include "procmsg.h" + +#define FOLDER(obj) ((Folder *)obj) +#define FOLDER_TYPE(obj) (FOLDER(obj)->type) + +#define LOCAL_FOLDER(obj) ((LocalFolder *)obj) +#define REMOTE_FOLDER(obj) ((RemoteFolder *)obj) + +#define MH_FOLDER(obj) ((MHFolder *)obj) +#define MBOX_FOLDER(obj) ((MboxFolder *)obj) +#define MAILDIR_FOLDER(obj) ((MaildirFolder *)obj) +#define IMAP_FOLDER(obj) ((IMAPFolder *)obj) +#define NEWS_FOLDER(obj) ((NewsFolder *)obj) + +#define FOLDER_ITEM(obj) ((FolderItem *)obj) + +typedef enum +{ + F_MH, + F_MBOX, + F_MAILDIR, + F_IMAP, + F_NEWS, + F_UNKNOWN +} FolderType; + +typedef enum +{ + F_NORMAL, + F_INBOX, + F_OUTBOX, + F_DRAFT, + F_QUEUE, + F_TRASH +} SpecialFolderItemType; + +typedef void (*FolderUIFunc) (Folder *folder, + FolderItem *item, + gpointer data); +typedef void (*FolderDestroyNotify) (Folder *folder, + FolderItem *item, + gpointer data); + +struct _Folder +{ + FolderType type; + + gchar *name; + PrefsAccount *account; + + FolderItem *inbox; + FolderItem *outbox; + FolderItem *draft; + FolderItem *queue; + FolderItem *trash; + + FolderUIFunc ui_func; + gpointer ui_func_data; + + GNode *node; + + gpointer data; + + /* virtual functions */ + GSList * (*get_msg_list) (Folder *folder, + FolderItem *item, + gboolean use_cache); + gchar * (*fetch_msg) (Folder *folder, + FolderItem *item, + gint num); + gint (*add_msg) (Folder *folder, + FolderItem *dest, + const gchar *file); + gint (*move_msg) (Folder *folder, + FolderItem *dest, + MsgInfo *msginfo); + gint (*move_msgs_with_dest) (Folder *folder, + FolderItem *dest, + GSList *msglist); + gint (*copy_msg) (Folder *folder, + FolderItem *dest, + MsgInfo *msginfo); + gint (*copy_msgs_with_dest) (Folder *folder, + FolderItem *dest, + GSList *msglist); + gint (*remove_msg) (Folder *folder, + FolderItem *item, + gint num); + gint (*remove_all_msg) (Folder *folder, + FolderItem *item); + gboolean (*is_msg_changed) (Folder *folder, + FolderItem *item, + MsgInfo *msginfo); + void (*scan) (Folder *folder, + FolderItem *item); + void (*scan_tree) (Folder *folder); + + gint (*create_tree) (Folder *folder); + FolderItem * (*create_folder) (Folder *folder, + FolderItem *parent, + const gchar *name); + gint (*rename_folder) (Folder *folder, + FolderItem *item, + const gchar *name); + gint (*remove_folder) (Folder *folder, + FolderItem *item); +}; + +struct _LocalFolder +{ + Folder folder; + + gchar *rootpath; +}; + +struct _RemoteFolder +{ + Folder folder; + + Session *session; +}; + +struct _MHFolder +{ + LocalFolder lfolder; +}; + +struct _MboxFolder +{ + LocalFolder lfolder; +}; + +struct _MaildirFolder +{ + LocalFolder lfolder; +}; + +struct _IMAPFolder +{ + RemoteFolder rfolder; +}; + +struct _NewsFolder +{ + RemoteFolder rfolder; + + gboolean use_auth; +}; + +struct _FolderItem +{ + SpecialFolderItemType stype; + + gchar *name; + gchar *path; + PrefsAccount *account; + + time_t mtime; + + gint new; + gint unread; + gint total; + + gint last_num; + + FolderItem *parent; + + Folder *folder; + + gpointer data; +}; + +Folder *folder_new (FolderType type, + const gchar *name, + const gchar *path); +Folder *mh_folder_new (const gchar *name, + const gchar *path); +Folder *mbox_folder_new (const gchar *name, + const gchar *path); +Folder *maildir_folder_new (const gchar *name, + const gchar *path); +Folder *imap_folder_new (const gchar *name, + const gchar *path); +Folder *news_folder_new (const gchar *name, + const gchar *path); +FolderItem *folder_item_new (const gchar *name, + const gchar *path); +void folder_item_append (FolderItem *parent, + FolderItem *item); +void folder_item_remove (FolderItem *item); +void folder_set_ui_func (Folder *folder, + FolderUIFunc func, + gpointer data); +void folder_set_name (Folder *folder, + const gchar *name); +void folder_destroy (Folder *folder); +void folder_tree_destroy (Folder *folder); + +void folder_add (Folder *folder); + +GList *folder_get_list (void); +gint folder_read_list (void); +void folder_write_list (void); + +Folder *folder_find_from_path (const gchar *path); +FolderItem *folder_find_item_from_path (const gchar *path); +Folder *folder_get_default_folder (void); +FolderItem *folder_get_default_inbox (void); +FolderItem *folder_get_default_outbox (void); +FolderItem *folder_get_default_draft (void); +FolderItem *folder_get_default_queue (void); +FolderItem *folder_get_default_trash (void); + +gchar *folder_item_get_path (FolderItem *item); +void folder_item_scan (FolderItem *item); +void folder_item_scan_foreach (GHashTable *table); +gchar *folder_item_fetch_msg (FolderItem *item, + gint num); +gint folder_item_add_msg (FolderItem *dest, + const gchar *file); +gint folder_item_move_msg (FolderItem *dest, + MsgInfo *msginfo); +gint folder_item_move_msgs_with_dest (FolderItem *dest, + GSList *msglist); +gint folder_item_copy_msg (FolderItem *dest, + MsgInfo *msginfo); +gint folder_item_copy_msgs_with_dest (FolderItem *dest, + GSList *msglist); +gint folder_item_remove_msg (FolderItem *item, + gint num); +gint folder_item_remove_all_msg (FolderItem *item); +gboolean folder_item_is_msg_changed (FolderItem *item, + MsgInfo *msginfo); +gchar *folder_item_get_cache_file (FolderItem *item); +gchar *folder_item_get_mark_file (FolderItem *item); + +#endif /* __FOLDER_H__ */ diff --git a/src/foldersel.c b/src/foldersel.c new file mode 100644 index 000000000..22285e38b --- /dev/null +++ b/src/foldersel.c @@ -0,0 +1,290 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtksignal.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <fcntl.h> +#include <errno.h> + +#include "intl.h" +#include "main.h" +#include "utils.h" +#include "gtkutils.h" +#include "foldersel.h" +#include "alertpanel.h" +#include "manage_window.h" +#include "folder.h" + +#include "pixmaps/dir-close.xpm" +#include "pixmaps/dir-open.xpm" + +static GdkPixmap *folderxpm; +static GdkBitmap *folderxpmmask; +static GdkPixmap *folderopenxpm; +static GdkBitmap *folderopenxpmmask; + +static GtkWidget *window; +static GtkWidget *ctree; +static GtkWidget *entry; +static GtkWidget *ok_button; +static GtkWidget *cancel_button; + +static FolderItem *folder_item; + +static gboolean cancelled; + +static void foldersel_create(void); +static void foldersel_init(void); +static void foldersel_set_tree(void); +static void foldersel_selected(GtkCList *clist, gint row, gint column, + GdkEvent *event, gpointer data); + +static void foldersel_ok(GtkButton *button, gpointer data); +static void foldersel_cancel(GtkButton *button, gpointer data); +static void foldersel_activated(void); +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); + +FolderItem *foldersel_folder_sel(const gchar *default_folder) +{ + GtkCTreeNode *node; + + if (!window) { + foldersel_create(); + foldersel_init(); + } else + gtk_widget_show(window); + manage_window_set_transient(GTK_WINDOW(window)); + + foldersel_set_tree(); + + if (folder_item) { + node = gtk_ctree_find_by_row_data + (GTK_CTREE(ctree), NULL, folder_item); + if (node) { + gint row; + + row = gtkut_ctree_get_nth_from_node + (GTK_CTREE(ctree), node); + gtk_clist_select_row(GTK_CLIST(ctree), row, -1); + gtkut_clist_set_focus_row(GTK_CLIST(ctree), row); + gtk_ctree_node_moveto(GTK_CTREE(ctree), node, -1, + 0.5, 0); + } + } + gtk_widget_grab_focus(ok_button); + gtk_widget_grab_focus(ctree); + + cancelled = FALSE; + + gtk_main(); + + gtk_widget_hide(window); + gtk_entry_set_text(GTK_ENTRY(entry), ""); + gtk_clist_clear(GTK_CLIST(ctree)); + + if (!cancelled && folder_item && folder_item->path) + return folder_item; + else + return NULL; +} + +static void foldersel_create(void) +{ + GtkWidget *vbox; + GtkWidget *scrolledwin; + GtkWidget *confirm_area; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_window_set_title(GTK_WINDOW(window), _("Select folder")); + gtk_widget_set_usize(window, 300, 400); + gtk_container_set_border_width(GTK_CONTAINER(window), BORDER_WIDTH); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, TRUE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(foldersel_cancel), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + + vbox = gtk_vbox_new(FALSE, 4); + gtk_container_add(GTK_CONTAINER(window), vbox); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); + + ctree = gtk_ctree_new(1, 0); + gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_CLIST(ctree)->vadjustment); + gtk_container_add(GTK_CONTAINER(scrolledwin), ctree); + gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE); + gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED); + gtk_ctree_set_expander_style(GTK_CTREE(ctree), + GTK_CTREE_EXPANDER_SQUARE); + gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT); + GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[0].button, + GTK_CAN_FOCUS); + //gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", + // GTK_SIGNAL_FUNC(foldersel_selected), NULL); + gtk_signal_connect(GTK_OBJECT(ctree), "select_row", + GTK_SIGNAL_FUNC(foldersel_selected), NULL); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(entry), "activate", + GTK_SIGNAL_FUNC(foldersel_activated), NULL); + + gtkut_button_set_create(&confirm_area, + &ok_button, _("OK"), + &cancel_button, _("Cancel"), + NULL, NULL); + + gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_button); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(foldersel_ok), NULL); + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(foldersel_cancel), NULL); + + gtk_widget_show_all(window); +} + +static void foldersel_init(void) +{ + PIXMAP_CREATE(ctree, folderxpm, folderxpmmask, DIRECTORY_CLOSE_XPM); + PIXMAP_CREATE(ctree, folderopenxpm, folderopenxpmmask, + DIRECTORY_OPEN_XPM); +} + +static gboolean foldersel_gnode_func(GtkCTree *ctree, guint depth, + GNode *gnode, GtkCTreeNode *cnode, + gpointer data) +{ + FolderItem *item = FOLDER_ITEM(gnode->data); + + gtk_ctree_node_set_row_data(ctree, cnode, item); + gtk_ctree_set_node_info(ctree, cnode, item->name, + FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + + return TRUE; +} + +static void foldersel_expand_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + if (GTK_CTREE_ROW(node)->children) + gtk_ctree_expand(ctree, node); +} + +static void foldersel_set_tree(void) +{ + Folder *folder; + GtkCTreeNode *node; + GList *list; + + list = folder_get_list(); + + gtk_clist_freeze(GTK_CLIST(ctree)); + + for (; list != NULL; list = list->next) { + folder = FOLDER(list->data); + g_return_if_fail(folder != NULL); + + if (folder->type != F_MH) continue; + + node = gtk_ctree_insert_gnode(GTK_CTREE(ctree), NULL, NULL, + folder->node, + foldersel_gnode_func, + NULL); + gtk_ctree_sort_recursive(GTK_CTREE(ctree), node); + gtk_ctree_pre_recursive(GTK_CTREE(ctree), node, + foldersel_expand_func, + NULL); + } + + gtk_clist_thaw(GTK_CLIST(ctree)); +} + +static void foldersel_selected(GtkCList *clist, gint row, gint column, + GdkEvent *event, gpointer data) +{ + FolderItem *item; + GdkEventButton *ev = (GdkEventButton *)event; + + item = gtk_clist_get_row_data(clist, row); + if (item) gtk_entry_set_text(GTK_ENTRY(entry), + item->path ? item->path : ""); + + if (ev && GDK_2BUTTON_PRESS == ev->type) + gtk_button_clicked(GTK_BUTTON(ok_button)); +} + +static void foldersel_ok(GtkButton *button, gpointer data) +{ + GList *list; + + list = GTK_CLIST(ctree)->selection; + if (list) + folder_item = gtk_ctree_node_get_row_data + (GTK_CTREE(ctree), GTK_CTREE_NODE(list->data)); + + gtk_main_quit(); +} + +static void foldersel_cancel(GtkButton *button, gpointer data) +{ + cancelled = TRUE; + gtk_main_quit(); +} + +static void foldersel_activated(void) +{ + gtk_button_clicked(GTK_BUTTON(ok_button)); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) + foldersel_cancel(NULL, NULL); +} diff --git a/src/foldersel.h b/src/foldersel.h new file mode 100644 index 000000000..c8fc16e97 --- /dev/null +++ b/src/foldersel.h @@ -0,0 +1,30 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __FOLDERSEL_H__ +#define __FOLDERSEL_H__ + +#include <glib.h> +#include <gtk/gtkwindow.h> + +#include "folder.h" + +FolderItem *foldersel_folder_sel(const gchar *default_folder); + +#endif /* __FOLDERSEL_H__ */ diff --git a/src/folderview.c b/src/folderview.c new file mode 100644 index 000000000..b5ca4eba3 --- /dev/null +++ b/src/folderview.c @@ -0,0 +1,1655 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkcontainer.h> +#include <gtk/gtkclist.h> +#include <gtk/gtkstyle.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkstatusbar.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkmenuitem.h> +#include <gtk/gtkitemfactory.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +#include "intl.h" +#include "main.h" +#include "mainwindow.h" +#include "folderview.h" +#include "summaryview.h" +#include "inputdialog.h" +#include "manage_window.h" +#include "alertpanel.h" +#include "menu.h" +#include "procmsg.h" +#include "utils.h" +#include "gtkutils.h" +#include "prefs_common.h" +#include "prefs_account.h" +#include "account.h" +#include "folder.h" + +#include "pixmaps/inbox.xpm" +#include "pixmaps/outbox.xpm" +#include "pixmaps/dir-close.xpm" +#include "pixmaps/dir-open.xpm" +#include "pixmaps/trash.xpm" + +typedef enum +{ + COL_FOLDER = 0, + COL_NEW = 1, + COL_UNREAD = 2, + COL_TOTAL = 3 +} FolderColumnPos; + +#define N_FOLDER_COLS 4 +#define COL_FOLDER_WIDTH 150 +#define COL_NUM_WIDTH 32 + +#define STATUSBAR_PUSH(mainwin, str) \ +{ \ + gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \ + mainwin->folderview_cid, str); \ + gtkut_widget_wait_for_draw(mainwin->hbox_stat); \ +} + +#define STATUSBAR_POP(mainwin) \ +{ \ + gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \ + mainwin->folderview_cid); \ +} + +static GList *folderview_list = NULL; + +static GdkFont *normalfont; +static GdkFont *boldfont; + +static GdkPixmap *inboxxpm; +static GdkBitmap *inboxxpmmask; +static GdkPixmap *outboxxpm; +static GdkBitmap *outboxxpmmask; +static GdkPixmap *folderxpm; +static GdkBitmap *folderxpmmask; +static GdkPixmap *folderopenxpm; +static GdkBitmap *folderopenxpmmask; +static GdkPixmap *trashxpm; +static GdkBitmap *trashxpmmask; + +static void folderview_select_node (FolderView *folderview, + GtkCTreeNode *node); +static void folderview_set_folders (FolderView *folderview); +static void folderview_sort_folders (FolderView *folderview, + GtkCTreeNode *root, + Folder *folder); +static void folderview_append_folder (FolderView *folderview, + Folder *folder); +static void folderview_update_node (FolderView *folderview, + GtkCTreeNode *node); + +static GtkCTreeNode *folderview_find_by_name (GtkCTree *ctree, + GtkCTreeNode *node, + const gchar *name); + +static gint folderview_compare_name (gconstpointer a, + gconstpointer b); + +/* callback functions */ +static void folderview_button_pressed (GtkWidget *ctree, + GdkEventButton *event, + FolderView *folderview); +static void folderview_button_released (GtkWidget *ctree, + GdkEventButton *event, + FolderView *folderview); +static void folderview_key_pressed (GtkWidget *widget, + GdkEventKey *event, + FolderView *folderview); +static void folderview_selected (GtkCTree *ctree, + GtkCTreeNode *row, + gint column, + FolderView *folderview); +static void folderview_popup_close (GtkMenuShell *menu_shell, + FolderView *folderview); +static void folderview_col_resized (GtkCList *clist, + gint column, + gint width, + FolderView *folderview); + +static void folderview_new_folder_cb (FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_rename_folder_cb (FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_delete_folder_cb (FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_remove_mailbox_cb(FolderView *folderview, + guint action, + GtkWidget *widget); + +static void folderview_new_imap_folder_cb(FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_rm_imap_folder_cb (FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_rm_imap_server_cb (FolderView *folderview, + guint action, + GtkWidget *widget); + +static void folderview_new_news_group_cb(FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_rm_news_group_cb (FolderView *folderview, + guint action, + GtkWidget *widget); +static void folderview_rm_news_server_cb(FolderView *folderview, + guint action, + GtkWidget *widget); + +static gboolean folderview_drag_motion_cb(GtkWidget *widget, + GdkDragContext *context, + gint x, + gint y, + guint time, + FolderView *folderview); +static void folderview_drag_leave_cb (GtkWidget *widget, + GdkDragContext *context, + guint time, + FolderView *folderview); +static void folderview_drag_received_cb (GtkWidget *widget, + GdkDragContext *drag_context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + FolderView *folderview); + +static GtkItemFactoryEntry folderview_mail_popup_entries[] = +{ + {N_("/Create _new folder..."), NULL, folderview_new_folder_cb, 0, NULL}, + {N_("/_Rename folder..."), NULL, folderview_rename_folder_cb, 0, NULL}, + {N_("/_Delete folder"), NULL, folderview_delete_folder_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/Remove _mailbox"), NULL, folderview_remove_mailbox_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Property..."), NULL, NULL, 0, NULL} +}; + +static GtkItemFactoryEntry folderview_imap_popup_entries[] = +{ + {N_("/Create _new folder..."), NULL, folderview_new_imap_folder_cb, 0, NULL}, + {N_("/_Rename folder..."), NULL, NULL, 0, NULL}, + {N_("/_Delete folder"), NULL, folderview_rm_imap_folder_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/Remove _IMAP4 server"), NULL, folderview_rm_imap_server_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Property..."), NULL, NULL, 0, NULL} +}; + +static GtkItemFactoryEntry folderview_news_popup_entries[] = +{ + {N_("/_Subscribe to newsgroup..."), + NULL, folderview_new_news_group_cb, 0, NULL}, + {N_("/_Remove newsgroup"), NULL, folderview_rm_news_group_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/Remove _news server"), NULL, folderview_rm_news_server_cb, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Property..."), NULL, NULL, 0, NULL} +}; + + +FolderView *folderview_create(void) +{ + FolderView *folderview; + GtkWidget *scrolledwin; + GtkWidget *ctree; + gchar *titles[N_FOLDER_COLS] = {_("Folder"), _("New"), + _("Unread"), _("#")}; + GtkWidget *mail_popup; + GtkWidget *news_popup; + GtkWidget *imap_popup; + GtkItemFactory *mail_factory; + GtkItemFactory *news_factory; + GtkItemFactory *imap_factory; + gint n_entries; + gint i; + + debug_print(_("Creating folder view...\n")); + folderview = g_new0(FolderView, 1); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_ALWAYS); + gtk_widget_set_usize(scrolledwin, + prefs_common.folderview_width, + prefs_common.folderview_height); + // COL_FOLDER_WIDTH + COL_NUM_WIDTH - 3, -1); + + ctree = gtk_ctree_new_with_titles(N_FOLDER_COLS, COL_FOLDER, titles); + gtk_container_add(GTK_CONTAINER(scrolledwin), ctree); + gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE); + gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_NEW, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_UNREAD, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_TOTAL, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_width(GTK_CLIST(ctree), COL_FOLDER, + prefs_common.folder_col_folder); + gtk_clist_set_column_width(GTK_CLIST(ctree), COL_NEW, + prefs_common.folder_col_new); + gtk_clist_set_column_width(GTK_CLIST(ctree), COL_UNREAD, + prefs_common.folder_col_unread); + gtk_clist_set_column_width(GTK_CLIST(ctree), COL_TOTAL, + prefs_common.folder_col_total); + gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED); + gtk_ctree_set_expander_style(GTK_CTREE(ctree), + GTK_CTREE_EXPANDER_SQUARE); + gtk_ctree_set_indent(GTK_CTREE(ctree), CTREE_INDENT); + //gtk_clist_set_reorderable(GTK_CLIST(ctree), TRUE); + /* don't let title buttons take key focus */ + for (i = 0; i < N_FOLDER_COLS; i++) + GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button, + GTK_CAN_FOCUS); + + /* popup menu */ + n_entries = sizeof(folderview_mail_popup_entries) / + sizeof(folderview_mail_popup_entries[0]); + mail_popup = menu_create_items(folderview_mail_popup_entries, + n_entries, + "<MailFolder>", &mail_factory, + folderview); + n_entries = sizeof(folderview_imap_popup_entries) / + sizeof(folderview_imap_popup_entries[0]); + imap_popup = menu_create_items(folderview_imap_popup_entries, + n_entries, + "<IMAPFolder>", &imap_factory, + folderview); + n_entries = sizeof(folderview_news_popup_entries) / + sizeof(folderview_news_popup_entries[0]); + news_popup = menu_create_items(folderview_news_popup_entries, + n_entries, + "<NewsFolder>", &news_factory, + folderview); + + gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", + GTK_SIGNAL_FUNC(folderview_key_pressed), + folderview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", + GTK_SIGNAL_FUNC(folderview_button_pressed), + folderview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", + GTK_SIGNAL_FUNC(folderview_button_released), + folderview); + gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", + GTK_SIGNAL_FUNC(folderview_selected), folderview); + gtk_signal_connect(GTK_OBJECT(ctree), "resize_column", + GTK_SIGNAL_FUNC(folderview_col_resized), + folderview); + + gtk_signal_connect(GTK_OBJECT(mail_popup), "selection_done", + GTK_SIGNAL_FUNC(folderview_popup_close), + folderview); + gtk_signal_connect(GTK_OBJECT(imap_popup), "selection_done", + GTK_SIGNAL_FUNC(folderview_popup_close), + folderview); + gtk_signal_connect(GTK_OBJECT(news_popup), "selection_done", + GTK_SIGNAL_FUNC(folderview_popup_close), + folderview); + + /* drop callback */ + gtk_drag_dest_set(ctree, GTK_DEST_DEFAULT_ALL & + ~GTK_DEST_DEFAULT_HIGHLIGHT, + summary_drag_types, 1, + GDK_ACTION_MOVE); + gtk_signal_connect(GTK_OBJECT(ctree), "drag_motion", + GTK_SIGNAL_FUNC(folderview_drag_motion_cb), + folderview); + gtk_signal_connect(GTK_OBJECT(ctree), "drag_leave", + GTK_SIGNAL_FUNC(folderview_drag_leave_cb), + folderview); + gtk_signal_connect(GTK_OBJECT(ctree), "drag_data_received", + GTK_SIGNAL_FUNC(folderview_drag_received_cb), + folderview); + + folderview->scrolledwin = scrolledwin; + folderview->ctree = ctree; + folderview->mail_popup = mail_popup; + folderview->mail_factory = mail_factory; + folderview->imap_popup = imap_popup; + folderview->imap_factory = imap_factory; + folderview->news_popup = news_popup; + folderview->news_factory = news_factory; + + gtk_widget_show_all(scrolledwin); + + folderview_list = g_list_append(folderview_list, folderview); + + return folderview; +} + +void folderview_init(FolderView *folderview) +{ + GtkWidget *ctree = folderview->ctree; + + PIXMAP_CREATE(ctree, inboxxpm, inboxxpmmask, inbox_xpm); + PIXMAP_CREATE(ctree, outboxxpm, outboxxpmmask, outbox_xpm); + PIXMAP_CREATE(ctree, folderxpm, folderxpmmask, DIRECTORY_CLOSE_XPM); + PIXMAP_CREATE(ctree, folderopenxpm, folderopenxpmmask, + DIRECTORY_OPEN_XPM); + PIXMAP_CREATE(ctree, trashxpm, trashxpmmask, trash_xpm); + + if (!normalfont) + normalfont = gdk_fontset_load(NORMAL_FONT); + if (!boldfont) + boldfont = gdk_fontset_load(BOLD_FONT); +} + +void folderview_set(FolderView *folderview) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + MainWindow *mainwin = folderview->mainwin; + + debug_print(_("Setting folder info...\n")); + STATUSBAR_PUSH(mainwin, _("Setting folder info...")); + + main_window_cursor_wait(mainwin); + + folderview->selected = NULL; + folderview->opened = NULL; + + gtk_clist_freeze(GTK_CLIST(ctree)); + gtk_clist_clear(GTK_CLIST(ctree)); + gtk_clist_thaw(GTK_CLIST(ctree)); + gtk_clist_freeze(GTK_CLIST(ctree)); + + folderview_set_folders(folderview); + + gtk_clist_thaw(GTK_CLIST(ctree)); + main_window_cursor_normal(mainwin); + STATUSBAR_POP(mainwin); +} + +void folderview_select(FolderView *folderview, FolderItem *item) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + GtkCTreeNode *node; + + if (!item) return; + + node = gtk_ctree_find_by_row_data(ctree, NULL, item); + if (node) folderview_select_node(folderview, node); +} + +static void folderview_select_node(FolderView *folderview, GtkCTreeNode *node) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + + g_return_if_fail(node != NULL); + + folderview->open_folder = TRUE; + gtk_ctree_select(ctree, node); + gtkut_ctree_set_focus_row(ctree, node); + if (folderview->summaryview->messages > 0) + gtk_widget_grab_focus(folderview->summaryview->ctree); + else + gtk_widget_grab_focus(folderview->ctree); +} + +void folderview_unselect(FolderView *folderview) +{ + if (folderview->opened && !GTK_CTREE_ROW(folderview->opened)->children) + gtk_ctree_collapse + (GTK_CTREE(folderview->ctree), folderview->opened); + + folderview->selected = folderview->opened = NULL; +} + +void folderview_select_next_unread(FolderView *folderview) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + GtkCTreeNode *node; + FolderItem *item; + + if (folderview->opened) + node = GTK_CTREE_NODE_NEXT(folderview->opened); + else + node = gtk_ctree_node_nth(ctree, 1); + + for (; node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { + item = gtk_ctree_node_get_row_data(ctree, node); + if (item && (item->unread > 0 || item->new > 0) && + item->stype != F_TRASH) { + folderview_select_node(folderview, node); + return; + } + } + if (!folderview->opened) return; + /* search again from the first node */ + for (node = gtk_ctree_node_nth(ctree, 1); node != NULL; + node = GTK_CTREE_NODE_NEXT(node)) { + item = gtk_ctree_node_get_row_data(ctree, node); + if (item && (item->unread > 0 || item->new > 0) && + item->stype != F_TRASH) { + folderview_select_node(folderview, node); + return; + } + } +} + +void folderview_update_msg_num(FolderView *folderview, GtkCTreeNode *row, + gint new, gint unread, gint total) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + static GtkCTreeNode *prev_row = NULL; + FolderItem *item; + + if (!row) return; + + item = gtk_ctree_node_get_row_data(ctree, row); + if (!item) return; + if (prev_row == row && + item->new == new && + item->unread == unread && + item->total == total) + return; + + prev_row = row; + + item->new = new; + item->unread = unread; + item->total = total; + + folderview_update_node(folderview, row); +} + +static void folderview_set_folders(FolderView *folderview) +{ + GList *list; + + list = folder_get_list(); + + for (; list != NULL; list = list->next) + folderview_append_folder(folderview, FOLDER(list->data)); +} + +static void folderview_scan_tree_func(Folder *folder, FolderItem *item, + gpointer data) +{ + GList *list; + + for (list = folderview_list; list != NULL; list = list->next) { + FolderView *folderview = (FolderView *)list->data; + MainWindow *mainwin = folderview->mainwin; + gchar *str; + + if (item->path) + str = g_strdup_printf(_("Scanning folder %s%c%s ..."), + LOCAL_FOLDER(folder)->rootpath, + G_DIR_SEPARATOR, + item->path); + else + str = g_strdup_printf(_("Scanning folder %s ..."), + LOCAL_FOLDER(folder)->rootpath); + + STATUSBAR_PUSH(mainwin, str); + STATUSBAR_POP(mainwin); + g_free(str); + } +} + +static GtkWidget *label_window_create(const gchar *str) +{ + GtkWidget *window; + GtkWidget *label; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_widget_set_usize(window, 380, 60); + gtk_container_set_border_width(GTK_CONTAINER(window), 8); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_title(GTK_WINDOW(window), str); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); + manage_window_set_transient(GTK_WINDOW(window)); + + label = gtk_label_new(str); + gtk_container_add(GTK_CONTAINER(window), label); + gtk_widget_show(label); + + gtk_widget_show_now(window); + + return window; +} + +void folderview_update_all(void) +{ + GList *list; + GtkWidget *window; + + window = label_window_create(_("Updating all folders...")); + + list = folder_get_list(); + for (; list != NULL; list = list->next) { + Folder *folder = list->data; + + if (!folder->scan_tree) continue; + folder_set_ui_func(folder, folderview_scan_tree_func, NULL); + folder->scan_tree(folder); + folder_set_ui_func(folder, NULL, NULL); + } + + folder_write_list(); + + for (list = folderview_list; list != NULL; list = list->next) { + FolderView *folderview = (FolderView *)list->data; + + folderview_set(folderview); + } + + gtk_widget_destroy(window); +} + +static void folderview_update_node(FolderView *folderview, GtkCTreeNode *node) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + GtkStyle *style, *prev_style, *ctree_style; + FolderItem *item; + GdkPixmap *xpm, *openxpm; + GdkBitmap *mask, *openmask; + gchar *name; + + item = gtk_ctree_node_get_row_data(ctree, node); + g_return_if_fail(item != NULL); + + switch (item->stype) { + case F_INBOX: + xpm = openxpm = inboxxpm; + mask = openmask = inboxxpmmask; + name = g_strdup(_("Inbox")); + break; + case F_OUTBOX: + xpm = openxpm = outboxxpm; + mask = openmask = outboxxpmmask; + name = g_strdup(_("Outbox")); + break; + case F_QUEUE: + xpm = openxpm = outboxxpm; + mask = openmask = outboxxpmmask; + name = g_strdup(_("Queue")); + break; + case F_TRASH: + xpm = openxpm = trashxpm; + mask = openmask = trashxpmmask; + name = g_strdup(_("Trash")); + break; + case F_DRAFT: + xpm = folderxpm; + mask = folderxpmmask; + openxpm = folderopenxpm; + openmask = folderopenxpmmask; + name = g_strdup(_("Draft")); + break; + default: + xpm = folderxpm; + mask = folderxpmmask; + openxpm = folderopenxpm; + openmask = folderopenxpmmask; + if (!item->parent) { + switch (item->folder->type) { + case F_MH: + name = " (MH)"; break; + case F_IMAP: + name = " (IMAP4)"; break; + case F_NEWS: + name = " (News)"; break; + default: + name = ""; + } + name = g_strconcat(item->name, name, NULL); + } else + name = g_strdup(item->name); + } + if (item->unread > 0 && prefs_common.display_folder_unread) { + gchar *str; + + str = g_strdup_printf("%s (%d)", name, item->unread); + gtk_ctree_set_node_info(ctree, node, str, FOLDER_SPACING, + xpm, mask, openxpm, openmask, + FALSE, GTK_CTREE_ROW(node)->expanded); + g_free(str); + } else + gtk_ctree_set_node_info(ctree, node, name, FOLDER_SPACING, + xpm, mask, openxpm, openmask, + FALSE, GTK_CTREE_ROW(node)->expanded); + g_free(name); + + if (!item->parent) { + gtk_ctree_node_set_text(ctree, node, COL_NEW, "-"); + gtk_ctree_node_set_text(ctree, node, COL_UNREAD, "-"); + gtk_ctree_node_set_text(ctree, node, COL_TOTAL, "-"); + return; + } else { + gtk_ctree_node_set_text(ctree, node, COL_NEW, itos(item->new)); + gtk_ctree_node_set_text(ctree, node, COL_UNREAD, itos(item->unread)); + gtk_ctree_node_set_text(ctree, node, COL_TOTAL, itos(item->total)); + } + + if (item->stype == F_TRASH) return; + + ctree_style = gtk_widget_get_style(GTK_WIDGET(ctree)); + prev_style = gtk_ctree_node_get_row_style(ctree, node); + if (!prev_style) + prev_style = ctree_style; + style = gtk_style_copy(prev_style); + + if (style) { + /* if unread messages exist, print with bold font */ + if (item->unread > 0 && boldfont) + style->font = boldfont; + else + style->font = ctree_style->font; + + /* if new messages exist, print with colored letter */ + if (item->new > 0) { + style->fg[GTK_STATE_NORMAL] = folderview->color_new; + style->fg[GTK_STATE_SELECTED] = folderview->color_new; + } else { + style->fg[GTK_STATE_NORMAL] = + ctree_style->fg[GTK_STATE_NORMAL]; + style->fg[GTK_STATE_SELECTED] = + ctree_style->fg[GTK_STATE_SELECTED]; + } + + gtk_ctree_node_set_row_style(ctree, node, style); + } +} + +void folderview_update_item(FolderItem *item, gboolean update_summary) +{ + GList *list; + FolderView *folderview; + GtkCTree *ctree; + GtkCTreeNode *node; + + g_return_if_fail(item != NULL); + + for (list = folderview_list; list != NULL; list = list->next) { + folderview = (FolderView *)list->data; + ctree = GTK_CTREE(folderview->ctree); + + node = gtk_ctree_find_by_row_data(ctree, NULL, item); + if (node) { + folderview_update_node(folderview, node); + if (update_summary && folderview->opened == node) + summary_show(folderview->summaryview, + item, FALSE); + } + } +} + +static void folderview_update_item_foreach_func(gpointer key, gpointer val, + gpointer data) +{ + folderview_update_item((FolderItem *)key, FALSE); +} + +void folderview_update_item_foreach(GHashTable *table) +{ + g_hash_table_foreach(table, folderview_update_item_foreach_func, NULL); +} + +static gboolean folderview_gnode_func(GtkCTree *ctree, guint depth, + GNode *gnode, GtkCTreeNode *cnode, + gpointer data) +{ + FolderView *folderview = (FolderView *)data; + FolderItem *item = FOLDER_ITEM(gnode->data); + + g_return_val_if_fail(item != NULL, FALSE); + + gtk_ctree_node_set_row_data(ctree, cnode, item); + folderview_update_node(folderview, cnode); + + return TRUE; +} + +static void folderview_expand_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + if (GTK_CTREE_ROW(node)->children) + gtk_ctree_expand(ctree, node); +} + +#define SET_SPECIAL_FOLDER(ctree, item) \ +{ \ + if (item) { \ + GtkCTreeNode *node, *sibling; \ + \ + node = gtk_ctree_find_by_row_data(ctree, root, item); \ + if (!node) \ + g_warning("%s not found.\n", item->path); \ + else { \ + if (!prev) \ + sibling = GTK_CTREE_ROW(root)->children; \ + else \ + sibling = GTK_CTREE_ROW(prev)->sibling; \ + if (node != sibling) \ + gtk_ctree_move(ctree, node, root, sibling); \ + } \ + \ + prev = node; \ + } \ +} + +static void folderview_sort_folders(FolderView *folderview, GtkCTreeNode *root, + Folder *folder) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + GtkCTreeNode *prev = NULL; + + gtk_ctree_sort_recursive(ctree, root); + + if (GTK_CTREE_ROW(root)->parent) return; + + SET_SPECIAL_FOLDER(ctree, folder->inbox); + SET_SPECIAL_FOLDER(ctree, folder->outbox); + SET_SPECIAL_FOLDER(ctree, folder->draft); + SET_SPECIAL_FOLDER(ctree, folder->queue); + SET_SPECIAL_FOLDER(ctree, folder->trash); +} + +static void folderview_append_folder(FolderView *folderview, Folder *folder) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + GtkCTreeNode *root; + + g_return_if_fail(folder != NULL); + + root = gtk_ctree_insert_gnode(ctree, NULL, NULL, folder->node, + folderview_gnode_func, folderview); + gtk_ctree_pre_recursive(ctree, root, folderview_expand_func, + folderview); + folderview_sort_folders(folderview, root, folder); +} + +void folderview_new_folder(FolderView *folderview) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + + switch (item->folder->type) { + case F_MH: + case F_MBOX: + case F_MAILDIR: + folderview_new_folder_cb(folderview, 0, NULL); + break; + case F_IMAP: + folderview_new_imap_folder_cb(folderview, 0, NULL); + break; + case F_NEWS: + default: + break; + } +} + +void folderview_rename_folder(FolderView *folderview) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + if (!item->path) return; + if (item->stype != F_NORMAL) return; + + switch (item->folder->type) { + case F_MH: + case F_MBOX: + case F_MAILDIR: + folderview_rename_folder_cb(folderview, 0, NULL); + break; + case F_IMAP: + case F_NEWS: + default: + break; + } +} + +void folderview_delete_folder(FolderView *folderview) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + if (!item->path) return; + if (item->stype != F_NORMAL) return; + + switch (item->folder->type) { + case F_MH: + case F_MBOX: + case F_MAILDIR: + folderview_delete_folder_cb(folderview, 0, NULL); + break; + case F_IMAP: + folderview_rm_imap_folder_cb(folderview, 0, NULL); + case F_NEWS: + default: + break; + } +} + + +/* callback functions */ + +static void folderview_button_pressed(GtkWidget *ctree, GdkEventButton *event, + FolderView *folderview) +{ + GtkCList *clist = GTK_CLIST(ctree); + gint prev_row = -1, row = -1, column = -1; + FolderItem *item; + Folder *folder; + + if (!event) return; + + if (event->button == 1) { + folderview->open_folder = TRUE; + return; + } + + if (event->button == 2 || event->button == 3) { + /* right clicked */ + if (clist->selection) { + GtkCTreeNode *node; + + node = GTK_CTREE_NODE(clist->selection->data); + if (node) + prev_row = gtkut_ctree_get_nth_from_node + (GTK_CTREE(ctree), node); + } + + if (!gtk_clist_get_selection_info(clist, event->x, event->y, + &row, &column)) + return; + if (prev_row != row) { + gtk_clist_unselect_all(clist); + if (event->button == 2) + folderview_select_node + (folderview, + gtk_ctree_node_nth(GTK_CTREE(ctree), + row)); + else + gtk_clist_select_row(clist, row, column); + } + } + + if (event->button != 3) return; + + item = gtk_clist_get_row_data(clist, row); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + folder = item->folder; + + menu_set_insensitive_all(GTK_MENU_SHELL(folderview->mail_popup)); + menu_set_insensitive_all(GTK_MENU_SHELL(folderview->imap_popup)); + menu_set_insensitive_all(GTK_MENU_SHELL(folderview->news_popup)); + + if (folder->type == F_MH && item->parent == NULL) { + menu_set_sensitive(folderview->mail_factory, + "/Create new folder...", TRUE); + menu_set_sensitive(folderview->mail_factory, + "/Remove mailbox", TRUE); + } else if (folder->type == F_MH && item->stype != F_NORMAL) { + menu_set_sensitive(folderview->mail_factory, + "/Create new folder...", TRUE); + } else if (folder->type == F_MH) { + menu_set_sensitive(folderview->mail_factory, + "/Create new folder...", TRUE); + menu_set_sensitive(folderview->mail_factory, + "/Rename folder...", TRUE); + menu_set_sensitive(folderview->mail_factory, + "/Delete folder", TRUE); + } else if (folder->type == F_IMAP && item->parent == NULL) { + menu_set_sensitive(folderview->imap_factory, + "/Create new folder...", TRUE); + menu_set_sensitive(folderview->imap_factory, + "/Remove IMAP4 server", TRUE); + } else if (folder->type == F_IMAP && item->parent != NULL) { + menu_set_sensitive(folderview->imap_factory, + "/Create new folder...", TRUE); + menu_set_sensitive(folderview->imap_factory, + "/Delete folder", TRUE); + } else if (folder->type == F_NEWS && item->parent == NULL) { + menu_set_sensitive(folderview->news_factory, + "/Subscribe to newsgroup...", TRUE); + menu_set_sensitive(folderview->news_factory, + "/Remove news server", TRUE); + } else if (folder->type == F_NEWS && item->parent != NULL) { + menu_set_sensitive(folderview->news_factory, + "/Subscribe to newsgroup...", TRUE); + menu_set_sensitive(folderview->news_factory, + "/Remove newsgroup", TRUE); + } + + if (folder->type == F_MH) + gtk_menu_popup(GTK_MENU(folderview->mail_popup), NULL, NULL, + NULL, NULL, event->button, event->time); + else if (folder->type == F_IMAP) + gtk_menu_popup(GTK_MENU(folderview->imap_popup), NULL, NULL, + NULL, NULL, event->button, event->time); + else if (folder->type == F_NEWS) + gtk_menu_popup(GTK_MENU(folderview->news_popup), NULL, NULL, + NULL, NULL, event->button, event->time); +} + +static void folderview_button_released(GtkWidget *ctree, GdkEventButton *event, + FolderView *folderview) +{ + if (!event) return; + + if (event->button == 1 && folderview->opened != NULL) { + gtk_ctree_select(GTK_CTREE(ctree), folderview->opened); + gtkut_ctree_set_focus_row(GTK_CTREE(ctree), + folderview->opened); + } +} + +#define BREAK_ON_MODIFIER_KEY() \ + if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break + +static void folderview_key_pressed(GtkWidget *widget, GdkEventKey *event, + FolderView *folderview) +{ + if (!event) return; + + switch (event->keyval) { + case GDK_Return: + case GDK_space: + if (folderview->selected) { + folderview_select_node(folderview, + folderview->selected); + } + break; + case GDK_v: + case GDK_V: + case GDK_g: + case GDK_G: + case GDK_x: + case GDK_X: + case GDK_w: + case GDK_D: + case GDK_Q: + BREAK_ON_MODIFIER_KEY(); + summary_pass_key_press_event(folderview->summaryview, event); + default: + } +} + +static void folderview_selected(GtkCTree *ctree, GtkCTreeNode *row, + gint column, FolderView *folderview) +{ + static gboolean can_select = TRUE; /* exclusive lock */ + FolderItem *item; + + folderview->selected = row; + + if (folderview->opened == row) { + folderview->open_folder = FALSE; + return; + } + + if (!can_select) { + gtk_ctree_select(ctree, folderview->opened); + gtkut_ctree_set_focus_row(ctree, folderview->opened); + return; + } + + if (!folderview->open_folder) return; + folderview->open_folder = FALSE; + + item = gtk_ctree_node_get_row_data(ctree, row); + if (!item) return; + + can_select = FALSE; + + if (item->path) + debug_print(_("Folder %s is selected\n"), item->path); + + if (!GTK_CTREE_ROW(row)->children) + gtk_ctree_expand(ctree, row); + if (folderview->opened && + !GTK_CTREE_ROW(folderview->opened)->children) + gtk_ctree_collapse(ctree, folderview->opened); + + folderview->opened = row; + + summary_show(folderview->summaryview, item, FALSE); + + can_select = TRUE; +} + +static void folderview_popup_close(GtkMenuShell *menu_shell, + FolderView *folderview) +{ + if (!folderview->opened) return; + + gtk_ctree_select(GTK_CTREE(folderview->ctree), folderview->opened); + gtkut_ctree_set_focus_row(GTK_CTREE(folderview->ctree), + folderview->opened); +} + +static void folderview_col_resized(GtkCList *clist, gint column, gint width, + FolderView *folderview) +{ + switch (column) { + case COL_FOLDER: + prefs_common.folder_col_folder = width; + break; + case COL_NEW: + prefs_common.folder_col_new = width; + break; + case COL_UNREAD: + prefs_common.folder_col_unread = width; + break; + case COL_TOTAL: + prefs_common.folder_col_total = width; + break; + default: + } +} + +static GtkCTreeNode *folderview_find_by_name(GtkCTree *ctree, + GtkCTreeNode *node, + const gchar *name) +{ + FolderItem *item; + + if (!node) + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + if (!node) + return NULL; + + node = GTK_CTREE_ROW(node)->children; + + while (node) { + item = gtk_ctree_node_get_row_data(ctree, node); + if (!folderview_compare_name(item, name)) + return node; + node = GTK_CTREE_ROW(node)->sibling; + } + + return NULL; +} + +static void folderview_new_folder_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + gchar *text[N_FOLDER_COLS] = {NULL, "0", "0", "0"}; + FolderItem *item; + FolderItem *new_item; + gchar *new_folder; + GtkCTreeNode *node; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + + new_folder = input_dialog(_("New folder"), + _("Input the name of new folder:"), + _("NewFolder")); + if (!new_folder) return; + + if (strchr(new_folder, G_DIR_SEPARATOR) != NULL) { + alertpanel_error(_("`%c' can't be included in folder name."), + G_DIR_SEPARATOR); + g_free(new_folder); + return; + } + + /* find whether the directory already exists */ + if (folderview_find_by_name(ctree, folderview->selected, new_folder)) { + alertpanel_error(_("The folder `%s' already exists."), + new_folder); + g_free(new_folder); + return; + } + + new_item = item->folder->create_folder(item->folder, item, new_folder); + g_free(new_folder); + if (!new_item) return; + + gtk_clist_freeze(GTK_CLIST(ctree)); + + text[COL_FOLDER] = new_item->name; + node = gtk_ctree_insert_node(ctree, folderview->selected, NULL, text, + FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + gtk_ctree_expand(ctree, folderview->selected); + gtk_ctree_node_set_row_data(ctree, node, new_item); + folderview_sort_folders(folderview, folderview->selected, item->folder); + + gtk_clist_thaw(GTK_CLIST(ctree)); + + folder_write_list(); +} + +static void folderview_rename_folder_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + gchar *new_folder; + gchar *message; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->path != NULL); + g_return_if_fail(item->folder != NULL); + + message = g_strdup_printf(_("Input new name for `%s':"), + g_basename(item->path)); + new_folder = input_dialog(_("Rename folder"), message, + g_basename(item->path)); + g_free(message); + if (!new_folder) return; + + if (strchr(new_folder, G_DIR_SEPARATOR) != NULL) { + alertpanel_error(_("`%c' can't be included in folder name."), + G_DIR_SEPARATOR); + g_free(new_folder); + return; + } + + if (folderview_find_by_name + (ctree, GTK_CTREE_ROW(folderview->selected)->parent, + new_folder)) { + alertpanel_error(_("The folder `%s' already exists."), + new_folder); + g_free(new_folder); + return; + } + + if (item->folder->rename_folder(item->folder, item, new_folder) < 0) { + g_free(new_folder); + return; + } + g_free(new_folder); + + gtk_clist_freeze(GTK_CLIST(ctree)); + + folderview_update_node(folderview, folderview->selected); + folderview_sort_folders(folderview, + GTK_CTREE_ROW(folderview->selected)->parent, + item->folder); + if (folderview->opened == folderview->selected) { + if (!GTK_CTREE_ROW(folderview->opened)->children) + gtk_ctree_expand(ctree, folderview->opened); + summary_show(folderview->summaryview, item, FALSE); + } + + gtk_clist_thaw(GTK_CLIST(ctree)); + + folder_write_list(); +} + +static void folderview_delete_folder_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + gchar *message; + AlertValue avalue; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->path != NULL); + g_return_if_fail(item->folder != NULL); + + message = g_strdup_printf + (_("All folder(s) and message(s) under `%s' will be deleted.\n" + "Do you really want to delete?"), + g_basename(item->path)); + avalue = alertpanel(_("Delete folder"), message, + _("Yes"), _("+No"), NULL); + g_free(message); + if (avalue != G_ALERTDEFAULT) return; + + if (item->folder->remove_folder(item->folder, item) < 0) { + g_warning(_("can't remove folder `%s'\n"), item->path); + return; + } + + if (folderview->opened == folderview->selected || + gtk_ctree_is_ancestor(ctree, + folderview->selected, + folderview->opened)) { + summary_clear_all(folderview->summaryview); + folderview->opened = NULL; + } + + gtk_ctree_remove_node(ctree, folderview->selected); + folder_write_list(); +} + +static void folderview_remove_mailbox_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + GtkCTreeNode *node; + FolderItem *item; + gchar *message; + AlertValue avalue; + + if (!folderview->selected) return; + node = folderview->selected; + item = gtk_ctree_node_get_row_data(ctree, node); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + if (item->parent) return; + + message = g_strdup_printf + (_("Really remove the mailbox `%s' ?\n" + "(The messages are NOT deleted from disk)"), + item->folder->name); + avalue = alertpanel(_("Remove folder"), message, + _("Yes"), _("+No"), NULL); + g_free(message); + if (avalue != G_ALERTDEFAULT) return; + + folder_destroy(item->folder); + summary_clear_all(folderview->summaryview); + folderview_unselect(folderview); + gtk_ctree_remove_node(ctree, node); + folder_write_list(); +} + +static void folderview_new_imap_folder_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + gchar *text[N_FOLDER_COLS] = {NULL, "0", "0", "0"}; + GtkCTreeNode *node; + FolderItem *item; + FolderItem *new_item; + gchar *new_folder; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_IMAP); + g_return_if_fail(item->folder->account != NULL); + + new_folder = input_dialog(_("New folder"), + _("Input the name of new folder:"), + _("NewFolder")); + if (!new_folder) return; + + if (strchr(new_folder, G_DIR_SEPARATOR) != NULL) { + alertpanel_error(_("`%c' can't be included in folder name."), + G_DIR_SEPARATOR); + g_free(new_folder); + return; + } + + /* find whether the directory already exists */ + if (folderview_find_by_name(ctree, folderview->selected, new_folder)) { + alertpanel_error(_("The folder `%s' already exists."), + new_folder); + g_free(new_folder); + return; + } + + new_item = item->folder->create_folder(item->folder, item, new_folder); + g_free(new_folder); + if (!new_item) return; + + gtk_clist_freeze(GTK_CLIST(ctree)); + + text[COL_FOLDER] = new_item->name; + node = gtk_ctree_insert_node(ctree, folderview->selected, NULL, text, + FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + gtk_ctree_expand(ctree, folderview->selected); + gtk_ctree_node_set_row_data(ctree, node, new_item); + folderview_sort_folders(folderview, folderview->selected, item->folder); + + gtk_clist_thaw(GTK_CLIST(ctree)); + + folder_write_list(); +} + +static void folderview_rm_imap_folder_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + gchar *message; + AlertValue avalue; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_IMAP); + g_return_if_fail(item->folder->account != NULL); + + message = g_strdup_printf(_("Really delete folder `%s'?"), + g_basename(item->path)); + avalue = alertpanel(_("Delete folder"), message, + _("Yes"), _("+No"), NULL); + g_free(message); + if (avalue != G_ALERTDEFAULT) return; + + if (folderview->opened == folderview->selected) { + summary_clear_all(folderview->summaryview); + folderview->opened = NULL; + } + + folder_item_remove(item); + gtk_ctree_remove_node(ctree, folderview->selected); + folder_write_list(); +} + +static void folderview_rm_imap_server_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + gchar *message; + AlertValue avalue; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_IMAP); + g_return_if_fail(item->folder->account != NULL); + + message = g_strdup_printf(_("Really delete IMAP4 server `%s'?"), + item->folder->name); + avalue = alertpanel(_("Delete IMAP4 server"), message, + _("Yes"), _("+No"), NULL); + g_free(message); + + if (avalue != G_ALERTDEFAULT) return; + + if (folderview->opened == folderview->selected || + gtk_ctree_is_ancestor(ctree, + folderview->selected, + folderview->opened)) { + summary_clear_all(folderview->summaryview); + folderview->opened = NULL; + } + + account_destroy(item->folder->account); + folder_destroy(item->folder); + gtk_ctree_remove_node(ctree, folderview->selected); + account_set_menu(); + main_window_reflect_prefs_all(); + folder_write_list(); +} + +static void folderview_new_news_group_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + gchar *text[N_FOLDER_COLS] = {NULL, "0", "0", "0"}; + GtkCTreeNode *servernode, *node; + FolderItem *item; + FolderItem *newitem; + gchar *new_group; + const gchar *server; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_NEWS); + g_return_if_fail(item->folder->account != NULL); + + new_group = input_dialog(_("Subscribe newsgroup"), + _("Input subscribing newsgroup:"), NULL); + if (!new_group) return; + + if (GTK_CTREE_ROW(folderview->selected)->parent != NULL) + servernode = GTK_CTREE_ROW(folderview->selected)->parent; + else + servernode = folderview->selected; + + if (folderview_find_by_name(ctree, servernode, new_group)) { + alertpanel_error(_("The newsgroup `%s' already exists."), + new_group); + g_free(new_group); + return; + } + + gtk_clist_freeze(GTK_CLIST(ctree)); + + text[COL_FOLDER] = new_group; + node = gtk_ctree_insert_node(ctree, servernode, NULL, text, + FOLDER_SPACING, + folderxpm, folderxpmmask, + folderopenxpm, folderopenxpmmask, + FALSE, FALSE); + gtk_ctree_expand(ctree, servernode); + + item = gtk_ctree_node_get_row_data(ctree, servernode); + server = item->folder->account->nntp_server; + + newitem = folder_item_new(new_group, new_group); + g_free(new_group); + folder_item_append(item, newitem); + gtk_ctree_node_set_row_data(ctree, node, newitem); + gtk_ctree_sort_node(ctree, servernode); + + gtk_clist_thaw(GTK_CLIST(ctree)); + + folder_write_list(); +} + +static void folderview_rm_news_group_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + gchar *message; + AlertValue avalue; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_NEWS); + g_return_if_fail(item->folder->account != NULL); + + message = g_strdup_printf(_("Really delete newsgroup `%s'?"), + g_basename(item->path)); + avalue = alertpanel(_("Delete newsgroup"), message, + _("Yes"), _("+No"), NULL); + g_free(message); + if (avalue != G_ALERTDEFAULT) return; + + if (folderview->opened == folderview->selected) { + summary_clear_all(folderview->summaryview); + folderview->opened = NULL; + } + + folder_item_remove(item); + gtk_ctree_remove_node(ctree, folderview->selected); + folder_write_list(); +} + +static void folderview_rm_news_server_cb(FolderView *folderview, guint action, + GtkWidget *widget) +{ + GtkCTree *ctree = GTK_CTREE(folderview->ctree); + FolderItem *item; + gchar *message; + AlertValue avalue; + + if (!folderview->selected) return; + + item = gtk_ctree_node_get_row_data(ctree, folderview->selected); + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_NEWS); + g_return_if_fail(item->folder->account != NULL); + + message = g_strdup_printf(_("Really delete news server `%s'?"), + item->folder->name); + avalue = alertpanel(_("Delete news server"), message, + _("Yes"), _("+No"), NULL); + g_free(message); + + if (avalue != G_ALERTDEFAULT) return; + + if (folderview->opened == folderview->selected || + gtk_ctree_is_ancestor(ctree, + folderview->selected, + folderview->opened)) { + summary_clear_all(folderview->summaryview); + folderview->opened = NULL; + } + + account_destroy(item->folder->account); + folder_destroy(item->folder); + gtk_ctree_remove_node(ctree, folderview->selected); + account_set_menu(); + main_window_reflect_prefs_all(); + folder_write_list(); +} + +static gboolean folderview_drag_motion_cb(GtkWidget *widget, + GdkDragContext *context, + gint x, + gint y, + guint time, + FolderView *folderview) +{ + gint row, column; + FolderItem *item; + GtkCTreeNode *node; + + if (gtk_clist_get_selection_info(GTK_CLIST(widget), + x - 24, y - 24, &row, &column)) { + node = gtk_ctree_node_nth(GTK_CTREE(widget), row); + item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node); + if (item != NULL && + item->path != NULL && + folderview->summaryview->folder_item != item) { + if (item->folder->type != F_NEWS) { + gtk_ctree_select(GTK_CTREE(widget), node); + gdk_drag_status(context, + context->suggested_action, + time); + return TRUE; + } + } + } + + gtk_ctree_select(GTK_CTREE(widget), folderview->opened); + gdk_drag_status(context, 0, time); + + return FALSE; +} + +static void folderview_drag_leave_cb(GtkWidget *widget, + GdkDragContext *context, + guint time, + FolderView *folderview) +{ + gtk_ctree_select(GTK_CTREE(widget), folderview->opened); +} + +static void folderview_drag_received_cb(GtkWidget *widget, + GdkDragContext *drag_context, + gint x, + gint y, + GtkSelectionData *data, + guint info, + guint time, + FolderView *folderview) +{ + gint row, column; + FolderItem *item; + GtkCTreeNode *node; + + if (gtk_clist_get_selection_info(GTK_CLIST(widget), + x - 24, y - 24, &row, &column) == 0) + return; + + node = gtk_ctree_node_nth(GTK_CTREE(widget), row); + item = gtk_ctree_node_get_row_data(GTK_CTREE(widget), node); + if (item != NULL) { + summary_move_selected_to(folderview->summaryview, item); + gtk_drag_finish(drag_context, TRUE, TRUE, time); + } else + gtk_drag_finish(drag_context, FALSE, FALSE, time); +} + +static gint folderview_compare_name(gconstpointer a, gconstpointer b) +{ + const FolderItem *item = a; + const gchar *name = b; + + if (!item->path) return -1; + return strcmp2(g_basename(item->path), name); +} diff --git a/src/folderview.h b/src/folderview.h new file mode 100644 index 000000000..1dd02fe06 --- /dev/null +++ b/src/folderview.h @@ -0,0 +1,81 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __FOLDERVIEW_H__ +#define __FOLDERVIEW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkctree.h> + +#include "folder.h" + +typedef struct _FolderView FolderView; + +#include "mainwindow.h" +#include "summaryview.h" + +struct _FolderView +{ + GtkWidget *scrolledwin; + GtkWidget *ctree; + GtkWidget *mail_popup; + GtkWidget *imap_popup; + GtkWidget *news_popup; + + GtkItemFactory *mail_factory; + GtkItemFactory *imap_factory; + GtkItemFactory *news_factory; + + GtkCTreeNode *selected; + GtkCTreeNode *opened; + + gboolean open_folder; + + GdkColor color_new; + GdkColor color_normal; + + MainWindow *mainwin; + SummaryView *summaryview; +}; + +FolderView *folderview_create (void); +void folderview_init (FolderView *folderview); +void folderview_set (FolderView *folderview); +void folderview_set_imap_account (FolderView *folderview); +void folderview_select (FolderView *folderview, + FolderItem *item); +void folderview_unselect (FolderView *folderview); +void folderview_select_next_unread (FolderView *folderview); +void folderview_update_msg_num (FolderView *folderview, + GtkCTreeNode *row, + gint new, + gint unread, + gint total); +void folderview_update_all (void); + +void folderview_update_item (FolderItem *item, + gboolean update_summary); +void folderview_update_item_foreach (GHashTable *table); + +void folderview_new_folder (FolderView *folderview); +void folderview_rename_folder (FolderView *folderview); +void folderview_delete_folder (FolderView *folderview); + +#endif /* __FOLDERVIEW_H__ */ diff --git a/src/gtksctree.c b/src/gtksctree.c new file mode 100644 index 000000000..e1713ba99 --- /dev/null +++ b/src/gtksctree.c @@ -0,0 +1,538 @@ +/* + * This program is based on gtkflist.c + */ + +#include "utils.h" +#include "gtkutils.h" +#include "gtksctree.h" + + +enum { + ROW_POPUP_MENU, + EMPTY_POPUP_MENU, + OPEN_ROW, + START_DRAG, + LAST_SIGNAL +}; + + +static void gtk_sctree_class_init (GtkSCTreeClass *class); +static void gtk_sctree_init (GtkSCTree *sctree); + +static gint gtk_sctree_button_press (GtkWidget *widget, GdkEventButton *event); +static gint gtk_sctree_button_release (GtkWidget *widget, GdkEventButton *event); +static gint gtk_sctree_motion (GtkWidget *widget, GdkEventMotion *event); +static void gtk_sctree_drag_begin (GtkWidget *widget, GdkDragContext *context); +static void gtk_sctree_drag_end (GtkWidget *widget, GdkDragContext *context); +static void gtk_sctree_drag_data_get (GtkWidget *widget, GdkDragContext *context, + GtkSelectionData *data, guint info, guint time); +static void gtk_sctree_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time); +static gboolean gtk_sctree_drag_motion (GtkWidget *widget, GdkDragContext *context, + gint x, gint y, guint time); +static gboolean gtk_sctree_drag_drop (GtkWidget *widget, GdkDragContext *context, + gint x, gint y, guint time); +static void gtk_sctree_drag_data_received (GtkWidget *widget, GdkDragContext *context, + gint x, gint y, GtkSelectionData *data, + guint info, guint time); + +static void gtk_sctree_clear (GtkCList *clist); +static void gtk_sctree_collapse (GtkCTree *ctree, GtkCTreeNode *node); + +static GtkCTreeClass *parent_class; + +static guint sctree_signals[LAST_SIGNAL]; + + +/** + * gtk_sctree_get_type: + * @void: + * + * Creates the GtkSCTree class and its type information + * + * Return value: The type ID for GtkSCTreeClass + **/ +GtkType +gtk_sctree_get_type (void) +{ + static GtkType sctree_type = 0; + + if (!sctree_type) { + GtkTypeInfo sctree_info = { + "GtkSCTree", + sizeof (GtkSCTree), + sizeof (GtkSCTreeClass), + (GtkClassInitFunc) gtk_sctree_class_init, + (GtkObjectInitFunc) gtk_sctree_init, + NULL, /* reserved_1 */ + NULL, /* reserved_2 */ + (GtkClassInitFunc) NULL + }; + + sctree_type = gtk_type_unique (gtk_ctree_get_type (), &sctree_info); + } + + return sctree_type; +} + +/* Standard class initialization function */ +static void +gtk_sctree_class_init (GtkSCTreeClass *klass) +{ + GtkObjectClass *object_class; + GtkWidgetClass *widget_class; + GtkCListClass *clist_class; + GtkCTreeClass *ctree_class; + + object_class = (GtkObjectClass *) klass; + widget_class = (GtkWidgetClass *) klass; + clist_class = (GtkCListClass *) klass; + ctree_class = (GtkCTreeClass *) klass; + + parent_class = gtk_type_class (gtk_ctree_get_type ()); + + sctree_signals[ROW_POPUP_MENU] = + gtk_signal_new ("row_popup_menu", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GtkSCTreeClass, row_popup_menu), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, + GTK_TYPE_GDK_EVENT); + sctree_signals[EMPTY_POPUP_MENU] = + gtk_signal_new ("empty_popup_menu", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GtkSCTreeClass, empty_popup_menu), + gtk_marshal_NONE__POINTER, + GTK_TYPE_NONE, 1, + GTK_TYPE_GDK_EVENT); + sctree_signals[OPEN_ROW] = + gtk_signal_new ("open_row", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GtkSCTreeClass, open_row), + gtk_marshal_NONE__NONE, + GTK_TYPE_NONE, 0); + sctree_signals[START_DRAG] = + gtk_signal_new ("start_drag", + GTK_RUN_FIRST, + object_class->type, + GTK_SIGNAL_OFFSET (GtkSCTreeClass, start_drag), + gtk_marshal_NONE__INT_POINTER, + GTK_TYPE_NONE, 2, + GTK_TYPE_INT, + GTK_TYPE_GDK_EVENT); + + gtk_object_class_add_signals (object_class, sctree_signals, LAST_SIGNAL); + + clist_class->clear = gtk_sctree_clear; + ctree_class->tree_collapse = gtk_sctree_collapse; + + widget_class->button_press_event = gtk_sctree_button_press; + widget_class->button_release_event = gtk_sctree_button_release; + widget_class->motion_notify_event = gtk_sctree_motion; + widget_class->drag_begin = gtk_sctree_drag_begin; + widget_class->drag_end = gtk_sctree_drag_end; + widget_class->drag_data_get = gtk_sctree_drag_data_get; + widget_class->drag_leave = gtk_sctree_drag_leave; + widget_class->drag_motion = gtk_sctree_drag_motion; + widget_class->drag_drop = gtk_sctree_drag_drop; + widget_class->drag_data_received = gtk_sctree_drag_data_received; +} + +/* Standard object initialization function */ +static void +gtk_sctree_init (GtkSCTree *sctree) +{ + sctree->anchor_row = -1; + + /* GtkCTree does not specify pointer motion by default */ + gtk_widget_add_events (GTK_WIDGET (sctree), GDK_POINTER_MOTION_MASK); + gtk_widget_add_events (GTK_WIDGET (sctree), GDK_POINTER_MOTION_MASK); +} + +/* Get information the specified row is selected. */ + +static gboolean +row_is_selected(GtkSCTree *sctree, gint row) +{ + GtkCListRow *clist_row; + clist_row = g_list_nth (GTK_CLIST(sctree)->row_list, row)->data; + return clist_row ? clist_row->state == GTK_STATE_SELECTED : FALSE; +} + +/* Selects the rows between the anchor to the specified row, inclusive. */ +static void +select_range (GtkSCTree *sctree, gint row) +{ + gint min, max; + gint i; + + if (sctree->anchor_row == -1) + sctree->anchor_row = row; + + if (row < sctree->anchor_row) { + min = row; + max = sctree->anchor_row; + } else { + min = sctree->anchor_row; + max = row; + } + for (i = min; i <= max; i++) + gtk_clist_select_row (GTK_CLIST (sctree), i, -1); +} + +/* Handles row selection according to the specified modifier state */ +static void +select_row (GtkSCTree *sctree, gint row, gint col, guint state) +{ + gboolean range, additive; + g_return_if_fail (sctree != NULL); + g_return_if_fail (GTK_IS_SCTREE (sctree)); + + range = ((state & GDK_SHIFT_MASK) != 0) && + (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_SINGLE) && + (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_BROWSE); + additive = ((state & GDK_CONTROL_MASK) != 0) && + (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_SINGLE) && + (GTK_CLIST(sctree)->selection_mode != GTK_SELECTION_BROWSE); + + gtk_clist_freeze (GTK_CLIST (sctree)); + gtkut_clist_set_focus_row(GTK_CLIST(sctree), row); + if (!additive) + gtk_clist_unselect_all (GTK_CLIST (sctree)); + + if (!range) { + /*No need to manage overlapped list*/ + if (additive) { + if (row_is_selected(sctree, row)) + gtk_clist_unselect_row (GTK_CLIST (sctree), row, col); + else + gtk_signal_emit_by_name + (GTK_OBJECT (sctree), + "tree_select_row", + gtk_ctree_node_nth (GTK_CTREE(sctree), row), + col); + } else { + gtk_signal_emit_by_name + (GTK_OBJECT (sctree), + "tree_select_row", + gtk_ctree_node_nth (GTK_CTREE(sctree), row), + col); + } + sctree->anchor_row = row; + } else + select_range (sctree, row); + gtk_clist_thaw (GTK_CLIST (sctree)); +} + +/* Our handler for button_press events. We override all of GtkCList's broken + * behavior. + */ +static gint +gtk_sctree_button_press (GtkWidget *widget, GdkEventButton *event) +{ + GtkSCTree *sctree; + GtkCList *clist; + gboolean on_row; + gint row; + gint col; + gint retval; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_SCTREE (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + sctree = GTK_SCTREE (widget); + clist = GTK_CLIST (widget); + retval = FALSE; + + if (event->window != clist->clist_window) + return (* GTK_WIDGET_CLASS (parent_class)->button_press_event) (widget, event); + + on_row = gtk_clist_get_selection_info (clist, event->x, event->y, &row, &col); + + if (on_row && !GTK_WIDGET_HAS_FOCUS(widget)) + gtk_widget_grab_focus (widget); + + if (gtk_ctree_is_hot_spot (GTK_CTREE(sctree), event->x, event->y)) { + gtk_ctree_toggle_expansion + (GTK_CTREE(sctree), + gtk_ctree_node_nth(GTK_CTREE(sctree), row)); + return TRUE; + } + + switch (event->type) { + case GDK_BUTTON_PRESS: + if (event->button == 1 || event->button == 2) { + if (event->button == 2) + event->state &= ~(GDK_SHIFT_MASK | GDK_CONTROL_MASK); + if (on_row) { + /* Save the mouse info for DnD */ + sctree->dnd_press_button = event->button; + sctree->dnd_press_x = event->x; + sctree->dnd_press_y = event->y; + + /* Handle selection */ + if ((row_is_selected (sctree, row) + && !(event->state & (GDK_CONTROL_MASK | GDK_SHIFT_MASK))) + || ((event->state & GDK_CONTROL_MASK) + && !(event->state & GDK_SHIFT_MASK))) { + sctree->dnd_select_pending = TRUE; + sctree->dnd_select_pending_state = event->state; + sctree->dnd_select_pending_row = row; + } else + select_row (sctree, row, col, event->state); + } else + gtk_clist_unselect_all (clist); + + retval = TRUE; + } else if (event->button == 3) { + /* Emit *_popup_menu signal*/ + if (on_row) { + if (!row_is_selected(sctree,row)) + select_row (sctree, row, col, 0); + gtk_signal_emit (GTK_OBJECT (sctree), + sctree_signals[ROW_POPUP_MENU], + event); + } else { + gtk_clist_unselect_all(clist); + gtk_signal_emit (GTK_OBJECT (sctree), + sctree_signals[EMPTY_POPUP_MENU], + event); + } + retval = TRUE; + } + + break; + + case GDK_2BUTTON_PRESS: + if (event->button != 1) + break; + + sctree->dnd_select_pending = FALSE; + sctree->dnd_select_pending_state = 0; + + if (on_row) + gtk_signal_emit (GTK_OBJECT (sctree), + sctree_signals[OPEN_ROW]); + + retval = TRUE; + break; + + default: + break; + } + + return retval; +} + +/* Our handler for button_release events. We override all of GtkCList's broken + * behavior. + */ +static gint +gtk_sctree_button_release (GtkWidget *widget, GdkEventButton *event) +{ + GtkSCTree *sctree; + GtkCList *clist; + gint on_row; + gint row, col; + gint retval; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_SCTREE (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + sctree = GTK_SCTREE (widget); + clist = GTK_CLIST (widget); + retval = FALSE; + + if (event->window != clist->clist_window) + return (* GTK_WIDGET_CLASS (parent_class)->button_release_event) (widget, event); + + on_row = gtk_clist_get_selection_info (clist, event->x, event->y, &row, &col); + + if (!(event->button == 1 || event->button == 2)) + return FALSE; + + sctree->dnd_press_button = 0; + sctree->dnd_press_x = 0; + sctree->dnd_press_y = 0; + + if (on_row) { + if (sctree->dnd_select_pending) { + select_row (sctree, row, col, sctree->dnd_select_pending_state); + sctree->dnd_select_pending = FALSE; + sctree->dnd_select_pending_state = 0; + } + + retval = TRUE; + } + + return retval; +} + +/* Our handler for motion_notify events. We override all of GtkCList's broken + * behavior. + */ +static gint +gtk_sctree_motion (GtkWidget *widget, GdkEventMotion *event) +{ + GtkSCTree *sctree; + GtkCList *clist; + + g_return_val_if_fail (widget != NULL, FALSE); + g_return_val_if_fail (GTK_IS_SCTREE (widget), FALSE); + g_return_val_if_fail (event != NULL, FALSE); + + sctree = GTK_SCTREE (widget); + clist = GTK_CLIST (widget); + + if (event->window != clist->clist_window) + return (* GTK_WIDGET_CLASS (parent_class)->motion_notify_event) (widget, event); + + if (!((sctree->dnd_press_button == 1 && (event->state & GDK_BUTTON1_MASK)) + || (sctree->dnd_press_button == 2 && (event->state & GDK_BUTTON2_MASK)))) + return FALSE; + + /* This is the same threshold value that is used in gtkdnd.c */ + + if (MAX (abs (sctree->dnd_press_x - event->x), + abs (sctree->dnd_press_y - event->y)) <= 3) + return FALSE; + + /* Handle any pending selections */ + + if (sctree->dnd_select_pending) { + if (!row_is_selected(sctree,sctree->dnd_select_pending_row)) + select_row (sctree, + sctree->dnd_select_pending_row, + -1, + sctree->dnd_select_pending_state); + + sctree->dnd_select_pending = FALSE; + sctree->dnd_select_pending_state = 0; + } + + gtk_signal_emit (GTK_OBJECT (sctree), + sctree_signals[START_DRAG], + sctree->dnd_press_button, + event); + return TRUE; +} + +/* We override the drag_begin signal to do nothing */ +static void +gtk_sctree_drag_begin (GtkWidget *widget, GdkDragContext *context) +{ + /* nothing */ +} + +/* We override the drag_end signal to do nothing */ +static void +gtk_sctree_drag_end (GtkWidget *widget, GdkDragContext *context) +{ + /* nothing */ +} + +/* We override the drag_data_get signal to do nothing */ +static void +gtk_sctree_drag_data_get (GtkWidget *widget, GdkDragContext *context, + GtkSelectionData *data, guint info, guint time) +{ + /* nothing */ +} + +/* We override the drag_leave signal to do nothing */ +static void +gtk_sctree_drag_leave (GtkWidget *widget, GdkDragContext *context, guint time) +{ + /* nothing */ +} + +/* We override the drag_motion signal to do nothing */ +static gboolean +gtk_sctree_drag_motion (GtkWidget *widget, GdkDragContext *context, + gint x, gint y, guint time) +{ + return FALSE; +} + +/* We override the drag_drop signal to do nothing */ +static gboolean +gtk_sctree_drag_drop (GtkWidget *widget, GdkDragContext *context, + gint x, gint y, guint time) +{ + return FALSE; +} + +/* We override the drag_data_received signal to do nothing */ +static void +gtk_sctree_drag_data_received (GtkWidget *widget, GdkDragContext *context, + gint x, gint y, GtkSelectionData *data, + guint info, guint time) +{ + /* nothing */ +} + +/* Our handler for the clear signal of the clist. We have to reset the anchor + * to null. + */ +static void +gtk_sctree_clear (GtkCList *clist) +{ + GtkSCTree *sctree; + + g_return_if_fail (clist != NULL); + g_return_if_fail (GTK_IS_SCTREE (clist)); + + sctree = GTK_SCTREE (clist); + sctree->anchor_row = -1; + + if (((GtkCListClass *)parent_class)->clear) + (* ((GtkCListClass *)parent_class)->clear) (clist); +} + +/* Our handler for the change_focus_row_expansion signal of the ctree. + We have to set the anchor to parent visible node. + */ +static void +gtk_sctree_collapse (GtkCTree *ctree, GtkCTreeNode *node) +{ + GtkSCTree *sctree; + + g_return_if_fail (ctree != NULL); + g_return_if_fail (GTK_IS_SCTREE (ctree)); + + (* parent_class->tree_collapse) (ctree, node); + sctree = GTK_SCTREE (ctree); + sctree->anchor_row = GTK_CLIST(ctree)->focus_row; +} + +GtkWidget *gtk_sctree_new_with_titles (gint columns, + gint tree_column, + gchar *titles[]) +{ + GtkSCTree* sctree; + + sctree = gtk_type_new (gtk_sctree_get_type ()); + gtk_ctree_construct (GTK_CTREE (sctree), columns, tree_column, titles); + gtk_clist_set_selection_mode(GTK_CLIST(sctree), GTK_SELECTION_EXTENDED); + + return GTK_WIDGET (sctree); +} + +void gtk_sctree_select (GtkSCTree *sctree, + GtkCTreeNode *node) +{ + select_row(sctree, + gtkut_ctree_get_nth_from_node(GTK_CTREE(sctree),node), + -1, 0); +} + +void gtk_sctree_unselect_all (GtkSCTree *sctree) +{ + gtk_clist_unselect_all(GTK_CLIST(sctree)); + sctree->anchor_row = -1; +} + diff --git a/src/gtksctree.h b/src/gtksctree.h new file mode 100644 index 000000000..977c89f91 --- /dev/null +++ b/src/gtksctree.h @@ -0,0 +1,64 @@ +/* Mail Summary tree widget for Sylpheed */ + +#ifndef __GTK_SCTREE_H__ +#define __GTK_SCTREE_H__ + +#include <gtk/gtk.h> +#include <gtk/gtkclist.h> +#include <gtk/gtkctree.h> + +/* This code is based on "gtkflist.{h,c}" from mc-4.5.42 .*/ + +#define TYPE_GTK_SCTREE (gtk_sctree_get_type ()) +#define GTK_SCTREE(obj) (GTK_CHECK_CAST ((obj), TYPE_GTK_SCTREE, GtkSCTree)) +#define GTK_SCTREE_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), TYPE_GTK_SCTREE, GtkSCTreeClass)) +#define GTK_IS_SCTREE(obj) (GTK_CHECK_TYPE ((obj), TYPE_GTK_SCTREE)) +#define GTK_IS_SCTREE_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), TYPE_GTK_SCTREE)) + + +typedef struct _GtkSCTree GtkSCTree; +typedef struct _GtkSCTreeClass GtkSCTreeClass; + +struct _GtkSCTree { + GtkCTree ctree; + + /* The anchor row for range selections */ + gint anchor_row; + + /* Mouse button and position saved on button press */ + gint dnd_press_button; + gint dnd_press_x, dnd_press_y; + + /* Delayed selection information */ + gint dnd_select_pending; + guint dnd_select_pending_state; + gint dnd_select_pending_row; +}; + +struct _GtkSCTreeClass { + GtkCTreeClass parent_class; + + /* Signal: invoke the popup menu for rows */ + void (* row_popup_menu) (GtkSCTree *sctree, GdkEventButton *event); + + /* Signal: invoke the popup menu for empty areas */ + void (* empty_popup_menu) (GtkSCTree *sctree, GdkEventButton *event); + + /* Signal: open the file in the selected row */ + void (* open_row) (GtkSCTree *sctree); + + /* Signal: initiate a drag and drop operation */ + void (* start_drag) (GtkSCTree *sctree, gint button, GdkEvent *event); +}; + + +GtkType gtk_sctree_get_type (void); +GtkWidget *gtk_sctree_new_with_titles (gint columns, + gint tree_column, + gchar *titles[]); +void gtk_sctree_select (GtkSCTree *sctree, + GtkCTreeNode *node); + +void gtk_sctree_unselect_all (GtkSCTree *sctree); + +#endif /* __GTK_SCTREE_H__ */ diff --git a/src/gtkshruler.c b/src/gtkshruler.c new file mode 100644 index 000000000..fc32d7eb6 --- /dev/null +++ b/src/gtkshruler.c @@ -0,0 +1,210 @@ +/* GtkSHRuler + * + * Copyright (C) 2000 Alfons Hoogervorst + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +/* I derived this class from hruler. S in HRuler could be read as + * Sylpheed (sylpheed.good-day.net), but also [S]ettable HRuler. + * I basically ripped apart the draw_ticks member of HRuler; it + * now draws the ticks at ruler->max_size. so gtk_ruler_set_range's + * last parameter has the distance between two ticks (which is + * the width of the fixed font character! + * + * -- Alfons (alfons@proteus.demon.nl) + */ + +#include <math.h> +#include <stdio.h> +#include <string.h> +#include <gtk/gtkhruler.h> +#include "gtkshruler.h" + +#define RULER_HEIGHT 14 +#define MINIMUM_INCR 5 +#define MAXIMUM_SUBDIVIDE 5 +#define MAXIMUM_SCALES 10 + +#define ROUND(x) ((int) ((x) + 0.5)) + +static void gtk_shruler_class_init (GtkSHRulerClass *klass); +static void gtk_shruler_init (GtkSHRuler *hruler); +static gint gtk_shruler_motion_notify (GtkWidget *widget, + GdkEventMotion *event); +static void gtk_shruler_draw_ticks (GtkRuler *ruler); +#if 0 +static void gtk_shruler_draw_pos (GtkRuler *ruler); +#endif + +guint +gtk_shruler_get_type(void) +{ + static guint shruler_type = 0; + + if ( !shruler_type ) { + static const GtkTypeInfo shruler_info = { + "GtkSHRuler", + sizeof (GtkSHRuler), + sizeof (GtkSHRulerClass), + (GtkClassInitFunc) gtk_shruler_class_init, + (GtkObjectInitFunc) gtk_shruler_init, + /* reserved_1 */ NULL, + /* reserved_2 */ NULL, + (GtkClassInitFunc) NULL, + }; + /* inherit from GtkHRuler */ + shruler_type = gtk_type_unique( gtk_hruler_get_type (), &shruler_info ); + } + return shruler_type; +} + +static void +gtk_shruler_class_init(GtkSHRulerClass * klass) +{ + GtkWidgetClass * widget_class; + GtkRulerClass * hruler_class; + + widget_class = (GtkWidgetClass*) klass; + hruler_class = (GtkRulerClass*) klass; + + /* just neglect motion notify events */ + widget_class->motion_notify_event = NULL /* gtk_shruler_motion_notify */; + + /* we want the old ruler draw ticks... */ + /* ruler_class->draw_ticks = gtk_hruler_draw_ticks; */ + hruler_class->draw_ticks = gtk_shruler_draw_ticks; + + /* unimplemented draw pos */ + hruler_class->draw_pos = NULL; +/* + hruler_class->draw_pos = gtk_shruler_draw_pos; +*/ +} + +static void +gtk_shruler_init (GtkSHRuler * shruler) +{ + GtkWidget * widget; + + widget = GTK_WIDGET (shruler); + widget->requisition.width = widget->style->klass->xthickness * 2 + 1; + widget->requisition.height = widget->style->klass->ythickness * 2 + RULER_HEIGHT; +} + + +GtkWidget* +gtk_shruler_new(void) +{ + return GTK_WIDGET( gtk_type_new( gtk_shruler_get_type() ) ); +} + +static gint +gtk_shruler_motion_notify(GtkWidget *widget, + GdkEventMotion *event) +{ + /* I could have perhaps set this to NULL */ + return FALSE; +} + +static void +gtk_shruler_draw_ticks(GtkRuler *ruler) +{ + GtkWidget *widget; + GdkGC *gc, *bg_gc; + GdkFont *font; + gint i; + gint width, height; + gint xthickness; + gint ythickness; + gint pos; + + g_return_if_fail (ruler != NULL); + g_return_if_fail (GTK_IS_HRULER (ruler)); + + if (!GTK_WIDGET_DRAWABLE (ruler)) + return; + + widget = GTK_WIDGET (ruler); + + gc = widget->style->fg_gc[GTK_STATE_NORMAL]; + bg_gc = widget->style->bg_gc[GTK_STATE_NORMAL]; + font = widget->style->font; + + xthickness = widget->style->klass->xthickness; + ythickness = widget->style->klass->ythickness; + + width = widget->allocation.width; + height = widget->allocation.height - ythickness * 2; + + gtk_paint_box (widget->style, ruler->backing_store, + GTK_STATE_NORMAL, GTK_SHADOW_OUT, + NULL, widget, "hruler", + 0, 0, + widget->allocation.width, widget->allocation.height); + +#if 0 + gdk_draw_line (ruler->backing_store, gc, + xthickness, + height + ythickness, + widget->allocation.width - xthickness, + height + ythickness); +#endif + + /* assume ruler->max_size has the char width */ + /* i is increment of char_width, pos is label number */ + for ( i = 0, pos = 0; i < widget->allocation.width - xthickness; i += ruler->max_size, pos++ ) { + int length = ythickness / 2; + + if ( pos % 10 == 0 ) length = ( 4 * ythickness ); + else if (pos % 5 == 0 ) length = ( 2 * ythickness ); + + gdk_draw_line(ruler->backing_store, gc, + i, height + ythickness, + i, height - length); + + if ( pos % 10 == 0 ) { + char buf[8]; + /* draw label */ + sprintf(buf, "%d", (int) pos); + gdk_draw_string(ruler->backing_store, font, gc, + i + 2, ythickness + font->ascent - 1, + buf); + } + } +} + +/* gtk_ruler_set_pos() - does not work yet, need to reimplement + * gtk_ruler_draw_pos(). */ +void +gtk_shruler_set_pos(GtkSHRuler * ruler, gfloat pos) +{ + GtkRuler * ruler_; + g_return_if_fail( ruler != NULL ); + + ruler_ = GTK_RULER(ruler); + + if ( pos < ruler_->lower ) + pos = ruler_->lower; + if ( pos > ruler_->upper ) + pos = ruler_->upper; + + ruler_->position = pos; + + /* Make sure the ruler has been allocated already */ + if ( ruler_->backing_store != NULL ) + gtk_ruler_draw_pos(ruler_); +} diff --git a/src/gtkshruler.h b/src/gtkshruler.h new file mode 100644 index 000000000..df7afb50b --- /dev/null +++ b/src/gtkshruler.h @@ -0,0 +1,63 @@ +/* GTKSHRuler + * Copyright (C) 2000 Alfons Hoogervorst + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library 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 + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GTK_SHRULER_H__ +#define __GTK_SHRULER_H__ + + +#include <gdk/gdk.h> +#include <gtk/gtkhruler.h> + + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + + +#define GTK_SHRULER(obj) (GTK_CHECK_CAST ((obj), gtk_shruler_get_type (), GtkSHRuler)) +#define GTK_SHRULER_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), gtk_shruler_get_type (), GtkSHRulerClass)) +#define GTK_IS_SHRULER(obj) (GTK_CHECK_TYPE ((obj), gtk_shruler_get_type ())) + + +typedef struct _GtkSHRuler GtkSHRuler; +typedef struct _GtkSHRulerClass GtkSHRulerClass; + +struct _GtkSHRuler +{ + GtkHRuler ruler; +}; + +struct _GtkSHRulerClass +{ + GtkHRulerClass parent_class; +}; + + +guint gtk_shruler_get_type (void); +GtkWidget* gtk_shruler_new (void); +void gtk_shruler_set_pos (GtkSHRuler *ruler, + gfloat pos); + + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + + +#endif /* __GTK_SHRULER_H__ */ diff --git a/src/gtkutils.c b/src/gtkutils.c new file mode 100644 index 000000000..e66f612bd --- /dev/null +++ b/src/gtkutils.c @@ -0,0 +1,292 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gdk/gdk.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkcombo.h> +#include <gtk/gtkthemes.h> +#include <gtk/gtkbindings.h> +#include <stdarg.h> + +#include "intl.h" +#include "gtkutils.h" +#include "utils.h" +#include "gtksctree.h" +#include "codeconv.h" + +gint gtkut_get_font_width(GdkFont *font) +{ + gchar *str; + gint width; + + if (conv_get_current_charset() == C_UTF_8) + str = "Abcdef"; + else + str = _("Abcdef"); + + width = gdk_string_width(font, str); + width /= strlen(str); + + return width; +} + +gint gtkut_get_font_height(GdkFont *font) +{ + gchar *str; + gint height; + + if (conv_get_current_charset() == C_UTF_8) + str = "Abcdef"; + else + str = _("Abcdef"); + + height = gdk_string_height(font, str); + + return height; +} + +void gtkut_convert_int_to_gdk_color(gint rgbvalue, GdkColor *color) +{ + g_return_if_fail(color != NULL); + + color->pixel = 0L; + color->red = (int) (((gdouble)((rgbvalue & 0xff0000) >> 16) / 255.0) * 65535.0); + color->green = (int) (((gdouble)((rgbvalue & 0x00ff00) >> 8) / 255.0) * 65535.0); + color->blue = (int) (((gdouble) (rgbvalue & 0x0000ff) / 255.0) * 65535.0); +} + +void gtkut_button_set_create(GtkWidget **bbox, + GtkWidget **button1, const gchar *label1, + GtkWidget **button2, const gchar *label2, + GtkWidget **button3, const gchar *label3) +{ + g_return_if_fail(bbox != NULL); + g_return_if_fail(button1 != NULL); + + *bbox = gtk_hbutton_box_new(); + gtk_button_box_set_layout(GTK_BUTTON_BOX(*bbox), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing(GTK_BUTTON_BOX(*bbox), 5); + + *button1 = gtk_button_new_with_label(label1); + GTK_WIDGET_SET_FLAGS(*button1, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(*bbox), *button1, TRUE, TRUE, 0); + gtk_widget_show(*button1); + + if (button2) { + *button2 = gtk_button_new_with_label(label2); + GTK_WIDGET_SET_FLAGS(*button2, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(*bbox), *button2, TRUE, TRUE, 0); + gtk_widget_show(*button2); + } + + if (button3) { + *button3 = gtk_button_new_with_label(label3); + GTK_WIDGET_SET_FLAGS(*button3, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(*bbox), *button3, TRUE, TRUE, 0); + gtk_widget_show(*button3); + } +} + +#define CELL_SPACING 1 +#define ROW_TOP_YPIXEL(clist, row) (((clist)->row_height * (row)) + \ + (((row) + 1) * CELL_SPACING) + \ + (clist)->voffset) +#define ROW_FROM_YPIXEL(clist, y) (((y) - (clist)->voffset) / \ + ((clist)->row_height + CELL_SPACING)) + +void gtkut_ctree_node_move_if_on_the_edge(GtkCTree *ctree, GtkCTreeNode *node) +{ + GtkCList *clist = GTK_CLIST(ctree); + gint row; + GtkVisibility row_visibility, prev_row_visibility, next_row_visibility; + + g_return_if_fail(ctree != NULL); + g_return_if_fail(node != NULL); + + row = g_list_position(clist->row_list, (GList *)node); + if (row < 0 || row >= clist->rows || clist->row_height == 0) return; + row_visibility = gtk_clist_row_is_visible(clist, row); + prev_row_visibility = gtk_clist_row_is_visible(clist, row - 1); + next_row_visibility = gtk_clist_row_is_visible(clist, row + 1); + + if (row_visibility == GTK_VISIBILITY_NONE) { + gtk_clist_moveto(clist, row, -1, 0.5, 0); + return; + } + if (row_visibility == GTK_VISIBILITY_FULL && + prev_row_visibility == GTK_VISIBILITY_FULL && + next_row_visibility == GTK_VISIBILITY_FULL) + return; + if (prev_row_visibility != GTK_VISIBILITY_FULL && + next_row_visibility != GTK_VISIBILITY_FULL) + return; + + if (prev_row_visibility != GTK_VISIBILITY_FULL) { + gtk_clist_moveto(clist, row, -1, 0.2, 0); + return; + } + if (next_row_visibility != GTK_VISIBILITY_FULL) { + gtk_clist_moveto(clist, row, -1, 0.8, 0); + return; + } +} + +#undef CELL_SPACING +#undef ROW_TOP_YPIXEL +#undef ROW_FROM_YPIXEL + +gint gtkut_ctree_get_nth_from_node(GtkCTree *ctree, GtkCTreeNode *node) +{ + g_return_val_if_fail(ctree != NULL, -1); + g_return_val_if_fail(node != NULL, -1); + + return g_list_position(GTK_CLIST(ctree)->row_list, (GList *)node); +} + +void gtkut_ctree_set_focus_row(GtkCTree *ctree, GtkCTreeNode *node) +{ + gtkut_clist_set_focus_row(GTK_CLIST(ctree), + gtkut_ctree_get_nth_from_node(ctree, node)); +} + +void gtkut_clist_set_focus_row(GtkCList *clist, gint row) +{ + clist->focus_row = row; + GTKUT_CTREE_REFRESH(clist); +} + +void gtkut_combo_set_items(GtkCombo *combo, const gchar *str1, ...) +{ + va_list args; + gchar *s; + GList *combo_items = NULL; + + g_return_if_fail(str1 != NULL); + + combo_items = g_list_append(combo_items, (gpointer)str1); + va_start(args, str1); + s = va_arg(args, gchar*); + while (s) { + combo_items = g_list_append(combo_items, (gpointer)s); + s = va_arg(args, gchar*); + } + va_end(args); + + gtk_combo_set_popdown_strings(combo, combo_items); + + g_list_free(combo_items); +} + +void gtkut_widget_disable_theme_engine(GtkWidget *widget) +{ + GtkStyle *style, *new_style; + + style = gtk_widget_get_style(widget); + + if (style->engine) { + GtkThemeEngine *engine; + + engine = style->engine; + style->engine = NULL; + new_style = gtk_style_copy(style); + style->engine = engine; + gtk_widget_set_style(widget, new_style); + } +} + +static void gtkut_widget_draw_cb(GtkWidget *widget, GdkRectangle *area, + gboolean *flag) +{ + *flag = TRUE; + gtk_signal_disconnect_by_data(GTK_OBJECT(widget), flag); +} + +void gtkut_widget_wait_for_draw(GtkWidget *widget) +{ + gboolean flag = FALSE; + + if (!GTK_WIDGET_VISIBLE(widget)) return; + + gtk_signal_connect(GTK_OBJECT(widget), "draw", + GTK_SIGNAL_FUNC(gtkut_widget_draw_cb), &flag); + while (!flag) + gtk_main_iteration(); +} + +void gtkut_widget_get_uposition(GtkWidget *widget, gint *px, gint *py) +{ + gint x, y; + gint sx, sy; + + g_return_if_fail(widget != NULL); + g_return_if_fail(widget->window != NULL); + + /* gdk_window_get_root_origin ever return *rootwindow*'s position*/ + gdk_window_get_root_origin(widget->window, &x, &y); + + sx = gdk_screen_width(); + sy = gdk_screen_height(); + x %= sx; if (x < 0) x += sx; + y %= sy; if (y < 0) y += sy; + *px = x; + *py = y; +} + +static void gtkut_clist_bindings_add(GtkWidget *clist) +{ + GtkBindingSet *binding_set; + + binding_set = gtk_binding_set_by_class + (GTK_CLIST_CLASS(GTK_OBJECT(clist)->klass)); + + gtk_binding_entry_add_signal(binding_set, GDK_n, GDK_CONTROL_MASK, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_FORWARD, + GTK_TYPE_FLOAT, 0.0); + gtk_binding_entry_add_signal(binding_set, GDK_p, GDK_CONTROL_MASK, + "scroll_vertical", 2, + GTK_TYPE_ENUM, GTK_SCROLL_STEP_BACKWARD, + GTK_TYPE_FLOAT, 0.0); +} + +void gtkut_widget_init(void) +{ + GtkWidget *clist; + + clist = gtk_clist_new(1); + gtkut_clist_bindings_add(clist); + gtk_widget_unref(clist); + + clist = gtk_ctree_new(1, 0); + gtkut_clist_bindings_add(clist); + gtk_widget_unref(clist); + + clist = gtk_sctree_new_with_titles(1, 0, NULL); + gtkut_clist_bindings_add(clist); + gtk_widget_unref(clist); +} diff --git a/src/gtkutils.h b/src/gtkutils.h new file mode 100644 index 000000000..ef37ccd8e --- /dev/null +++ b/src/gtkutils.h @@ -0,0 +1,94 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __GTKUTILS_H__ +#define __GTKUTILS_H__ + +#include <glib.h> +#include <gdk/gdk.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkcombo.h> + +#define GTK_EVENTS_FLUSH() \ +{ \ + while (gtk_events_pending()) \ + gtk_main_iteration(); \ +} + +#define PIXMAP_CREATE(widget, pixmap, mask, xpm_d) \ +{ \ + if (!pixmap) { \ + GtkStyle *style = gtk_widget_get_style(widget); \ + pixmap = gdk_pixmap_create_from_xpm_d \ + (widget->window, &mask, \ + &style->bg[GTK_STATE_NORMAL], xpm_d); \ + } \ +} + +#define GTK_WIDGET_PTR(wid) (*(GtkWidget **)wid) + +#define GTKUT_CTREE_NODE_SET_ROW_DATA(node, d) \ +{ \ + GTK_CTREE_ROW(node)->row.data = d; \ +} + +#define GTKUT_CTREE_NODE_GET_ROW_DATA(node) \ + (GTK_CTREE_ROW(node)->row.data) + +#define GTKUT_CTREE_REFRESH(clist) \ + GTK_CLIST_CLASS(GTK_OBJECT(clist)->klass)->refresh(clist) + +gint gtkut_get_font_width (GdkFont *font); +gint gtkut_get_font_height (GdkFont *font); + +void gtkut_convert_int_to_gdk_color (gint rgbvalue, + GdkColor *color); + +void gtkut_button_set_create (GtkWidget **bbox, + GtkWidget **button1, + const gchar *label1, + GtkWidget **button2, + const gchar *label2, + GtkWidget **button3, + const gchar *label3); + +void gtkut_ctree_node_move_if_on_the_edge + (GtkCTree *ctree, + GtkCTreeNode *node); +gint gtkut_ctree_get_nth_from_node (GtkCTree *ctree, + GtkCTreeNode *node); +void gtkut_ctree_set_focus_row (GtkCTree *ctree, + GtkCTreeNode *node); +void gtkut_clist_set_focus_row (GtkCList *clist, + gint row); +void gtkut_combo_set_items (GtkCombo *combo, + const gchar *str1, ...); +void gtkut_widget_disable_theme_engine (GtkWidget *widget); + +void gtkut_widget_wait_for_draw (GtkWidget *widget); + +void gtkut_widget_get_uposition (GtkWidget *widget, + gint *px, + gint *py); + +void gtkut_widget_init (void); + +#endif /* __GTKUTILS_H__ */ diff --git a/src/headerview.c b/src/headerview.c new file mode 100644 index 000000000..73cda7331 --- /dev/null +++ b/src/headerview.c @@ -0,0 +1,342 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkstyle.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkpixmap.h> +#include <stdio.h> +#include <string.h> +#include <time.h> + +#if HAVE_LIBCOMPFACE +# include <compface.h> +#endif + +#include "intl.h" +#include "main.h" +#include "headerview.h" +#include "prefs_common.h" +#include "gtkutils.h" +#include "utils.h" + +static GdkFont *boldfont; + +#define TR(str) (prefs_common.trans_hdr ? gettext(str) : str) + +#if 0 + _("From:"); + _("To:"); + _("Newsgroups:"); + _("Subject:"); +#endif + +#if HAVE_LIBCOMPFACE +#define XPM_XFACE_HEIGHT (HEIGHT + 3) /* 3 = 1 header + 2 colors */ + +static gchar *xpm_xface[XPM_XFACE_HEIGHT]; + +static void headerview_show_xface (HeaderView *headerview, + MsgInfo *msginfo); +static gint create_xpm_from_xface (gchar *xpm[], + const gchar *xface); +#endif + +HeaderView *headerview_create(void) +{ + HeaderView *headerview; + GtkWidget *hbox; + GtkWidget *vbox; + GtkWidget *hbox1; + GtkWidget *hbox2; + GtkWidget *from_header_label; + GtkWidget *from_body_label; + GtkWidget *to_header_label; + GtkWidget *to_body_label; + GtkWidget *ng_header_label; + GtkWidget *ng_body_label; + GtkWidget *subject_header_label; + GtkWidget *subject_body_label; + + debug_print(_("Creating header view...\n")); + headerview = g_new0(HeaderView, 1); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 2); + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); + + hbox1 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 0); + hbox2 = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox2, FALSE, FALSE, 0); + + from_header_label = gtk_label_new(TR("From:")); + from_body_label = gtk_label_new(""); + to_header_label = gtk_label_new(TR("To:")); + to_body_label = gtk_label_new(""); + ng_header_label = gtk_label_new(TR("Newsgroups:")); + ng_body_label = gtk_label_new(""); + subject_header_label = gtk_label_new(TR("Subject:")); + subject_body_label = gtk_label_new(""); + + gtk_box_pack_start(GTK_BOX(hbox1), from_header_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), from_body_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), to_header_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), to_body_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), ng_header_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), ng_body_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox2), subject_header_label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox2), subject_body_label, FALSE, FALSE, 0); + + headerview->hbox = hbox; + headerview->from_header_label = from_header_label; + headerview->from_body_label = from_body_label; + headerview->to_header_label = to_header_label; + headerview->to_body_label = to_body_label; + headerview->ng_header_label = ng_header_label; + headerview->ng_body_label = ng_body_label; + headerview->subject_header_label = subject_header_label; + headerview->subject_body_label = subject_body_label; + headerview->image = NULL; + + gtk_widget_show_all(hbox); + + return headerview; +} + +void headerview_init(HeaderView *headerview) +{ + if (!boldfont) + boldfont = gdk_fontset_load(BOLD_FONT); + +#define SET_FONT_STYLE(wid) \ +{ \ + GtkStyle *style; \ + \ + style = gtk_style_copy(gtk_widget_get_style(headerview->wid)); \ + style->font = boldfont; \ + gtk_widget_set_style(headerview->wid, style); \ +} + + SET_FONT_STYLE(from_header_label); + SET_FONT_STYLE(to_header_label); + SET_FONT_STYLE(ng_header_label); + SET_FONT_STYLE(subject_header_label); + + headerview_clear(headerview); + headerview_set_visibility(headerview, prefs_common.display_header_pane); + +#if HAVE_LIBCOMPFACE + { + gint i; + + for (i = 0; i < XPM_XFACE_HEIGHT; i++) { + xpm_xface[i] = g_malloc(WIDTH + 1); + *xpm_xface[i] = '\0'; + } + } +#endif +} + +void headerview_show(HeaderView *headerview, MsgInfo *msginfo) +{ + headerview_clear(headerview); + + gtk_label_set_text(GTK_LABEL(headerview->from_body_label), + msginfo->from ? msginfo->from : _("(No From)")); + if (msginfo->to) { + gtk_label_set_text(GTK_LABEL(headerview->to_body_label), + msginfo->to); + gtk_widget_show(headerview->to_header_label); + gtk_widget_show(headerview->to_body_label); + } + if (msginfo->newsgroups) { + gtk_label_set_text(GTK_LABEL(headerview->ng_body_label), + msginfo->newsgroups); + gtk_widget_show(headerview->ng_header_label); + gtk_widget_show(headerview->ng_body_label); + } + gtk_label_set_text(GTK_LABEL(headerview->subject_body_label), + msginfo->subject ? msginfo->subject : + _("(No Subject)")); + +#if HAVE_LIBCOMPFACE + headerview_show_xface(headerview, msginfo); +#endif +} + +#if HAVE_LIBCOMPFACE +static void headerview_show_xface(HeaderView *headerview, MsgInfo *msginfo) +{ + gchar xface[2048]; + GdkPixmap *pixmap; + GdkBitmap *mask; + GtkWidget *hbox = headerview->hbox; + + if (!msginfo->xface || strlen(msginfo->xface) < 5) { + if (headerview->image && + GTK_WIDGET_VISIBLE(headerview->image)) { + gtk_widget_hide(headerview->image); + gtk_widget_queue_resize(hbox); + } + return; + } + + strncpy(xface, msginfo->xface, sizeof(xface)); + + if (uncompface(xface) < 0) { + g_warning("uncompface failed\n"); + if (headerview->image) + gtk_widget_hide(headerview->image); + return; + } + + create_xpm_from_xface(xpm_xface, xface); + + pixmap = gdk_pixmap_create_from_xpm_d + (hbox->window, &mask, &hbox->style->white, xpm_xface); + + if (!headerview->image) { + GtkWidget *image; + + image = gtk_pixmap_new(pixmap, mask); + gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); + gtk_widget_show(image); + headerview->image = image; + } else { + gtk_pixmap_set(GTK_PIXMAP(headerview->image), pixmap, mask); + gtk_widget_show(headerview->image); + } + + gdk_pixmap_unref(pixmap); +} +#endif + +void headerview_clear(HeaderView *headerview) +{ + gtk_label_set_text(GTK_LABEL(headerview->from_body_label), ""); + gtk_label_set_text(GTK_LABEL(headerview->to_body_label), ""); + gtk_label_set_text(GTK_LABEL(headerview->ng_body_label), ""); + gtk_label_set_text(GTK_LABEL(headerview->subject_body_label), ""); + gtk_widget_hide(headerview->to_header_label); + gtk_widget_hide(headerview->to_body_label); + gtk_widget_hide(headerview->ng_header_label); + gtk_widget_hide(headerview->ng_body_label); + + if (headerview->image && GTK_WIDGET_VISIBLE(headerview->image)) { + gtk_widget_hide(headerview->image); + gtk_widget_queue_resize(headerview->hbox); + } +} + +void headerview_set_visibility(HeaderView *headerview, gboolean visibility) +{ + if (visibility) + gtk_widget_show(headerview->hbox); + else + gtk_widget_hide(headerview->hbox); +} + +void headerview_destroy(HeaderView *headerview) +{ + g_free(headerview); +} + +#if HAVE_LIBCOMPFACE +static gint create_xpm_from_xface(gchar *xpm[], const gchar *xface) +{ + static gchar *bit_pattern[] = { + "....", + "...#", + "..#.", + "..##", + ".#..", + ".#.#", + ".##.", + ".###", + "#...", + "#..#", + "#.#.", + "#.##", + "##..", + "##.#", + "###.", + "####" + }; + + static gchar *xface_header = "48 48 2 1"; + static gchar *xface_black = "# c #000000"; + static gchar *xface_white = ". c #ffffff"; + + gint i, line = 0; + const guchar *p; + gchar buf[WIDTH * 4 + 1]; /* 4 = strlen("0x0000") */ + + p = xface; + + strcpy(xpm[line++], xface_header); + strcpy(xpm[line++], xface_black); + strcpy(xpm[line++], xface_white); + + for (i = 0; i < HEIGHT; i++) { + gint col; + + buf[0] = '\0'; + + for (col = 0; col < 3; col++) { + gint figure; + + p += 2; /* skip '0x' */ + + for (figure = 0; figure < 4; figure++) { + gint n = 0; + + if ('0' <= *p && *p <= '9') { + n = *p - '0'; + } else if ('a' <= *p && *p <= 'f') { + n = *p - 'a' + 10; + } else if ('A' <= *p && *p <= 'F') { + n = *p - 'A' + 10; + } + + strcat(buf, bit_pattern[n]); + p++; /* skip ',' */ + } + + p++; /* skip '\n' */ + } + + strcpy(xpm[line++], buf); + p++; + } + + return 0; +} +#endif diff --git a/src/headerview.h b/src/headerview.h new file mode 100644 index 000000000..db7d810be --- /dev/null +++ b/src/headerview.h @@ -0,0 +1,55 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __HEADERVIEW_H__ +#define __HEADERVIEW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +#include "procmsg.h" + +typedef struct _HeaderView HeaderView; + +struct _HeaderView +{ + GtkWidget *hbox; + + GtkWidget *from_header_label; + GtkWidget *from_body_label; + GtkWidget *to_header_label; + GtkWidget *to_body_label; + GtkWidget *ng_header_label; + GtkWidget *ng_body_label; + GtkWidget *subject_header_label; + GtkWidget *subject_body_label; + + GtkWidget *image; +}; + +HeaderView *headerview_create (void); +void headerview_init (HeaderView *headerview); +void headerview_show (HeaderView *headerview, + MsgInfo *msginfo); +void headerview_clear (HeaderView *headerview); +void headerview_set_visibility (HeaderView *headerview, + gboolean visibility); +void headerview_destroy (HeaderView *headerview); + +#endif /* __HEADERVIEW_H__ */ diff --git a/src/headerwindow.c b/src/headerwindow.c new file mode 100644 index 000000000..a0462d084 --- /dev/null +++ b/src/headerwindow.c @@ -0,0 +1,176 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkcontainer.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtktext.h> +#include <stdio.h> +#include <string.h> + +#include "intl.h" +#include "main.h" +#include "headerwindow.h" +#include "mainwindow.h" +#include "procheader.h" +#include "procmsg.h" +#include "codeconv.h" +#include "utils.h" + +static GdkFont *normalfont; +static GdkFont *boldfont; + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, + HeaderWindow *headerwin); + +HeaderWindow *header_window_create(void) +{ + HeaderWindow *headerwin; + GtkWidget *window; + GtkWidget *scrolledwin; + GtkWidget *text; + + debug_print(_("Creating header window...\n")); + headerwin = g_new0(HeaderWindow, 1); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), _("All header")); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); + gtk_widget_set_usize(window, 600, 500); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), headerwin); + gtk_widget_realize(window); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_container_add(GTK_CONTAINER(window), scrolledwin); + gtk_widget_show(scrolledwin); + + text = gtk_text_new(gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(scrolledwin)), + gtk_scrolled_window_get_vadjustment + (GTK_SCROLLED_WINDOW(scrolledwin))); + gtk_container_add(GTK_CONTAINER(scrolledwin), text); + gtk_widget_show(text); + + headerwin->window = window; + headerwin->scrolledwin = scrolledwin; + headerwin->text = text; + + return headerwin; +} + +void header_window_init(HeaderWindow *headerwin) +{ + //if (!normalfont) + // normalfont = gdk_fontset_load(NORMAL_FONT); + if (!boldfont) + boldfont = gdk_fontset_load(BOLD_FONT); +} + +void header_window_show(HeaderWindow *headerwin, MsgInfo *msginfo) +{ + gchar *file; + FILE *fp; + gchar buf[BUFFSIZE], tmp[BUFFSIZE]; + GtkText *text = GTK_TEXT(headerwin->text); + gboolean parse_next; + + g_return_if_fail(msginfo != NULL); + + file = procmsg_get_message_file_path(msginfo); + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + g_free(file); + return; + } + + debug_print(_("Displaying the header of %s ...\n"), file); + + g_snprintf(buf, sizeof(buf), _("%s - All header"), file); + gtk_window_set_title(GTK_WINDOW(headerwin->window), buf); + g_free(file); + + gtk_text_freeze(text); + gtk_text_backward_delete(text, gtk_text_get_length(text)); + gtk_text_thaw(text); + gtk_text_freeze(text); + + parse_next = MSG_IS_QUEUED(msginfo->flags); + + for (;;) { + gint val; + gchar *p; + + val = procheader_get_one_field(buf, sizeof(buf), fp, NULL); + if (val == -1) { + if (parse_next) { + parse_next = FALSE; + gtk_text_insert(text, normalfont, NULL, NULL, + "\n", 1); + continue; + } else + break; + } + conv_unmime_header(tmp, sizeof(tmp), buf, NULL); + if ((p = strchr(tmp, ':')) != NULL) { + gtk_text_insert(text, boldfont, NULL, NULL, + tmp, p - tmp + 1); + gtk_text_insert(text, normalfont, NULL, NULL, + p + 1, -1); + } else + gtk_text_insert(text, normalfont, NULL, NULL, tmp, -1); + gtk_text_insert(text, NULL, NULL, NULL, "\n", 1); + } + + fclose(fp); + gtk_text_thaw(text); +} + +void header_window_show_cb(gpointer data, guint action, GtkWidget *widget) +{ + MainWindow *mainwin = data; + GtkCTreeNode *node = mainwin->summaryview->displayed; + MsgInfo *msginfo; + + if (node && !GTK_WIDGET_VISIBLE(mainwin->headerwin->window)) { + msginfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mainwin->summaryview->ctree), node); + header_window_show(mainwin->headerwin, msginfo); + } + + gtk_widget_hide(mainwin->headerwin->window); + gtk_widget_show(mainwin->headerwin->window); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, + HeaderWindow *headerwin) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(headerwin->window); +} diff --git a/src/headerwindow.h b/src/headerwindow.h new file mode 100644 index 000000000..652f40255 --- /dev/null +++ b/src/headerwindow.h @@ -0,0 +1,42 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __HEADERWINDOW_H__ +#define __HEADERWINDOW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +typedef struct _HeaderWindow HeaderWindow; + +#include "procmsg.h" + +struct _HeaderWindow +{ + GtkWidget *window; + GtkWidget *scrolledwin; + GtkWidget *text; +}; + +HeaderWindow *header_window_create(void); +void header_window_init(HeaderWindow *headerwin); +void header_window_show(HeaderWindow *headerwin, MsgInfo *msginfo); +void header_window_show_cb(gpointer data, guint action, GtkWidget *widget); + +#endif /* __HEADERWINDOW_H__ */ diff --git a/src/html.c b/src/html.c new file mode 100644 index 000000000..5ce4f0843 --- /dev/null +++ b/src/html.c @@ -0,0 +1,683 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <ctype.h> + +#include "html.h" +#include "codeconv.h" +#include "utils.h" + +#define HTMLBUFSIZE 8192 +#define HR_STR "------------------------------------------------" + +typedef struct _HTMLSymbol HTMLSymbol; + +struct _HTMLSymbol +{ + gchar *const key; + gchar *const val; +}; + +static HTMLSymbol symbol_list[] = { + {"<" , "<"}, + {">" , ">"}, + {"&" , "&"}, + {""" , "\""}, + {" " , " "}, + {"™" , "(TM)"}, + + {"™", "(TM)"}, +}; + +static HTMLSymbol ascii_symbol_list[] = { + {"¡" , "^!"}, + {"¦", "|"}, + {"©" , "(C)"}, + {"«" , "<<"}, + {"®" , "(R)"}, + + {"²" , "^2"}, + {"³" , "^3"}, + {"´" , "'"}, + {"¸" , ","}, + {"¹" , "^1"}, + {"»" , ">>"}, + {"¼", "1/4"}, + {"½", "1/2"}, + {"¾", "3/4"}, + {"¿", "^?"}, + + {"À", "A`"}, + {"Á", "A'"}, + {"Â" , "A^"}, + {"Ã", "A~"}, + {"Æ" , "AE"}, + {"È", "E`"}, + {"É", "E'"}, + {"Ê" , "E^"}, + {"Ì", "I`"}, + {"Í", "I'"}, + {"Î" , "I^"}, + + {"Ñ", "N~"}, + {"Ò", "O`"}, + {"Ó", "O'"}, + {"Ô" , "O^"}, + {"Õ", "O~"}, + {"Ù", "U`"}, + {"Ú", "U'"}, + {"Û" , "U^"}, + {"Ý", "Y'"}, + + {"à", "a`"}, + {"á", "a'"}, + {"â" , "a^"}, + {"ã", "a~"}, + {"æ" , "ae"}, + {"è", "e`"}, + {"é", "e'"}, + {"ê" , "e^"}, + {"ì", "i`"}, + {"í", "i'"}, + {"î" , "i^"}, + + {"ñ", "n~"}, + {"ò", "o`"}, + {"ó", "o'"}, + {"ô" , "o^"}, + {"õ", "o~"}, + {"ù", "u`"}, + {"ú", "u'"}, + {"û" , "u^"}, + {"ý", "y'"}, +}; + +static HTMLSymbol eucjp_symbol_list[] = { + {"¡" , "^!"}, + {"¢" , "\xa1\xf1"}, + {"£" , "\xa1\xf2"}, + {"¥" , "\xa1\xef"}, + {"¦", "|"}, + {"§" , "\xa1\xf8"}, + {"¨" , "\xa1\xaf"}, + {"©" , "(C)"}, + {"«" , "<<"}, + {"®" , "(R)"}, + + {"°" , "\xa1\xeb"}, + {"±", "\xa1\xde"}, + {"²" , "^2"}, + {"³" , "^3"}, + {"´" , "'"}, + {"µ" , "\xa6\xcc"}, + {"¶" , "\xa2\xf9"}, + {"·", "\xa1\xa6"}, + {"¸" , ","}, + {"¹" , "^1"}, + {"»" , ">>"}, + {"¼", "1/4"}, + {"½", "1/2"}, + {"¾", "3/4"}, + {"¿", "^?"}, + + {"À", "A`"}, + {"Á", "A'"}, + {"Â" , "A^"}, + {"Ã", "A~"}, + {"Ä" , "A\xa1\xaf"}, + {"Å" , "A\xa1\xeb"}, + {"Æ" , "AE"}, + {"È", "E`"}, + {"É", "E'"}, + {"Ê" , "E^"}, + {"Ë" , "E\xa1\xaf"}, + {"Ì", "I`"}, + {"Í", "I'"}, + {"Î" , "I^"}, + {"Ï" , "I\xa1\xaf"}, + + {"Ñ", "N~"}, + {"Ò", "O`"}, + {"Ó", "O'"}, + {"Ô" , "O^"}, + {"Õ", "O~"}, + {"Ö" , "O\xa1\xaf"}, + {"×" , "\xa1\xdf"}, + {"Ù", "U`"}, + {"Ú", "U'"}, + {"Û" , "U^"}, + {"Ü" , "U\xa1\xaf"}, + {"Ý", "Y'"}, + + {"à", "a`"}, + {"á", "a'"}, + {"â" , "a^"}, + {"ã", "a~"}, + {"ä" , "a\xa1\xaf"}, + {"å" , "a\xa1\xeb"}, + {"æ" , "ae"}, + {"è", "e`"}, + {"é", "e'"}, + {"ê" , "e^"}, + {"ë" , "e\xa1\xaf"}, + {"ì", "i`"}, + {"í", "i'"}, + {"î" , "i^"}, + {"ï" , "i\xa1\xaf"}, + + {"ð" , "\xa2\xdf"}, + {"ñ", "n~"}, + {"ò", "o`"}, + {"ó", "o'"}, + {"ô" , "o^"}, + {"õ", "o~"}, + {"ö" , "o\xa1\xaf"}, + {"÷", "\xa1\xe0"}, + {"ù", "u`"}, + {"ú", "u'"}, + {"û" , "u^"}, + {"ü" , "u\xa1\xaf"}, + {"ý", "y'"}, + {"ÿ" , "y\xa1\xaf"}, +}; + +static HTMLSymbol latin_symbol_list[] = { + {"¡" , "\xa1"}, + {"¢" , "\xa2"}, + {"£" , "\xa3"}, + {"¤", "\xa4"}, + {"¥" , "\xa5"}, + {"¦", "\xa6"}, + {"§" , "\xa7"}, + {"¨" , "\xa8"}, + {"©" , "\xa9"}, + {"ª" , "\xaa"}, + {"«" , "\xab"}, + {"¬" , "\xac"}, + {"­" , "\xad"}, + {"®" , "\xae"}, + {"¯" , "\xaf"}, + + {"°" , "\xb0"}, + {"±", "\xb1"}, + {"²" , "\xb2"}, + {"³" , "\xb3"}, + {"´" , "\xb4"}, + {"µ" , "\xb5"}, + {"¶" , "\xb6"}, + {"·", "\xb7"}, + {"¸" , "\xb8"}, + {"¹" , "\xb9"}, + {"º" , "\xba"}, + {"»" , "\xbb"}, + {"¼", "\xbc"}, + {"½", "\xbd"}, + {"¾", "\xbe"}, + {"¿", "\xbf"}, + + {"À", "\xc0"}, + {"Á", "\xc1"}, + {"Â" , "\xc2"}, + {"Ã", "\xc3"}, + {"Ä" , "\xc4"}, + {"Å" , "\xc5"}, + {"Æ" , "\xc6"}, + {"Ç", "\xc7"}, + {"È", "\xc8"}, + {"É", "\xc9"}, + {"Ê" , "\xca"}, + {"Ë" , "\xcb"}, + {"Ì", "\xcc"}, + {"Í", "\xcd"}, + {"Î" , "\xce"}, + {"Ï" , "\xcf"}, + + {"Ð" , "\xd0"}, + {"Ñ", "\xd1"}, + {"Ò", "\xd2"}, + {"Ó", "\xd3"}, + {"Ô" , "\xd4"}, + {"Õ", "\xd5"}, + {"Ö" , "\xd6"}, + {"×" , "\xd7"}, + {"Ø", "\xd8"}, + {"Ù", "\xd9"}, + {"Ú", "\xda"}, + {"Û" , "\xdb"}, + {"Ü" , "\xdc"}, + {"Ý", "\xdd"}, + {"Þ" , "\xde"}, + {"ß" , "\xdf"}, + + {"à", "\xe0"}, + {"á", "\xe1"}, + {"â" , "\xe2"}, + {"ã", "\xe3"}, + {"ä" , "\xe4"}, + {"å" , "\xe5"}, + {"æ" , "\xe6"}, + {"ç", "\xe7"}, + {"è", "\xe8"}, + {"é", "\xe9"}, + {"ê" , "\xea"}, + {"ë" , "\xeb"}, + {"ì", "\xec"}, + {"í", "\xed"}, + {"î" , "\xee"}, + {"ï" , "\xef"}, + + {"ð" , "\xf0"}, + {"ñ", "\xf1"}, + {"ò", "\xf2"}, + {"ó", "\xf3"}, + {"ô" , "\xf4"}, + {"õ", "\xf5"}, + {"ö" , "\xf6"}, + {"÷", "\xf7"}, + {"ø", "\xf8"}, + {"ù", "\xf9"}, + {"ú", "\xfa"}, + {"û" , "\xfb"}, + {"ü" , "\xfc"}, + {"ý", "\xfd"}, + {"þ" , "\xfe"}, + {"ÿ" , "\xff"}, +}; + +static GHashTable *default_symbol_table; +static GHashTable *eucjp_symbol_table; +static GHashTable *latin_symbol_table; + +static HTMLState html_read_line (HTMLParser *parser); +static void html_append_char (HTMLParser *parser, + gchar ch); +static void html_append_str (HTMLParser *parser, + const gchar *str, + gint len); +static HTMLState html_parse_tag (HTMLParser *parser); +static void html_parse_special (HTMLParser *parser); +static void html_get_parenthesis (HTMLParser *parser, + gchar *buf, + gint len); + +#if 0 +static gint g_str_case_equal (gconstpointer v, + gconstpointer v2); +static guint g_str_case_hash (gconstpointer key); +#endif + +HTMLParser *html_parser_new(FILE *fp, CodeConverter *conv) +{ + HTMLParser *parser; + + g_return_val_if_fail(fp != NULL, NULL); + g_return_val_if_fail(conv != NULL, NULL); + + parser = g_new0(HTMLParser, 1); + parser->fp = fp; + parser->conv = conv; + parser->str = g_string_new(NULL); + parser->buf = g_string_new(NULL); + parser->bufp = parser->buf->str; + parser->newline = TRUE; + parser->empty_line = TRUE; + parser->space = FALSE; + parser->pre = FALSE; + +#define SYMBOL_TABLE_ADD(table, list) \ +{ \ + gint i; \ + \ + for (i = 0; i < sizeof(list) / sizeof(list[0]); i++) \ + g_hash_table_insert(table, list[i].key, list[i].val); \ +} + + if (!default_symbol_table) { + default_symbol_table = + g_hash_table_new(g_str_hash, g_str_equal); + SYMBOL_TABLE_ADD(default_symbol_table, symbol_list); + SYMBOL_TABLE_ADD(default_symbol_table, ascii_symbol_list); + } + if (!eucjp_symbol_table) { + eucjp_symbol_table = + g_hash_table_new(g_str_hash, g_str_equal); + SYMBOL_TABLE_ADD(eucjp_symbol_table, symbol_list); + SYMBOL_TABLE_ADD(eucjp_symbol_table, eucjp_symbol_list); + } + if (!latin_symbol_table) { + latin_symbol_table = + g_hash_table_new(g_str_hash, g_str_equal); + SYMBOL_TABLE_ADD(latin_symbol_table, symbol_list); + SYMBOL_TABLE_ADD(latin_symbol_table, latin_symbol_list); + } + +#undef SYMBOL_TABLE_ADD + + if (conv->charset == C_ISO_8859_1) + parser->symbol_table = latin_symbol_table; + else if ((conv->charset == C_ISO_2022_JP || + conv->charset == C_ISO_2022_JP_2 || + conv->charset == C_EUC_JP || + conv->charset == C_SHIFT_JIS) && + conv_get_current_charset() == C_EUC_JP) + parser->symbol_table = eucjp_symbol_table; + else + parser->symbol_table = default_symbol_table; + + return parser; +} + +void html_parser_destroy(HTMLParser *parser) +{ + g_string_free(parser->str, TRUE); + g_string_free(parser->buf, TRUE); + g_free(parser); +} + +gchar *html_parse(HTMLParser *parser) +{ + parser->state = HTML_NORMAL; + g_string_truncate(parser->str, 0); + + if (*parser->bufp == '\0') { + g_string_truncate(parser->buf, 0); + parser->bufp = parser->buf->str; + if (html_read_line(parser) == HTML_EOF) + return NULL; + } + + while (*parser->bufp != '\0') { + switch (*parser->bufp) { + case '<': + if (parser->str->len == 0) + html_parse_tag(parser); + else + return parser->str->str; + break; + case '&': + html_parse_special(parser); + break; + case ' ': + case '\t': + case '\r': + case '\n': + if (parser->bufp[0] == '\r' && parser->bufp[1] == '\n') + parser->bufp++; + + if (!parser->pre) { + if (!parser->newline) + parser->space = TRUE; + + parser->bufp++; + break; + } + /* fallthrough */ + default: + html_append_char(parser, *parser->bufp++); + } + } + + return parser->str->str; +} + +static HTMLState html_read_line(HTMLParser *parser) +{ + gchar buf[HTMLBUFSIZE]; + gchar buf2[HTMLBUFSIZE]; + gint index; + + if (fgets(buf, sizeof(buf), parser->fp) == NULL) { + parser->state = HTML_EOF; + return HTML_EOF; + } + + if (conv_convert(parser->conv, buf2, sizeof(buf2), buf) < 0) { + g_warning("html_read_line(): code conversion failed\n"); + + index = parser->bufp - parser->buf->str; + + g_string_append(parser->buf, buf); + + parser->bufp = parser->buf->str + index; + + return HTML_ERR; + } + + index = parser->bufp - parser->buf->str; + + g_string_append(parser->buf, buf2); + + parser->bufp = parser->buf->str + index; + + return HTML_NORMAL; +} + +static void html_append_char(HTMLParser *parser, gchar ch) +{ + GString *str = parser->str; + + if (!parser->pre && parser->space) { + g_string_append_c(str, ' '); + parser->space = FALSE; + } + + g_string_append_c(str, ch); + + parser->empty_line = FALSE; + if (ch == '\n') { + parser->newline = TRUE; + if (str->len > 1 && str->str[str->len - 2] == '\n') + parser->empty_line = TRUE; + } else + parser->newline = FALSE; +} + +static void html_append_str(HTMLParser *parser, const gchar *str, gint len) +{ + GString *string = parser->str; + + if (!parser->pre && parser->space) { + g_string_append_c(string, ' '); + parser->space = FALSE; + } + + if (len == 0) return; + if (len < 0) + g_string_append(string, str); + else { + gchar *s; + Xstrndup_a(s, str, len, return); + g_string_append(string, s); + } + + parser->empty_line = FALSE; + if (string->len > 0 && string->str[string->len - 1] == '\n') { + parser->newline = TRUE; + if (string->len > 1 && string->str[string->len - 2] == '\n') + parser->empty_line = TRUE; + } else + parser->newline = FALSE; +} + +static HTMLState html_parse_tag(HTMLParser *parser) +{ + gchar buf[HTMLBUFSIZE]; + gchar *p; + + html_get_parenthesis(parser, buf, sizeof(buf)); + + for (p = buf; *p != '\0'; p++) { + if (isspace(*p)) { + *p = '\0'; + break; + } + } + + parser->state = HTML_UNKNOWN; + if (buf[0] == '\0') return parser->state; + + g_strdown(buf); + + if (!strcmp(buf, "br")) { + parser->space = FALSE; + html_append_char(parser, '\n'); + parser->state = HTML_BR; + } else if (!strcmp(buf, "p")) { + parser->space = FALSE; + if (!parser->empty_line) { + parser->space = FALSE; + if (!parser->newline) html_append_char(parser, '\n'); + html_append_char(parser, '\n'); + } + parser->state = HTML_PAR; + } else if (!strcmp(buf, "pre")) { + parser->pre = TRUE; + parser->state = HTML_PRE; + } else if (!strcmp(buf, "/pre")) { + parser->pre = FALSE; + parser->state = HTML_NORMAL; + } else if (!strcmp(buf, "hr")) { + if (!parser->newline) { + parser->space = FALSE; + html_append_char(parser, '\n'); + } + html_append_str(parser, HR_STR "\n", -1); + parser->state = HTML_HR; + } else if (!strcmp(buf, "div") || + !strcmp(buf, "ul") || + !strcmp(buf, "li") || + !strcmp(buf, "table") || + !strcmp(buf, "tr") || + (buf[0] == 'h' && isdigit(buf[1]))) { + if (!parser->newline) { + parser->space = FALSE; + html_append_char(parser, '\n'); + } + parser->state = HTML_NORMAL; + } else if (!strcmp(buf, "/table") || + (buf[0] == '/' && buf[1] == 'h' && isdigit(buf[1]))) { + if (!parser->empty_line) { + parser->space = FALSE; + if (!parser->newline) html_append_char(parser, '\n'); + html_append_char(parser, '\n'); + } + parser->state = HTML_NORMAL; + } else if (!strcmp(buf, "/div") || + !strcmp(buf, "/ul") || + !strcmp(buf, "/li")) { + if (!parser->newline) { + parser->space = FALSE; + html_append_char(parser, '\n'); + } + parser->state = HTML_NORMAL; + } + + return parser->state; +} + +static void html_parse_special(HTMLParser *parser) +{ + gchar symbol_name[9]; + gint n; + const gchar *val; + + parser->state = HTML_UNKNOWN; + g_return_if_fail(*parser->bufp == '&'); + + /* &foo; */ + for (n = 0; parser->bufp[n] != '\0' && parser->bufp[n] != ';'; n++) + ; + if (n > 7 || parser->bufp[n] != ';') { + /* output literal `&' */ + html_append_char(parser, *parser->bufp++); + parser->state = HTML_NORMAL; + return; + } + strncpy2(symbol_name, parser->bufp, n + 2); + parser->bufp += n + 1; + + if ((val = g_hash_table_lookup(parser->symbol_table, symbol_name)) + != NULL) { + html_append_str(parser, val, -1); + parser->state = HTML_NORMAL; + return; + } else if (symbol_name[1] == '#' && isdigit(symbol_name[2])) { + gint ch; + + ch = atoi(symbol_name + 2); + if ((ch > 0 && ch <= 127) || + (ch >= 128 && ch <= 255 && + parser->conv->charset == C_ISO_8859_1)) { + html_append_char(parser, ch); + parser->state = HTML_NORMAL; + return; + } + } + + html_append_str(parser, symbol_name, -1); +} + +static void html_get_parenthesis(HTMLParser *parser, gchar *buf, gint len) +{ + gchar *p; + + buf[0] = '\0'; + g_return_if_fail(*parser->bufp == '<'); + + /* ignore comments */ + if (!strncmp(parser->bufp, "<!--", 4)) { + parser->bufp += 4; + while ((p = strstr(parser->bufp, "-->")) == NULL) + if (html_read_line(parser) == HTML_EOF) return; + parser->bufp = p + 3; + return; + } + + parser->bufp++; + while ((p = strchr(parser->bufp, '>')) == NULL) + if (html_read_line(parser) == HTML_EOF) return; + + strncpy2(buf, parser->bufp, MIN(p - parser->bufp + 1, len)); + parser->bufp = p + 1; +} + +/* these hash functions were taken from gstring.c in glib */ +#if 0 +static gint g_str_case_equal(gconstpointer v, gconstpointer v2) +{ + return strcasecmp((const gchar *)v, (const gchar *)v2) == 0; +} + +static guint g_str_case_hash(gconstpointer key) +{ + const gchar *p = key; + guint h = *p; + + if (h) { + h = tolower(h); + for (p += 1; *p != '\0'; p++) + h = (h << 5) - h + tolower(*p); + } + + return h; +} +#endif diff --git a/src/html.h b/src/html.h new file mode 100644 index 000000000..41853b582 --- /dev/null +++ b/src/html.h @@ -0,0 +1,70 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __HTML_H__ +#define __HTML_H__ + +#include <glib.h> +#include <stdio.h> + +#include "codeconv.h" + +typedef enum +{ + HTML_NORMAL, + HTML_PAR, + HTML_BR, + HTML_HR, + HTML_HREF, + HTML_IMG, + HTML_FONT, + HTML_PRE, + HTML_UNKNOWN, + HTML_ERR, + HTML_EOF +} HTMLState; + +typedef struct _HTMLParser HTMLParser; + +struct _HTMLParser +{ + FILE *fp; + CodeConverter *conv; + + GHashTable *symbol_table; + + GString *str; + GString *buf; + + gchar *bufp; + + HTMLState state; + + gboolean newline; + gboolean empty_line; + gboolean space; + gboolean pre; +}; + +HTMLParser *html_parser_new (FILE *fp, + CodeConverter *conv); +void html_parser_destroy (HTMLParser *parser); +gchar *html_parse (HTMLParser *parser); + +#endif /* __HTML_H__ */ diff --git a/src/imageview.c b/src/imageview.c new file mode 100644 index 000000000..a1f7243df --- /dev/null +++ b/src/imageview.c @@ -0,0 +1,158 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkpixmap.h> + +#if HAVE_GDK_PIXBUF +# include <gdk-pixbuf/gdk-pixbuf.h> +#else +#if HAVE_GDK_IMLIB +# include <gdk_imlib.h> +#endif +#endif /* HAVE_GDK_PIXBUF */ + +#include "intl.h" +#include "mainwindow.h" +#include "prefs_common.h" +#include "procmime.h" +#include "imageview.h" +#include "utils.h" + +ImageView *imageview_create(void) +{ + ImageView *imageview; + GtkWidget *scrolledwin; + + debug_print(_("Creating image view...\n")); + imageview = g_new0(ImageView, 1); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + gtk_widget_set_usize(scrolledwin, prefs_common.mainview_width, -1); + + gtk_widget_show_all(scrolledwin); + + imageview->scrolledwin = scrolledwin; + imageview->image = NULL; + + return imageview; +} + +void imageview_init(ImageView *imageview) +{ +} + +#if HAVE_GDK_PIXBUF +void imageview_show_image(ImageView *imageview, MimeInfo *mimeinfo, + const gchar *file) +{ + GdkPixbuf *pixbuf; + GdkPixmap *pixmap; + GdkBitmap *mask; + + pixbuf = gdk_pixbuf_new_from_file(file); + + if (!pixbuf) { + g_warning(_("Can't load the image.")); + if (imageview->image) + gtk_widget_hide(imageview->image); + return; + } + + if (imageview->messageview->mainwin) + main_window_cursor_wait(imageview->messageview->mainwin); + + gdk_pixbuf_render_pixmap_and_mask(pixbuf, &pixmap, &mask, 0); + + if (!imageview->image) { + imageview->image = gtk_pixmap_new(pixmap, mask); + + gtk_scrolled_window_add_with_viewport + (GTK_SCROLLED_WINDOW(imageview->scrolledwin), + imageview->image); + } else + gtk_pixmap_set(GTK_PIXMAP(imageview->image), pixmap, mask); + + gtk_widget_show(imageview->image); + + gdk_pixbuf_unref(pixbuf); + + if (imageview->messageview->mainwin) + main_window_cursor_normal(imageview->messageview->mainwin); +} +#else +#if HAVE_GDK_IMLIB +void imageview_show_image(ImageView *imageview, MimeInfo *mimeinfo, + const gchar *file) +{ + GdkImlibImage *im; + + im = gdk_imlib_load_image((gchar *)file); + + if (!im) { + g_warning(_("Can't load the image.")); + if (imageview->image) + gtk_widget_hide(imageview->image); + return; + } + + if (imageview->messageview->mainwin) + main_window_cursor_wait(imageview->messageview->mainwin); + + gdk_imlib_render(im, im->rgb_width, im->rgb_height); + + if (!imageview->image) { + imageview->image = gtk_pixmap_new(gdk_imlib_move_image(im), + gdk_imlib_move_mask(im)); + + gtk_scrolled_window_add_with_viewport + (GTK_SCROLLED_WINDOW(imageview->scrolledwin), + imageview->image); + } else + gtk_pixmap_set(GTK_PIXMAP(imageview->image), + gdk_imlib_move_image(im), + gdk_imlib_move_mask(im)); + + gtk_widget_show(imageview->image); + + gdk_imlib_destroy_image(im); + + if (imageview->messageview->mainwin) + main_window_cursor_normal(imageview->messageview->mainwin); +} +#else +void imageview_show_image(ImageView *imageview, MimeInfo *mimeinfo, + const gchar *file) +{ +} +#endif /* HAVE_GDK_IMLIB */ +#endif /* HAVE_GDK_PIXBUF */ + +void imageview_destroy(ImageView *imageview) +{ + g_free(imageview); +} diff --git a/src/imageview.h b/src/imageview.h new file mode 100644 index 000000000..ab0c42d24 --- /dev/null +++ b/src/imageview.h @@ -0,0 +1,46 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __IMAGEVIEW_H__ +#define __IMAGEVIEW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +typedef struct _ImageView ImageView; + +#include "messageview.h" +#include "procmime.h" + +struct _ImageView +{ + GtkWidget *scrolledwin; + GtkWidget *image; + + MessageView *messageview; +}; + +ImageView *imageview_create (void); +void imageview_init (ImageView *imageview); +void imageview_show_image (ImageView *imageview, + MimeInfo *mimeinfo, + const gchar *file); +void imageview_destroy (ImageView *imageview); + +#endif /* __IMAGEVIEW_H__ */ diff --git a/src/imap.c b/src/imap.c new file mode 100644 index 000000000..d0bb81c1a --- /dev/null +++ b/src/imap.c @@ -0,0 +1,1239 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <dirent.h> +#include <unistd.h> + +#include "intl.h" +#include "imap.h" +#include "socket.h" +#include "recv.h" +#include "procmsg.h" +#include "procheader.h" +#include "folder.h" +#include "statusbar.h" +#include "prefs_account.h" +#include "codeconv.h" +#include "utils.h" + +static GList *session_list = NULL; + +static gint imap_cmd_count = 0; + +static GSList *imap_get_uncached_messages(IMAPSession *session, + FolderItem *item, + gint first, + gint last); +static GSList *imap_delete_messages (GSList *mlist, + gint first, + gint last); +static void imap_delete_all_messages (FolderItem *item); + +static gint imap_open (const gchar *server, + gushort port, + gchar *buf); +static gint imap_auth (gint sock, + const gchar *user, + const gchar *pass); +static gint imap_logout (gint sock); +static gint imap_noop (gint sock); +static gint imap_select (gint sock, + const gchar *folder, + gint *exists, + gint *recent, + gint *unseen, + gulong *uid); +static gint imap_get_envelope (gint sock, + gint first, + gint last); +#if 0 +static gint imap_search (gint sock, + GSList *numlist); +#endif +static gint imap_get_message (gint sock, + gint num, + const gchar *filename); +static gint imap_copy_message (gint sock, + gint num, + const gchar *destfolder); +static gint imap_store (gint sock, + gint first, + gint last, + gchar *sub_cmd); + +static gint imap_set_article_flags (IMAPSession *session, + gint first, + gint last, + IMAPFlags flag, + gboolean is_set); +static gint imap_expunge (IMAPSession *session); + +static gchar *imap_parse_atom (gint sock, + gchar *src, + gchar *dest, + gchar *orig_buf); +static gchar *imap_parse_one_address (gint sock, + gchar *start, + gchar *out_from_str, + gchar *out_fromname_str, + gchar *orig_buf); +static gchar *imap_parse_address (gint sock, + gchar *start, + gchar **out_from_str, + gchar **out_fromname_str, + gchar *orig_buf); +static MsgFlags imap_parse_flags (const gchar *flag_str); +static MsgInfo *imap_parse_envelope (gint sock, + gchar *line_str); + +static gint imap_ok (gint sock, + GPtrArray *argbuf); +static void imap_gen_send (gint sock, + const gchar *format, ...); +static gint imap_gen_recv (gint sock, + gchar *buf, + gint size); + +static gchar *search_array_contain_str (GPtrArray *array, + gchar *str); +static void imap_path_subst_slash_to_dot(gchar *str); + + +static IMAPSession *imap_session_connect_if_not(Folder *folder) +{ + RemoteFolder *rfolder = REMOTE_FOLDER(folder); + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(folder->type == F_IMAP, NULL); + g_return_val_if_fail(folder->account != NULL, NULL); + + if (!rfolder->session) { + rfolder->session = + imap_session_new(folder->account->recv_server, 143, + folder->account->userid, + folder->account->passwd); + } else { + if (imap_noop(rfolder->session->sock) != IMAP_SUCCESS) { + log_warning(_("IMAP4 connection to %s:%d has been" + " disconnected. Reconnecting...\n"), + folder->account->recv_server, 143); + session_destroy(rfolder->session); + rfolder->session = + imap_session_new(folder->account->recv_server, + 143, folder->account->userid, + folder->account->passwd); + } + } + + return IMAP_SESSION(rfolder->session); +} + +Session *imap_session_new(const gchar *server, gushort port, + const gchar *user, const gchar *pass) +{ + gchar buf[IMAPBUFSIZE]; + IMAPSession *session; + gint imap_sock; + + g_return_val_if_fail(server != NULL, NULL); + + log_message(_("creating IMAP4 connection to %s:%d ...\n"), + server, port); + + if ((imap_sock = imap_open(server, port, buf)) < 0) + return NULL; + if (imap_auth(imap_sock, user, pass) != IMAP_SUCCESS) { + imap_logout(imap_sock); + close(imap_sock); + return NULL; + } + + session = g_new(IMAPSession, 1); + SESSION(session)->type = SESSION_IMAP; + SESSION(session)->server = g_strdup(server); + SESSION(session)->sock = imap_sock; + SESSION(session)->connected = TRUE; + SESSION(session)->phase = SESSION_READY; + SESSION(session)->data = NULL; + session->mbox = NULL; + + session_list = g_list_append(session_list, session); + + return SESSION(session); +} + +void imap_session_destroy(IMAPSession *session) +{ + close(SESSION(session)->sock); + + g_free(session->mbox); + + session_list = g_list_remove(session_list, session); +} + +void imap_session_destroy_all(void) +{ + while (session_list != NULL) { + IMAPSession *session = (IMAPSession *)session_list->data; + + imap_logout(SESSION(session)->sock); + imap_session_destroy(session); + } +} + +GSList *imap_get_msg_list(Folder *folder, FolderItem *item, gboolean use_cache) +{ + GSList *mlist = NULL; + IMAPSession *session; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(folder->type == F_IMAP, NULL); + g_return_val_if_fail(folder->account != NULL, NULL); + + session = imap_session_connect_if_not(folder); + + if (!session) { + mlist = procmsg_read_cache(item, FALSE); + item->last_num = procmsg_get_last_num_in_cache(mlist); + procmsg_set_flags(mlist, item); + } else { + gint ok, exists = 0, recent = 0, unseen = 0, begin = 1; + gulong uid = 0, last_uid = item->mtime; + + ok = imap_select(SESSION(session)->sock, item->path, + &exists, &recent, &unseen, &uid); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't select folder: %s\n"), item->path); + return NULL; + } + + if (use_cache) { + gint cache_last; + + mlist = procmsg_read_cache(item, FALSE); + procmsg_set_flags(mlist, item); + cache_last = procmsg_get_last_num_in_cache(mlist); + + /* calculating the range of envelope to get */ + if (exists < cache_last) { + /* some messages are deleted (get all) */ + begin = 1; + } else if (exists == cache_last) { + if (last_uid != 0 && last_uid != uid) { + /* some recent but deleted (get all) */ + begin = 1; + } else { + /* mailbox unchanged (get none)*/ + begin = -1; + } + } else { + if (exists == cache_last + recent) { + /* some recent */ + begin = cache_last + 1; + } else { + /* some recent but deleted (get all) */ + begin = 1; + } + } + + item->mtime = uid; + } + + if (1 < begin && begin <= exists) { + GSList *newlist; + + newlist = imap_get_uncached_messages + (session, item, begin, exists); + imap_delete_messages(mlist, begin, INT_MAX); + mlist = g_slist_concat(mlist, newlist); + } else if (begin == 1) { + mlist = imap_get_uncached_messages + (session, item, 1, exists); + imap_delete_all_messages(item); + } + + item->last_num = exists; + } + + statusbar_pop_all(); + + return mlist; +} + +gchar *imap_fetch_msg(Folder *folder, FolderItem *item, gint num) +{ + gchar *path, *filename; + IMAPSession *session; + gint ok; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(item != NULL, NULL); + + session = imap_session_connect_if_not(folder); + + path = folder_item_get_path(item); + filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL); + g_free(path); + + if (is_file_exist(filename)) { + debug_print(_("message %d has been already cached.\n"), num); + return filename; + } + + if (!session) { + g_free(filename); + return NULL; + } + + debug_print(_("getting message %d...\n"), num); + ok = imap_get_message(SESSION(session)->sock, num, filename); + + statusbar_pop_all(); + + if (ok != IMAP_SUCCESS) { + g_warning(_("can't fetch message %d\n"), num); + g_free(filename); + return NULL; + } + + return filename; +} + +gint imap_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) +{ + gchar *destdir; + IMAPSession *session; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msginfo != NULL, -1); + + session = imap_session_connect_if_not(folder); + if (!session) return -1; + + if (msginfo->folder == dest) { + g_warning(_("the src folder is identical to the dest.\n")); + return -1; + } + + Xstrdup_a(destdir, dest->path, return -1); + /* imap_path_subst_slash_to_dot(destdir); */ + + imap_copy_message(SESSION(session)->sock, msginfo->msgnum, destdir); + imap_set_article_flags(session, msginfo->msgnum, msginfo->msgnum, + IMAP_FLAG_DELETED, TRUE); + debug_print(_("Moving message %s%c%d to %s ...\n"), + msginfo->folder->path, G_DIR_SEPARATOR, + msginfo->msgnum, dest->path); + + imap_expunge(session); + + return IMAP_SUCCESS; +} + +gint imap_move_msgs_with_dest(Folder *folder, FolderItem *dest, + GSList *msglist) +{ + gchar *destdir; + GSList *cur; + MsgInfo *msginfo; + IMAPSession *session; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msglist != NULL, -1); + + session = imap_session_connect_if_not(folder); + if (!session) return -1; + + Xstrdup_a(destdir, dest->path, return -1); + /* imap_path_subst_slash_to_dot(destdir); */ + + for (cur = msglist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + + if (msginfo->folder == dest) { + g_warning(_("the src folder is identical to the dest.\n")); + continue; + } + imap_copy_message(SESSION(session)->sock, + msginfo->msgnum, destdir); + imap_set_article_flags + (session, msginfo->msgnum, msginfo->msgnum, + IMAP_FLAG_DELETED, TRUE); + + debug_print(_("Moving message %s%c%d to %s ...\n"), + msginfo->folder->path, G_DIR_SEPARATOR, + msginfo->msgnum, dest->path); + + } + + imap_expunge(session); + + return IMAP_SUCCESS; + +} + +gint imap_remove_msg(Folder *folder, FolderItem *item, gint num) +{ + gint exists, recent, unseen; + gulong uid; + gint ok; + IMAPSession *session; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(item != NULL, -1); + g_return_val_if_fail(num > 0 && num <= item->last_num, -1); + + session = imap_session_connect_if_not(folder); + if (!session) return -1; + + ok = imap_select(SESSION(session)->sock, item->path, + &exists, &recent, &unseen, &uid); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't select folder: %s\n"), item->path); + return ok; + } + + ok = imap_set_article_flags(IMAP_SESSION(REMOTE_FOLDER(folder)->session), + num, num, IMAP_FLAG_DELETED, TRUE); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't set deleted flags: %d\n"), num); + return ok; + } + + ok = imap_expunge(session); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't expunge\n")); + return ok; + } + + return IMAP_SUCCESS; +} + +gint imap_remove_all_msg(Folder *folder, FolderItem *item) +{ + gint exists, recent, unseen; + gulong uid; + gint ok; + IMAPSession *session; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(item != NULL, -1); + + session = imap_session_connect_if_not(folder); + if (!session) return -1; + + ok = imap_select(SESSION(session)->sock, item->path, + &exists, &recent, &unseen, &uid); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't select folder: %s\n"), item->path); + return ok; + } + + ok = imap_set_article_flags(session, 1, exists, + IMAP_FLAG_DELETED, TRUE); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't set deleted flags: 1:%d\n"), exists); + return ok; + } + + ok = imap_expunge(session); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't expunge\n")); + return ok; + } + + return IMAP_SUCCESS; +} + +void imap_scan_folder(Folder *folder, FolderItem *item) +{ +} + +FolderItem *imap_create_folder(Folder *folder, FolderItem *parent, + const gchar *name) +{ + gchar *path; + FolderItem *new_item; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(parent != NULL, NULL); + g_return_val_if_fail(name != NULL, NULL); + + imap_session_connect_if_not(folder); + + if (parent->path) + path = g_strconcat(parent->path, G_DIR_SEPARATOR_S, name, + NULL); + else + path = g_strdup(name); + + new_item = folder_item_new(name, path); + folder_item_append(parent, new_item); + g_free(path); + + return new_item; +} + +static GSList *imap_get_uncached_messages(IMAPSession *session, + FolderItem *item, + gint first, gint last) +{ + gchar buf[IMAPBUFSIZE]; + GSList *newlist = NULL; + GSList *llast = NULL; + MsgInfo *msginfo; + + g_return_val_if_fail(session != NULL, NULL); + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(item->folder != NULL, NULL); + g_return_val_if_fail(item->folder->type == F_IMAP, NULL); + g_return_val_if_fail(first <= last, NULL); + + if (imap_get_envelope(SESSION(session)->sock, first, last) + != IMAP_SUCCESS) { + log_warning(_("can't get envelope\n")); + return NULL; + } + + for (;;) { + if (sock_read(SESSION(session)->sock, buf, sizeof(buf)) < 0) { + log_warning(_("error occurred while getting envelope.\n")); + return newlist; + } + strretchomp(buf); + if (buf[0] != '*' || buf[1] != ' ') break; + + msginfo = imap_parse_envelope(SESSION(session)->sock, buf); + if (!msginfo) { + log_warning(_("can't parse envelope: %s\n"), buf); + continue; + } + + msginfo->folder = item; + + if (!newlist) + llast = newlist = g_slist_append(newlist, msginfo); + else { + llast = g_slist_append(llast, msginfo); + llast = llast->next; + } + } + + return newlist; +} + +static GSList *imap_delete_messages(GSList *mlist, gint first, gint last) +{ + GSList *cur, *next; + MsgInfo *msginfo; + gchar *cache_file; + + for (cur = mlist; cur != NULL; ) { + next = cur->next; + + msginfo = (MsgInfo *)cur->data; + if ((msginfo) && + (first <= msginfo->msgnum ) && + (msginfo->msgnum <= last)) { + debug_print(_("deleting message %d...\n"), + msginfo->msgnum); + + cache_file = procmsg_get_message_file_path(msginfo); + if (is_file_exist(cache_file)) unlink(cache_file); + g_free(cache_file); + + procmsg_msginfo_free(msginfo); + mlist = g_slist_remove(mlist, msginfo); + } + + cur = next; + } + + return mlist; +} + +static void imap_delete_all_messages(FolderItem *item) +{ + DIR *dp; + struct dirent *d; + gchar *dir; + gchar *file; + + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + g_return_if_fail(item->folder->type == F_IMAP); + + dir = folder_item_get_path(item); + if ((dp = opendir(dir)) == NULL) { + FILE_OP_ERROR(dir, "opendir"); + g_free(dir); + return; + } + + debug_print(_("\tDeleting all cached messages... ")); + + while ((d = readdir(dp)) != NULL) { + if (to_number(d->d_name) < 0) continue; + + file = g_strconcat(dir, G_DIR_SEPARATOR_S, d->d_name, NULL); + + if (is_file_exist(file)) { + if (unlink(file) < 0) + FILE_OP_ERROR(file, "unlink"); + } + + g_free(file); + } + + closedir(dp); + g_free(dir); + + debug_print(_("done.\n")); +} + + +static gint imap_open(const gchar *server, gushort port, gchar *buf) +{ + SockInfo *sockinfo; + gint sock; + + if ((sockinfo = sock_connect(server, port)) == NULL) { + log_warning(_("Can't connect to IMAP4 server: %s:%d\n"), + server, port); + return -1; + } + sock = sockinfo->sock; + sock_sockinfo_free(sockinfo); + + imap_cmd_count = 0; + + if (imap_noop(sock) != IMAP_SUCCESS) { + sock_close(sock); + return -1; + } + + return sock; +} + +static gint imap_auth(gint sock, const gchar *user, const gchar *pass) +{ + gint ok; + GPtrArray *argbuf; + + imap_gen_send(sock, "LOGIN \"%s\" %s", user, pass); + argbuf = g_ptr_array_new(); + ok = imap_ok(sock, argbuf); + if (ok != IMAP_SUCCESS) log_warning(_("IMAP4 login failed.\n")); + ptr_array_free_strings(argbuf); + g_ptr_array_free(argbuf, TRUE); + + return ok; +} + +static gint imap_logout(gint sock) +{ + imap_gen_send(sock, "LOGOUT"); + return imap_ok(sock, NULL); +} + +static gint imap_noop(gint sock) +{ + imap_gen_send(sock, "NOOP"); + return imap_ok(sock, NULL); +} + +static gint imap_select(gint sock, const gchar *folder, + gint *exists, gint *recent, gint *unseen, gulong *uid) +{ + gint ok; + gchar *resp_str; + GPtrArray *argbuf; + gchar *imappath; + + *exists = *recent = *unseen = *uid = 0; + argbuf = g_ptr_array_new(); + + Xstrdup_a(imappath, folder, return -1); + /* imap_path_subst_slash_to_dot(imappath); */ + + imap_gen_send(sock, "SELECT \"%s\"", imappath); + if ((ok = imap_ok(sock, argbuf)) != IMAP_SUCCESS) + goto bail; + + resp_str = search_array_contain_str(argbuf, "EXISTS"); + if (resp_str) { + if (sscanf(resp_str,"%d EXISTS", exists) != 1) { + g_warning("imap_select(): invalid EXISTS line.\n"); + goto bail; + } + } + + resp_str = search_array_contain_str(argbuf, "RECENT"); + if (resp_str) { + if (sscanf(resp_str, "%d RECENT", recent) != 1) { + g_warning("imap_select(): invalid RECENT line.\n"); + goto bail; + } + } + + resp_str = search_array_contain_str(argbuf, "UIDVALIDITY"); + if (resp_str) { + if (sscanf(resp_str, "OK [UIDVALIDITY %lu] ", uid) != 1) { + g_warning("imap_select(): invalid UIDVALIDITY line.\n"); + goto bail; + } + } + + resp_str = search_array_contain_str(argbuf, "UNSEEN"); + if (resp_str) { + if (sscanf(resp_str, "OK [UNSEEN %d] ", unseen) != 1) { + g_warning("imap_select(): invalid UNSEEN line.\n"); + goto bail; + } + } + +bail: + ptr_array_free_strings(argbuf); + g_ptr_array_free(argbuf, TRUE); + + return ok; +} + +static gchar *strchr_cpy(const gchar *src, gchar ch, gchar *dest, gint len) +{ + gchar *tmp; + + dest[0] = '\0'; + tmp = strchr(src, ch); + if (!tmp || tmp == src) + return NULL; + + memcpy(dest, src, MIN(tmp - src, len - 1)); + dest[MIN(tmp - src, len - 1)] = '\0'; + + return tmp + 1; +} + +static gint imap_get_message(gint sock, gint num, const gchar *filename) +{ + gint ok; + gchar buf[IMAPBUFSIZE]; + gchar *cur_pos; + gchar size_str[32]; + glong size_num; + + g_return_val_if_fail(filename != NULL, IMAP_ERROR); + + imap_gen_send(sock, "FETCH %d BODY[]", num); + + if (sock_read(sock, buf, sizeof(buf)) < 0) + return IMAP_ERROR; + strretchomp(buf); + if (buf[0] != '*' || buf[1] != ' ') + return IMAP_ERROR; + log_print("IMAP4< %s\n", buf); + + cur_pos = strchr(buf, '{'); + g_return_val_if_fail(cur_pos != NULL, IMAP_ERROR); + cur_pos = strchr_cpy(cur_pos + 1, '}', size_str, sizeof(size_str)); + g_return_val_if_fail(cur_pos != NULL, IMAP_ERROR); + size_num = atol(size_str); + + if (*cur_pos != '\0') return IMAP_ERROR; + + if (recv_bytes_write_to_file(sock, size_num, filename) != 0) + return IMAP_ERROR; + + if (imap_gen_recv(sock, buf, sizeof(buf)) != IMAP_SUCCESS) + return IMAP_ERROR; + + if (buf[0] != ')') + return IMAP_ERROR; + + ok = imap_ok(sock, NULL); + + return ok; +} + +static gint imap_copy_message(gint sock, gint num, const gchar *destfolder) +{ + gint ok; + + g_return_val_if_fail(destfolder != NULL, IMAP_ERROR); + + imap_gen_send(sock, "COPY %d %s", num, destfolder); + ok = imap_ok(sock, NULL); + if (ok != IMAP_SUCCESS) { + log_warning(_("can't copy %d to %s\n"), num, destfolder); + return -1; + } + + return ok; +} + +static gchar *imap_parse_atom(gint sock, gchar *src, gchar *dest, + gchar *orig_buf) +{ + gchar *cur_pos = src; + + while (*cur_pos == ' ') cur_pos++; + + if (!strncmp(cur_pos, "NIL", 3)) { + *dest = '\0'; + cur_pos += 3; + } else if (*cur_pos == '\"') { + gchar *p; + + p = strchr_cpy(cur_pos + 1, '\"', dest, IMAPBUFSIZE); + cur_pos = p ? p : cur_pos + 2; + } else if (*cur_pos == '{') { + gchar buf[32]; + gint len; + + cur_pos = strchr_cpy(cur_pos + 1, '}', buf, sizeof(buf)); + len = atoi(buf); + + g_return_val_if_fail(orig_buf != NULL, cur_pos); + + if (sock_read(sock, orig_buf, IMAPBUFSIZE) < 0) + return cur_pos; + strretchomp(orig_buf); + log_print("IMAP4< %s\n", orig_buf); + memcpy(dest, orig_buf, len); + dest[len] = '\0'; + cur_pos = orig_buf + len; + } + + return cur_pos; +} + +static gchar *imap_parse_one_address(gint sock, gchar *start, + gchar *out_from_str, + gchar *out_fromname_str, + gchar *orig_buf) +{ + gchar buf[IMAPBUFSIZE]; + gchar *cur_pos = start; + + cur_pos = imap_parse_atom(sock, cur_pos, buf, orig_buf); + conv_unmime_header(out_fromname_str, 256, buf, NULL); + + if (out_fromname_str[0] != '\0') { + strcat(out_from_str, "\""); + strcat(out_from_str, out_fromname_str); + strcat(out_from_str, "\""); + } + + cur_pos = imap_parse_atom(sock, cur_pos, buf, orig_buf); + + strcat(out_from_str, " <"); + + cur_pos = imap_parse_atom(sock, cur_pos, buf, orig_buf); + strcat(out_from_str, buf); + + cur_pos = imap_parse_atom(sock, cur_pos, buf, orig_buf); + strcat(out_from_str, "@"); + strcat(out_from_str, buf); + strcat(out_from_str, ">"); + + while (*cur_pos == ' ') cur_pos++; + + g_return_val_if_fail(*cur_pos == ')', cur_pos + 1); + + return cur_pos + 1; +} + +static gchar *imap_parse_address(gint sock, gchar *start, + gchar **out_from_str, + gchar **out_fromname_str, + gchar *orig_buf) +{ + gchar buf[IMAPBUFSIZE]; + gchar name_buf[IMAPBUFSIZE]; + gchar *cur_pos = start; + gboolean first = TRUE; + + if (out_from_str) *out_from_str = NULL; + if (out_fromname_str) *out_fromname_str = NULL; + buf[0] = name_buf[0] = '\0'; + + if (!strncmp(cur_pos, "NIL", 3)) { + if (out_from_str) *out_from_str = g_strdup(""); + if (out_fromname_str) *out_fromname_str = g_strdup(""); + return cur_pos + 3; + } + + g_return_val_if_fail(*cur_pos == '(', NULL); + cur_pos++; + + for (;;) { + gchar ch = *cur_pos++; + if (ch == ')') break; + if (ch == '(') { + if (!first) strcat(buf, ", "); + first = FALSE; + cur_pos = imap_parse_one_address + (sock, cur_pos, buf, name_buf, orig_buf); + if (!cur_pos) return NULL; + } + } + + if (out_from_str) *out_from_str = g_strdup(buf); + if (out_fromname_str) *out_fromname_str = g_strdup(name_buf); + + return cur_pos; +} + +static MsgFlags imap_parse_flags(const gchar *flag_str) +{ + gchar buf[32]; + const gchar *cur_pos = flag_str; + const gchar *last_pos; + MsgFlags flags; + + flags = 0; + MSG_SET_FLAGS(flags, MSG_UNREAD|MSG_IMAP); + + while (cur_pos != NULL) { + cur_pos = strchr(cur_pos, '\\'); + if (cur_pos == NULL) break; + + last_pos = cur_pos + 1; + cur_pos = strchr_cpy(last_pos, ' ', buf, sizeof(buf)); + if (cur_pos == NULL) + strncpy2(buf, last_pos, sizeof(buf)); + + if (g_strcasecmp(buf, "Recent") == 0) { + MSG_SET_FLAGS(flags, MSG_NEW|MSG_UNREAD); + } else if (g_strcasecmp(buf, "Seen") == 0) { + MSG_UNSET_FLAGS(flags, MSG_NEW|MSG_UNREAD); + } else if (g_strcasecmp(buf, "Deleted") == 0) { + MSG_SET_FLAGS(flags, MSG_DELETED); + } else if (g_strcasecmp(buf, "Flagged") == 0) { + MSG_SET_FLAGS(flags, MSG_MARKED); + } + } + + return flags; +} + +static MsgInfo *imap_parse_envelope(gint sock, gchar *line_str) +{ + MsgInfo *msginfo; + gchar buf[IMAPBUFSIZE]; + gchar tmp[IMAPBUFSIZE]; + gchar *cur_pos; + gint msgnum; + size_t size; + gchar *date = NULL; + time_t date_t; + gchar *subject = NULL; + gchar *tmp_from; + gchar *tmp_fromname; + gchar *from = NULL; + gchar *fromname = NULL; + gchar *tmp_to; + gchar *to = NULL; + gchar *inreplyto = NULL; + gchar *msgid = NULL; + MsgFlags flags; + + log_print("IMAP4< %s\n", line_str); + + g_return_val_if_fail(line_str != NULL, NULL); + g_return_val_if_fail(line_str[0] == '*' && line_str[1] == ' ', NULL); + + cur_pos = line_str + 2; + +#define PARSE_ONE_ELEMENT(ch) \ +{ \ + cur_pos = strchr_cpy(cur_pos, ch, buf, sizeof(buf)); \ + g_return_val_if_fail(cur_pos != NULL, NULL); \ +} + + PARSE_ONE_ELEMENT(' '); + msgnum = atoi(buf); + + PARSE_ONE_ELEMENT(' '); + g_return_val_if_fail(!strcmp(buf, "FETCH"), NULL); + + PARSE_ONE_ELEMENT(' '); + g_return_val_if_fail(!strcmp(buf, "(FLAGS"), NULL); + + PARSE_ONE_ELEMENT(')'); + g_return_val_if_fail(*buf == '(', NULL); + flags = imap_parse_flags(buf + 1); + + g_return_val_if_fail(*cur_pos == ' ', NULL); + g_return_val_if_fail + ((cur_pos = strchr_cpy(cur_pos + 1, ' ', buf, sizeof(buf))), + NULL); + g_return_val_if_fail(!strcmp(buf, "RFC822.SIZE"), NULL); + + PARSE_ONE_ELEMENT(' '); + size = atoi(buf); + + PARSE_ONE_ELEMENT(' '); + g_return_val_if_fail(!strcmp(buf, "ENVELOPE"), NULL); + + g_return_val_if_fail(*cur_pos == '(', NULL); + cur_pos = imap_parse_atom(sock, cur_pos + 1, buf, line_str); + Xstrdup_a(date, buf, return NULL); + date_t = procheader_date_parse(NULL, date, 0); + + cur_pos = imap_parse_atom(sock, cur_pos, buf, line_str); + if (buf[0] != '\0') { + conv_unmime_header(tmp, sizeof(tmp), buf, NULL); + Xstrdup_a(subject, tmp, return NULL); + } + + g_return_val_if_fail(*cur_pos == ' ', NULL); + cur_pos = imap_parse_address(sock, cur_pos + 1, + &tmp_from, &tmp_fromname, line_str); + Xstrdup_a(from, tmp_from, + {g_free(tmp_from); g_free(tmp_fromname); return NULL;}); + Xstrdup_a(fromname, tmp_fromname, + {g_free(tmp_from); g_free(tmp_fromname); return NULL;}); + g_free(tmp_from); + g_free(tmp_fromname); + +#define SKIP_ONE_ELEMENT() \ +{ \ + g_return_val_if_fail(*cur_pos == ' ', NULL); \ + cur_pos = imap_parse_address(sock, cur_pos + 1, \ + NULL, NULL, line_str); \ +} + + /* skip sender and reply-to */ + SKIP_ONE_ELEMENT(); + SKIP_ONE_ELEMENT(); + + g_return_val_if_fail(*cur_pos == ' ', NULL); + cur_pos = imap_parse_address(sock, cur_pos + 1, &tmp_to, NULL, line_str); + Xstrdup_a(to, tmp_to, {g_free(tmp_to); return NULL;}); + g_free(tmp_to); + + /* skip Cc and Bcc */ + SKIP_ONE_ELEMENT(); + SKIP_ONE_ELEMENT(); + +#undef SKIP_ONE_ELEMENT + + g_return_val_if_fail(*cur_pos == ' ', NULL); + cur_pos = imap_parse_atom(sock, cur_pos, buf, line_str); + if (buf[0] != '\0') { + eliminate_parenthesis(buf, '(', ')'); + extract_parenthesis(buf, '<', '>'); + remove_space(buf); + Xstrdup_a(inreplyto, buf, return NULL); + } + + g_return_val_if_fail(*cur_pos == ' ', NULL); + cur_pos = imap_parse_atom(sock, cur_pos, buf, line_str); + if (buf[0] != '\0') { + extract_parenthesis(buf, '<', '>'); + remove_space(buf); + Xstrdup_a(msgid, buf, return NULL); + } + + msginfo = g_new0(MsgInfo, 1); + msginfo->msgnum = msgnum; + msginfo->size = size; + msginfo->date = g_strdup(date); + msginfo->date_t = date_t; + msginfo->subject = g_strdup(subject); + msginfo->from = g_strdup(from); + msginfo->fromname = g_strdup(fromname); + msginfo->to = g_strdup(to); + msginfo->inreplyto = g_strdup(inreplyto); + msginfo->msgid = g_strdup(msgid); + msginfo->flags = flags; + + return msginfo; +} + +gint imap_get_envelope(gint sock, gint first, gint last) +{ + imap_gen_send(sock, "FETCH %d:%d (FLAGS RFC822.SIZE ENVELOPE)", + first, last); + + return IMAP_SUCCESS; +} + +static gint imap_store(gint sock, gint first, gint last, gchar *sub_cmd) +{ + gint ok; + GPtrArray *argbuf; + + argbuf = g_ptr_array_new(); + + imap_gen_send(sock, "STORE %d:%d %s", first, last, sub_cmd); + + if ((ok = imap_ok(sock, argbuf)) != IMAP_SUCCESS) { + g_ptr_array_free(argbuf, TRUE); + log_warning(_("error while imap command: STORE %d:%d %s\n"), + first, last, sub_cmd); + return ok; + } + + g_ptr_array_free(argbuf, TRUE); + + return IMAP_SUCCESS; +} + +static gint imap_set_article_flags(IMAPSession *session, + gint first, + gint last, + IMAPFlags flags, + gboolean is_set) +{ + GString *buf; + gint ok; + + buf = g_string_new(is_set ? "+FLAGS (" : "-FLAGS ("); + + if (IMAP_IS_SEEN(flags)) g_string_append(buf, "\\Seen "); + if (IMAP_IS_ANSWERED(flags)) g_string_append(buf, "\\Answered "); + if (IMAP_IS_FLAGGED(flags)) g_string_append(buf, "\\Flagged "); + if (IMAP_IS_DELETED(flags)) g_string_append(buf, "\\Deleted "); + if (IMAP_IS_DRAFT(flags)) g_string_append(buf, "\\Draft"); + + if (buf->str[buf->len - 1] == ' ') + g_string_truncate(buf, buf->len - 1); + + g_string_append_c(buf, ')'); + + ok = imap_store(SESSION(session)->sock, first, last, buf->str); + g_string_free(buf, TRUE); + + return ok; +} + +static gint imap_expunge(IMAPSession *session) +{ + gint ok; + GPtrArray *argbuf; + + argbuf = g_ptr_array_new(); + + imap_gen_send(SESSION(session)->sock, "EXPUNGE"); + + if ((ok = imap_ok(SESSION(session)->sock, argbuf)) != IMAP_SUCCESS) { + log_warning(_("error while imap command: EXPUNGE\n")); + g_ptr_array_free(argbuf, TRUE); + return ok; + } + + g_ptr_array_free(argbuf, TRUE); + + return IMAP_SUCCESS; +} + +static gint imap_ok(gint sock, GPtrArray *argbuf) +{ + gint ok; + gchar buf[IMAPBUFSIZE]; + gint cmd_num; + gchar cmd_status[IMAPBUFSIZE]; + + while ((ok = imap_gen_recv(sock, buf, sizeof(buf))) == IMAP_SUCCESS) { + if (buf[0] == '*' && buf[1] == ' ') { + if (argbuf) + g_ptr_array_add(argbuf, g_strdup(&buf[2])); + } else { + if (sscanf(buf, "%d %s", &cmd_num, cmd_status) < 2) + return IMAP_ERROR; + else if (cmd_num == imap_cmd_count && + !strcmp(cmd_status, "OK")) { + if (argbuf) + g_ptr_array_add(argbuf, g_strdup(buf)); + return IMAP_SUCCESS; + } else + return IMAP_ERROR; + } + } + + return ok; +} + +static gchar *search_array_contain_str(GPtrArray *array, gchar *str) +{ + gint i; + + for (i = 0; i < array->len; i++) { + gchar *tmp; + + tmp = g_ptr_array_index(array, i); + if (strstr(tmp, str) != NULL) + return tmp; + } + + return NULL; +} + +static void imap_gen_send(gint sock, const gchar *format, ...) +{ + gchar buf[IMAPBUFSIZE]; + gchar tmp[IMAPBUFSIZE]; + gchar *p; + va_list args; + + va_start(args, format); + g_vsnprintf(tmp, sizeof(tmp), format, args); + va_end(args); + + imap_cmd_count++; + + g_snprintf(buf, sizeof(buf), "%d %s\r\n", imap_cmd_count, tmp); + if (!strncasecmp(tmp, "LOGIN ", 6) && (p = strchr(tmp + 6, ' '))) { + *(p + 1) = '\0'; + log_print("IMAP4> %d %s ********\n", imap_cmd_count, tmp); + } else + log_print("IMAP4> %d %s\n", imap_cmd_count, tmp); + + sock_write(sock, buf, strlen(buf)); +} + +static gint imap_gen_recv(gint sock, gchar *buf, gint size) +{ + if (sock_read(sock, buf, size) == -1) + return IMAP_SOCKET; + + strretchomp(buf); + + log_print("IMAP4< %s\n", buf); + + return IMAP_SUCCESS; +} + +static void imap_path_subst_slash_to_dot(gchar *str) +{ + subst_char(str, '/', '.'); +} diff --git a/src/imap.h b/src/imap.h new file mode 100644 index 000000000..8bc238970 --- /dev/null +++ b/src/imap.h @@ -0,0 +1,100 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __IMAP_H__ +#define __IMAP_H__ + +#include <glib.h> + +#include "folder.h" +#include "session.h" + +typedef struct _IMAPSession IMAPSession; + +#include "prefs_account.h" + +#define IMAP_SESSION(obj) ((IMAPSession *)obj) + +struct _IMAPSession +{ + Session session; + + gchar *mbox; +}; + +#define IMAP_SUCCESS 0 +#define IMAP_SOCKET 2 +#define IMAP_AUTHFAIL 3 +#define IMAP_PROTOCOL 4 +#define IMAP_SYNTAX 5 +#define IMAP_IOERR 6 +#define IMAP_ERROR 7 + +#define IMAPBUFSIZE 8192 + +typedef enum +{ + IMAP_FLAG_SEEN = 1 << 0, + IMAP_FLAG_ANSWERED = 1 << 1, + IMAP_FLAG_FLAGGED = 1 << 2, + IMAP_FLAG_DELETED = 1 << 3, + IMAP_FLAG_DRAFT = 1 << 4 +} IMAPFlags; + +#define IMAP_IS_SEEN(flags) ((flags & IMAP_FLAG_SEEN) != 0) +#define IMAP_IS_ANSWERED(flags) ((flags & IMAP_FLAG_ANSWERED) != 0) +#define IMAP_IS_FLAGGED(flags) ((flags & IMAP_FLAG_FLAGGED) != 0) +#define IMAP_IS_DELETED(flags) ((flags & IMAP_FLAG_DELETED) != 0) +#define IMAP_IS_DRAFT(flags) ((flags & IMAP_FLAG_DRAFT) != 0) + +Session *imap_session_new (const gchar *server, + gushort port, + const gchar *user, + const gchar *pass); +void imap_session_destroy (IMAPSession *session); +void imap_session_destroy_all (void); + +GSList *imap_get_msg_list (Folder *folder, + FolderItem *item, + gboolean use_cache); +gchar *imap_fetch_msg (Folder *folder, + FolderItem *item, + gint num); + +gint imap_move_msg (Folder *folder, + FolderItem *dest, + MsgInfo *msginfo); + +gint imap_move_msgs_with_dest (Folder *folder, + FolderItem *dest, + GSList *msglist); +gint imap_remove_msg (Folder *folder, + FolderItem *item, + gint num); +gint imap_remove_all_msg (Folder *folder, + FolderItem *item); + +void imap_scan_folder (Folder *folder, + FolderItem *item); + +FolderItem *imap_create_folder (Folder *folder, + FolderItem *parent, + const gchar *name); + +#endif /* __IMAP_H__ */ diff --git a/src/import.c b/src/import.c new file mode 100644 index 000000000..aee97880d --- /dev/null +++ b/src/import.c @@ -0,0 +1,219 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtktable.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkfilesel.h> +#include <gtk/gtksignal.h> + +#include "intl.h" +#include "main.h" +#include "inc.h" +#include "mbox.h" +#include "folderview.h" +#include "filesel.h" +#include "foldersel.h" +#include "gtkutils.h" +#include "manage_window.h" +#include "folder.h" + +static GtkWidget *window; +static GtkWidget *file_entry; +static GtkWidget *dest_entry; +static GtkWidget *file_button; +static GtkWidget *dest_button; +static GtkWidget *ok_button; +static GtkWidget *cancel_button; +static gboolean import_ack; + +static void import_create(void); +static void import_ok_cb(GtkWidget *widget, gpointer data); +static void import_cancel_cb(GtkWidget *widget, gpointer data); +static void import_filesel_cb(GtkWidget *widget, gpointer data); +static void import_destsel_cb(GtkWidget *widget, gpointer data); +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); + +gint import_mbox(void) +{ + gint ok = 0; + + if (!window) + import_create(); + else + gtk_widget_show(window); + + manage_window_set_transient(GTK_WINDOW(window)); + + gtk_main(); + + if (import_ack) { + gchar *filename, *destdir; + FolderItem *dest; + + filename = gtk_entry_get_text(GTK_ENTRY(file_entry)); + destdir = gtk_entry_get_text(GTK_ENTRY(dest_entry)); + if (filename && *filename) { + if (!destdir || !*destdir) { + dest = folder_find_item_from_path(INBOX_DIR); + } else + dest = folder_find_item_from_path(destdir); + + if (!dest) { + g_warning("Can't find the folder.\n"); + } else { + ok = proc_mbox(dest, filename, NULL); + folder_item_scan(dest); + folderview_update_item(dest, TRUE); + } + } + } + + gtk_widget_hide(window); + + return ok; +} + +static void import_create(void) +{ + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *file_label; + GtkWidget *dest_label; + GtkWidget *confirm_area; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_window_set_title(GTK_WINDOW(window), _("Import")); + gtk_widget_set_usize(window, 450, -1); + gtk_container_set_border_width(GTK_CONTAINER(window), 4); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(import_cancel_cb), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(window), vbox); + + table = gtk_table_new(2, 3, FALSE); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(table), 8); + gtk_table_set_row_spacings(GTK_TABLE(table), 12); + gtk_table_set_col_spacings(GTK_TABLE(table), 8); + + file_label = gtk_label_new(_("Importing file:")); + gtk_table_attach(GTK_TABLE(table), file_label, 0, 1, 0, 1, + GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0); + gtk_misc_set_alignment(GTK_MISC(file_label), 1, 0.5); + + dest_label = gtk_label_new(_("Destination dir:")); + gtk_table_attach(GTK_TABLE(table), dest_label, 0, 1, 1, 2, + GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0); + gtk_misc_set_alignment(GTK_MISC(dest_label), 1, 0.5); + + file_entry = gtk_entry_new(); + gtk_table_attach(GTK_TABLE(table), file_entry, 1, 2, 0, 1, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + + dest_entry = gtk_entry_new(); + gtk_table_attach(GTK_TABLE(table), dest_entry, 1, 2, 1, 2, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + + file_button = gtk_button_new_with_label(_(" Select... ")); + gtk_table_attach(GTK_TABLE(table), file_button, 2, 3, 0, 1, + 0, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT(file_button), "clicked", + GTK_SIGNAL_FUNC(import_filesel_cb), NULL); + + dest_button = gtk_button_new_with_label(_(" Select... ")); + gtk_table_attach(GTK_TABLE(table), dest_button, 2, 3, 1, 2, + 0, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT(dest_button), "clicked", + GTK_SIGNAL_FUNC(import_destsel_cb), NULL); + + gtkut_button_set_create(&confirm_area, + &ok_button, _("OK"), + &cancel_button, _("Cancel"), + NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_button); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(import_ok_cb), NULL); + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(import_cancel_cb), NULL); + + gtk_widget_show_all(window); +} + +static void import_ok_cb(GtkWidget *widget, gpointer data) +{ + import_ack = TRUE; + gtk_main_quit(); +} + +static void import_cancel_cb(GtkWidget *widget, gpointer data) +{ + import_ack = FALSE; + gtk_main_quit(); +} + +static void import_filesel_cb(GtkWidget *widget, gpointer data) +{ + gchar *filename; + + filename = filesel_select_file(_("Select importing file"), NULL); + if (filename) + gtk_entry_set_text(GTK_ENTRY(file_entry), filename); +} + +static void import_destsel_cb(GtkWidget *widget, gpointer data) +{ + FolderItem *dest; + + dest = foldersel_folder_sel(NULL); + if (dest && dest->path) + gtk_entry_set_text(GTK_ENTRY(dest_entry), dest->path); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) + import_cancel_cb(NULL, NULL); +} diff --git a/src/import.h b/src/import.h new file mode 100644 index 000000000..20dfe47c1 --- /dev/null +++ b/src/import.h @@ -0,0 +1,27 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __IMPORT_H__ +#define __IMPORT_H__ + +#include <glib.h> + +gint import_mbox(void); + +#endif /* __IMPORT_H__ */ diff --git a/src/inc.c b/src/inc.c new file mode 100644 index 000000000..e1ca14362 --- /dev/null +++ b/src/inc.c @@ -0,0 +1,789 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <sys/wait.h> +#include <signal.h> +#include <errno.h> + +#include "intl.h" +#include "main.h" +#include "inc.h" +#include "mainwindow.h" +#include "folderview.h" +#include "summaryview.h" +#include "prefs_common.h" +#include "prefs_account.h" +#include "account.h" +#include "procmsg.h" +#include "socket.h" +#include "pop.h" +#include "recv.h" +#include "mbox.h" +#include "utils.h" +#include "gtkutils.h" +#include "statusbar.h" +#include "manage_window.h" +#include "progressdialog.h" +#include "inputdialog.h" +#include "alertpanel.h" +#include "filter.h" +#include "automaton.h" +#include "folder.h" + +#define MSGBUFSIZE 8192 + +static void inc_finished (MainWindow *mainwin); +static void inc_account_mail (PrefsAccount *account, + MainWindow *mainwin); + +static IncProgressDialog *inc_progress_dialog_create (void); +static void inc_progress_dialog_destroy (IncProgressDialog *inc_dialog); + +static IncSession *inc_session_new (PrefsAccount *account); +static void inc_session_destroy (IncSession *session); +static Pop3State *inc_pop3_state_new (PrefsAccount *account); +static void inc_pop3_state_destroy (Pop3State *state); +static void inc_start (IncProgressDialog *inc_dialog); +static IncState inc_pop3_session_do (IncSession *session); +static gint pop3_automaton_terminate (gint source, + Automaton *atm); + +static GHashTable *inc_get_uidl_table (PrefsAccount *ac_prefs); +static void inc_write_uidl_list (Pop3State *state); + +#if USE_THREADS +static gint connection_check_cb (Automaton *atm); +#endif + +static void inc_put_error (IncState istate); + +static void inc_cancel (GtkWidget *widget, + gpointer data); + +static gint inc_spool (void); +static gint get_spool (FolderItem *dest, + const gchar *mbox); + +static void inc_finished(MainWindow *mainwin) +{ + FolderItem *item; + + if (prefs_common.open_inbox_on_inc) { + item = cur_account && cur_account->inbox + ? folder_find_item_from_path(cur_account->inbox) + : folder_get_default_inbox(); + folderview_unselect(mainwin->folderview); + folderview_select(mainwin->folderview, item); + } else { + item = mainwin->summaryview->folder_item; + folderview_unselect(mainwin->folderview); + folderview_select(mainwin->folderview, item); + } +} + +void inc_mail(MainWindow *mainwin) +{ + summary_write_cache(mainwin->summaryview); + + if (prefs_common.use_extinc && prefs_common.extinc_path) { + gint pid; + + /* external incorporating program */ + if ((pid = fork()) < 0) { + perror("fork"); + return; + } + + if (pid == 0) { + execlp(prefs_common.extinc_path, + g_basename(prefs_common.extinc_path), + NULL); + + /* this will be called when failed */ + perror("exec"); + _exit(1); + } + + /* wait until child process is terminated */ + waitpid(pid, NULL, 0); + + if (prefs_common.inc_local) inc_spool(); + } else { + if (prefs_common.inc_local) inc_spool(); + + inc_account_mail(cur_account, mainwin); + } + + inc_finished(mainwin); +} + +static void inc_account_mail(PrefsAccount *account, MainWindow *mainwin) +{ + IncProgressDialog *inc_dialog; + IncSession *session; + + session = inc_session_new(account); + if (!session) return; + + inc_dialog = inc_progress_dialog_create(); + inc_dialog->queue_list = g_list_append(inc_dialog->queue_list, session); + inc_dialog->mainwin = mainwin; + session->data = inc_dialog; + + inc_start(inc_dialog); +} + +void inc_all_account_mail(MainWindow *mainwin) +{ + GList *list, *queue_list = NULL; + IncProgressDialog *inc_dialog; + + summary_write_cache(mainwin->summaryview); + + if (prefs_common.inc_local) inc_spool(); + + list = account_get_list(); + if (!list) return; + + for (; list != NULL; list = list->next) { + IncSession *session; + PrefsAccount *account = list->data; + + if (account->recv_at_getall) { + session = inc_session_new(account); + if (session) + queue_list = g_list_append(queue_list, session); + } + } + + if (!queue_list) return; + + inc_dialog = inc_progress_dialog_create(); + inc_dialog->queue_list = queue_list; + inc_dialog->mainwin = mainwin; + for (list = queue_list; list != NULL; list = list->next) { + IncSession *session = list->data; + session->data = inc_dialog; + } + + inc_start(inc_dialog); + + inc_finished(mainwin); +} + +static IncProgressDialog *inc_progress_dialog_create(void) +{ + IncProgressDialog *dialog; + ProgressDialog *progress; + + dialog = g_new0(IncProgressDialog, 1); + + progress = progress_dialog_create(); + gtk_window_set_title(GTK_WINDOW(progress->window), + _("Retrieving new messages")); + gtk_signal_connect(GTK_OBJECT(progress->cancel_btn), "clicked", + GTK_SIGNAL_FUNC(inc_cancel), dialog); + gtk_signal_connect(GTK_OBJECT(progress->window), "delete_event", + GTK_SIGNAL_FUNC(gtk_true), NULL); + manage_window_set_transient(GTK_WINDOW(progress->window)); + + progress_dialog_set_value(progress, 0.0); + + gtk_widget_show_now(progress->window); + + dialog->dialog = progress; + dialog->queue_list = NULL; + + return dialog; +} + +static void inc_progress_dialog_clear(IncProgressDialog *inc_dialog) +{ + progress_dialog_set_value(inc_dialog->dialog, 0.0); + progress_dialog_set_label(inc_dialog->dialog, ""); +} + +static void inc_progress_dialog_destroy(IncProgressDialog *inc_dialog) +{ + g_return_if_fail(inc_dialog != NULL); + + progress_dialog_destroy(inc_dialog->dialog); + + g_free(inc_dialog); +} + +static IncSession *inc_session_new(PrefsAccount *account) +{ + IncSession *session; + + g_return_val_if_fail(account != NULL, NULL); + + if (account->protocol != A_POP3 && account->protocol != A_APOP) + return NULL; + if (!account->recv_server || !account->userid) + return NULL; + + session = g_new0(IncSession, 1); + session->pop3_state = inc_pop3_state_new(account); + session->pop3_state->session = session; + + return session; +} + +static void inc_session_destroy(IncSession *session) +{ + g_return_if_fail(session != NULL); + + inc_pop3_state_destroy(session->pop3_state); + g_free(session); +} + +static Pop3State *inc_pop3_state_new(PrefsAccount *account) +{ + Pop3State *state; + + state = g_new0(Pop3State, 1); + + state->ac_prefs = account; + state->folder_table = g_hash_table_new(NULL, NULL); + state->id_table = inc_get_uidl_table(account); + state->id_list = NULL; + state->new_id_list = NULL; + state->inc_state = INC_SUCCESS; + + return state; +} + +static void inc_pop3_state_destroy(Pop3State *state) +{ + g_hash_table_destroy(state->folder_table); + if (state->id_table) { + hash_free_strings(state->id_table); + g_hash_table_destroy(state->id_table); + } + slist_free_strings(state->id_list); + slist_free_strings(state->new_id_list); + g_slist_free(state->id_list); + g_slist_free(state->new_id_list); + + g_free(state->greeting); + g_free(state->user); + g_free(state->pass); + g_free(state->prev_folder); + + g_free(state); +} + +static void inc_start(IncProgressDialog *inc_dialog) +{ + IncSession *session; + Pop3State *pop3_state; + IncState inc_state; + + while (inc_dialog->queue_list != NULL) { + session = inc_dialog->queue_list->data; + pop3_state = session->pop3_state; + + inc_progress_dialog_clear(inc_dialog); + + pop3_state->user = g_strdup(pop3_state->ac_prefs->userid); + if (pop3_state->ac_prefs->passwd) + pop3_state->pass = + g_strdup(pop3_state->ac_prefs->passwd); + else if (pop3_state->ac_prefs->tmp_pass) + pop3_state->pass = + g_strdup(pop3_state->ac_prefs->tmp_pass); + else { + gchar *pass; + gchar *message; + + message = g_strdup_printf + (_("Input password for %s on %s:"), + pop3_state->user, + pop3_state->ac_prefs->recv_server); + + pass = input_dialog_with_invisible(_("Input password"), + message, NULL); + g_free(message); + manage_window_focus_in(inc_dialog->mainwin->window, + NULL, NULL); + if (pass) { + pop3_state->ac_prefs->tmp_pass = g_strdup(pass); + pop3_state->pass = pass; + } else { + inc_session_destroy(session); + inc_dialog->queue_list = g_list_remove + (inc_dialog->queue_list, session); + continue; + } + } + + /* begin POP3 session */ + inc_state = inc_pop3_session_do(session); + + if (pop3_state->error_val == PS_AUTHFAIL) { + manage_window_focus_in(inc_dialog->dialog->window, NULL, NULL); + alertpanel_error + (_("Authorization for %s on %s failed"), + pop3_state->user, + pop3_state->ac_prefs->recv_server); + } + + statusbar_pop_all(); + manage_window_focus_in(inc_dialog->mainwin->window, NULL, NULL); + + folder_item_scan_foreach(pop3_state->folder_table); + folderview_update_item_foreach(pop3_state->folder_table); + + if (pop3_state->error_val == PS_AUTHFAIL && + pop3_state->ac_prefs->tmp_pass) { + g_free(pop3_state->ac_prefs->tmp_pass); + pop3_state->ac_prefs->tmp_pass = NULL; + } + + inc_write_uidl_list(pop3_state); + + if (inc_state != INC_SUCCESS) { + inc_put_error(inc_state); + break; + } + + inc_session_destroy(session); + inc_dialog->queue_list = + g_list_remove(inc_dialog->queue_list, session); + } + + while (inc_dialog->queue_list != NULL) { + session = inc_dialog->queue_list->data; + inc_session_destroy(session); + inc_dialog->queue_list = + g_list_remove(inc_dialog->queue_list, session); + } + + inc_progress_dialog_destroy(inc_dialog); +} + +static IncState inc_pop3_session_do(IncSession *session) +{ + Pop3State *pop3_state = session->pop3_state; + IncProgressDialog *inc_dialog = (IncProgressDialog *)session->data; + Automaton *atm; + SockInfo *sockinfo; + gint i; + gchar *server; + gushort port; + gchar *buf; + AtmHandler handlers[] = { + pop3_greeting_recv , + pop3_getauth_user_send , pop3_getauth_user_recv, + pop3_getauth_pass_send , pop3_getauth_pass_recv, + pop3_getauth_apop_send , pop3_getauth_apop_recv, + pop3_getrange_stat_send , pop3_getrange_stat_recv, + pop3_getrange_last_send , pop3_getrange_last_recv, + pop3_getrange_uidl_send , pop3_getrange_uidl_recv, + pop3_retr_send , pop3_retr_recv, + pop3_delete_send , pop3_delete_recv, + pop3_logout_send , pop3_logout_recv + }; + + debug_print(_("getting new messages of account %s...\n"), + pop3_state->ac_prefs->account_name); + + atm = automaton_create(N_POP3_PHASE); + + session->atm = atm; + atm->data = pop3_state; + + buf = g_strdup_printf(_("%s: Retrieving new messages"), + pop3_state->ac_prefs->recv_server); + gtk_window_set_title(GTK_WINDOW(inc_dialog->dialog->window), buf); + g_free(buf); + + for (i = POP3_GREETING_RECV; i < N_POP3_PHASE; i++) + atm->state[i].handler = handlers[i]; + atm->state[POP3_GREETING_RECV].condition = GDK_INPUT_READ; + for (i = POP3_GETAUTH_USER_SEND; i < N_POP3_PHASE; ) { + atm->state[i++].condition = GDK_INPUT_WRITE; + atm->state[i++].condition = GDK_INPUT_READ; + } + + atm->terminate = (AtmHandler)pop3_automaton_terminate; + + atm->num = POP3_GREETING_RECV; + + server = pop3_state->ac_prefs->recv_server; + port = pop3_state->ac_prefs->set_popport ? + pop3_state->ac_prefs->popport : 110; + + buf = g_strdup_printf(_("Connecting to POP3 server: %s ..."), server); + log_message("%s\n", buf); + progress_dialog_set_label(inc_dialog->dialog, buf); + g_free(buf); + GTK_EVENTS_FLUSH(); + +#if USE_THREADS + if ((sockinfo = sock_connect_with_thread(server, port)) == NULL) { +#else + if ((sockinfo = sock_connect_nb(server, port)) == NULL) { +#endif + log_warning(_("Can't connect to POP3 server: %s:%d\n"), + server, port); + manage_window_focus_in(inc_dialog->dialog->window, NULL, NULL); + alertpanel_error(_("Can't connect to POP3 server: %s:%d"), + server, port); + manage_window_focus_out(inc_dialog->dialog->window, NULL, NULL); + pop3_automaton_terminate(-1, atm); + automaton_destroy(atm); + + return pop3_state->inc_state; + } + + pop3_state->sockinfo = sockinfo; + +#if USE_THREADS + atm->timeout_tag = gtk_timeout_add + (TIMEOUT_ITV, (GtkFunction)connection_check_cb, atm); +#else + atm->tag = gdk_input_add(sockinfo->sock, + atm->state[atm->num].condition, + automaton_input_cb, atm); +#endif + + gtk_main(); + +#if USE_THREADS + //pthread_join(sockinfo->connect_thr, NULL); +#endif + sock_sockinfo_free(sockinfo); + automaton_destroy(atm); + + return pop3_state->inc_state; +} + +static gint pop3_automaton_terminate(gint source, Automaton *atm) +{ + if (atm->tag > 0) { + gdk_input_remove(atm->tag); + atm->tag = 0; + } + if (atm->timeout_tag > 0) { + gtk_timeout_remove(atm->timeout_tag); + atm->timeout_tag = 0; + } + if (source > 0) { + sock_close(source); + gtk_main_quit(); + } + + atm->terminated = TRUE; + + return 0; +} + +static GHashTable *inc_get_uidl_table(PrefsAccount *ac_prefs) +{ + GHashTable *table; + gchar *path; + FILE *fp; + gchar buf[IDLEN + 3]; + + path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + "uidl-", ac_prefs->recv_server, + "-", ac_prefs->userid, NULL); + if ((fp = fopen(path, "r")) == NULL) { + if (ENOENT != errno) FILE_OP_ERROR(path, "fopen"); + g_free(path); + return NULL; + } + g_free(path); + + table = g_hash_table_new(g_str_hash, g_str_equal); + + while (fgets(buf, sizeof(buf), fp) != NULL) { + strretchomp(buf); + g_hash_table_insert(table, g_strdup(buf), GINT_TO_POINTER(1)); + } + + fclose(fp); + + return table; +} + +static void inc_write_uidl_list(Pop3State *state) +{ + gchar *path; + FILE *fp; + GSList *cur; + + if (!state->id_list) return; + + path = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + "uidl-", state->ac_prefs->recv_server, + "-", state->user, NULL); + if ((fp = fopen(path, "w")) == NULL) { + FILE_OP_ERROR(path, "fopen"); + g_free(path); + return; + } + + for (cur = state->id_list; cur != NULL; cur = cur->next) { + if (fputs((gchar *)cur->data, fp) == EOF) { + FILE_OP_ERROR(path, "fputs"); + break; + } + if (fputc('\n', fp) == EOF) { + FILE_OP_ERROR(path, "fputc"); + break; + } + } + + if (fclose(fp) == EOF) FILE_OP_ERROR(path, "fclose"); + g_free(path); +} + +#if USE_THREADS +static gint connection_check_cb(Automaton *atm) +{ + Pop3State *state = atm->data; + IncProgressDialog *inc_dialog = state->session->data; + SockInfo *sockinfo = state->sockinfo; + + //g_print("connection check\n"); + + if (sockinfo->state == CONN_LOOKUPFAILED || + sockinfo->state == CONN_FAILED) { + atm->timeout_tag = 0; + pop3_automaton_terminate(sockinfo->sock, atm); + log_warning(_("Can't connect to POP3 server: %s:%d\n"), + sockinfo->hostname, sockinfo->port); + manage_window_focus_in(inc_dialog->dialog->window, NULL, NULL); + alertpanel_error(_("Can't connect to POP3 server: %s:%d"), + sockinfo->hostname, sockinfo->port); + manage_window_focus_out(inc_dialog->dialog->window, NULL, NULL); + return FALSE; + } else if (sockinfo->state == CONN_ESTABLISHED) { + atm->timeout_tag = 0; + atm->tag = gdk_input_add(sockinfo->sock, + atm->state[atm->num].condition, + automaton_input_cb, atm); + return FALSE; + } else { + return TRUE; + } +} +#endif + +void inc_progress_update(Pop3State *state, Pop3Phase phase) +{ + gchar buf[MSGBUFSIZE]; + IncProgressDialog *inc_dialog = state->session->data; + ProgressDialog *dialog = inc_dialog->dialog; + + switch (phase) { + case POP3_GREETING_RECV: + break; + case POP3_GETAUTH_USER_SEND: + case POP3_GETAUTH_USER_RECV: + case POP3_GETAUTH_PASS_SEND: + case POP3_GETAUTH_PASS_RECV: + case POP3_GETAUTH_APOP_SEND: + case POP3_GETAUTH_APOP_RECV: + progress_dialog_set_label(dialog, _("Authorizing")); + break; + case POP3_GETRANGE_STAT_SEND: + case POP3_GETRANGE_STAT_RECV: + case POP3_GETRANGE_LAST_SEND: + case POP3_GETRANGE_LAST_RECV: + case POP3_GETRANGE_UIDL_SEND: + case POP3_GETRANGE_UIDL_RECV: + progress_dialog_set_label(dialog, + _("Getting number of new messages")); + break; + case POP3_RETR_SEND: + case POP3_RETR_RECV: + g_snprintf(buf, sizeof(buf), + _("Retrieving message (%d / %d)"), + state->cur_msg, state->count); + progress_dialog_set_label(dialog, buf); + progress_dialog_set_percentage + (dialog, (gfloat)state->cur_msg / state->count); + break; + case POP3_DELETE_SEND: + case POP3_DELETE_RECV: + progress_dialog_set_label(dialog, _("Deleting message")); + break; + case POP3_LOGOUT_SEND: + case POP3_LOGOUT_RECV: + progress_dialog_set_label(dialog, _("Quitting")); + break; + default: + } +} + +gint inc_drop_message(const gchar *file, Pop3State *state) +{ + FolderItem *inbox; + FolderItem *dropfolder; + gint val; + + if (state->ac_prefs->inbox) { + inbox = folder_find_item_from_path(state->ac_prefs->inbox); + if (!inbox) + inbox = folder_get_default_inbox(); + } else + inbox = folder_get_default_inbox(); + if (!inbox) { + unlink(file); + return -1; + } + + if (state->ac_prefs->filter_on_recv) { + dropfolder = + filter_get_dest_folder(prefs_common.fltlist, file); + if (!dropfolder) dropfolder = inbox; + else if (!strcmp(dropfolder->path, FILTER_NOT_RECEIVE)) { + g_warning(_("a message won't be received\n")); + return 1; + } + } else + dropfolder = inbox; + + val = GPOINTER_TO_INT(g_hash_table_lookup + (state->folder_table, dropfolder)); + if (val == 0) { + folder_item_scan(dropfolder); + g_hash_table_insert(state->folder_table, dropfolder, + GINT_TO_POINTER(1)); + } + + if (folder_item_add_msg(dropfolder, file) < 0) { + unlink(file); + return -1; + } + + unlink(file); + return 0; +} + +static void inc_put_error(IncState istate) +{ + switch (istate) { + case INC_ERROR: + alertpanel_error(_("Error occurred while processing mail.")); + break; + case INC_NOSPACE: + alertpanel_error(_("No disk space left.")); + break; + default: + } +} + +static void inc_cancel(GtkWidget *widget, gpointer data) +{ + IncProgressDialog *dialog = data; + IncSession *session = dialog->queue_list->data; + SockInfo *sockinfo = session->pop3_state->sockinfo; + +#if USE_THREADS + if (sockinfo->state == CONN_READY || + sockinfo->state == CONN_LOOKUPSUCCESS) { + pthread_cancel(sockinfo->connect_thr); + //pthread_kill(sockinfo->connect_thr, SIGINT); + g_print("connection was cancelled.\n"); + } +#endif + + session->pop3_state->inc_state = INC_CANCEL; + pop3_automaton_terminate(sockinfo->sock, session->atm); +} + +static gint inc_spool(void) +{ + gchar *mbox, *logname; + gint msgs; + + logname = g_get_user_name(); + mbox = g_strconcat(prefs_common.spool_path + ? prefs_common.spool_path : DEFAULT_SPOOL_PATH, + G_DIR_SEPARATOR_S, logname, NULL); + msgs = get_spool(folder_get_default_inbox(), mbox); + g_free(mbox); + + return msgs; +} + +static gint get_spool(FolderItem *dest, const gchar *mbox) +{ + gint msgs, size; + gint lockfd; + gchar *tmp_mbox = "/tmp/tmpmbox"; + GHashTable *folder_table = NULL; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(mbox != NULL, -1); + + if (!is_file_exist(mbox) || (size = get_file_size(mbox)) == 0) { + debug_print(_("no messages in local mailbox.\n")); + return 0; + } else if (size < 0) + return -1; + + if ((lockfd = lock_mbox(mbox, LOCK_FLOCK)) < 0) + return -1; + + if (copy_mbox(mbox, tmp_mbox) < 0) + return -1; + + debug_print(_("Getting new messages from %s into %s...\n"), + mbox, dest->path); + + if (prefs_common.filter_on_inc) + folder_table = g_hash_table_new(NULL, NULL); + msgs = proc_mbox(dest, tmp_mbox, folder_table); + + unlink(tmp_mbox); + if (msgs >= 0) empty_mbox(mbox); + unlock_mbox(mbox, lockfd, LOCK_FLOCK); + + if (folder_table) { + folder_item_scan_foreach(folder_table); + folderview_update_item_foreach(folder_table); + g_hash_table_destroy(folder_table); + } else { + folder_item_scan(dest); + folderview_update_item(dest, FALSE); + } + + return msgs; +} diff --git a/src/inc.h b/src/inc.h new file mode 100644 index 000000000..86241b73e --- /dev/null +++ b/src/inc.h @@ -0,0 +1,103 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __INC_H__ +#define __INC_H__ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> + +#include "mainwindow.h" +#include "progressdialog.h" +#include "prefs_account.h" +#include "pop.h" +#include "automaton.h" +#include "socket.h" + +typedef struct _IncProgressDialog IncProgressDialog; +typedef struct _IncSession IncSession; +typedef struct _Pop3State Pop3State; + +typedef enum +{ + INC_SUCCESS, + INC_ERROR, + INC_NOSPACE, + INC_CANCEL +} IncState; + +struct _IncProgressDialog +{ + ProgressDialog *dialog; + + MainWindow *mainwin; + + GList *queue_list; /* list of IncSession */ +}; + +struct _IncSession +{ + Pop3State *pop3_state; + Automaton *atm; + + gpointer data; +}; + +struct _Pop3State +{ + gboolean cancelled; + PrefsAccount *ac_prefs; + GHashTable *folder_table; + + gchar *prev_folder; + + SockInfo *sockinfo; + + gchar *greeting; + gchar *user; + gchar *pass; + gint count; + gint new; + gint bytes; + gint cur_msg; + + /* UIDL */ + GHashTable *id_table; + GSList *id_list; + GSList *new_id_list; + + gint error_val; + IncState inc_state; + + IncSession *session; +}; + +#define TIMEOUT_ITV 200 + +void inc_mail (MainWindow *mainwin); +void inc_all_account_mail (MainWindow *mainwin); +void inc_progress_update (Pop3State *state, + Pop3Phase phase); +gint inc_drop_message (const gchar *file, + Pop3State *state); + +#endif /* __INC_H__ */ diff --git a/src/inputdialog.c b/src/inputdialog.c new file mode 100644 index 000000000..b78e1125d --- /dev/null +++ b/src/inputdialog.c @@ -0,0 +1,211 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkdialog.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkhbbox.h> + +#include "intl.h" +#include "inputdialog.h" +#include "manage_window.h" +#include "gtkutils.h" +#include "utils.h" + +#define INPUT_DIALOG_WIDTH 420 + +static gboolean ack; + +static GtkWidget *dialog; +static GtkWidget *msg_label; +static GtkWidget *entry; +static GtkWidget *ok_button; + +static void input_dialog_create (void); +static void input_dialog_set (const gchar *title, + const gchar *message, + const gchar *default_string); + +static void ok_clicked (GtkWidget *widget, + gpointer data); +static void cancel_clicked (GtkWidget *widget, + gpointer data); +static void key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static void entry_activated (GtkEditable *editable); + +gchar *input_dialog(const gchar *title, const gchar *message, + const gchar *default_string) +{ + gchar *str; + + if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL; + + if (!dialog) + input_dialog_create(); + + input_dialog_set(title, message, default_string); + gtk_widget_show(dialog); + gtk_window_set_modal(GTK_WINDOW(dialog), TRUE); + manage_window_set_transient(GTK_WINDOW(dialog)); + + gtk_main(); + + manage_window_focus_out(dialog, NULL, NULL); + gtk_widget_hide(dialog); + gtk_entry_set_visibility(GTK_ENTRY(entry), TRUE); + + if (ack) { + str = gtk_editable_get_chars(GTK_EDITABLE(entry), 0, -1); + if (str && *str == '\0') + str = NULL; + } else + str = NULL; + + GTK_EVENTS_FLUSH(); + + debug_print("return string = %s\n", str ? str : "(none)"); + return str; +} + +gchar *input_dialog_with_invisible(const gchar *title, const gchar *message, + const gchar *default_string) +{ + if (dialog && GTK_WIDGET_VISIBLE(dialog)) return NULL; + + if (!dialog) + input_dialog_create(); + + gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE); + + return input_dialog(title, message, default_string); +} + +static void input_dialog_create(void) +{ + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *confirm_area; + GtkWidget *cancel_button; + + dialog = gtk_dialog_new(); + gtk_window_set_policy(GTK_WINDOW(dialog), FALSE, FALSE, FALSE); + gtk_widget_set_usize(dialog, INPUT_DIALOG_WIDTH, -1); + gtk_container_set_border_width + (GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), 5); + gtk_window_set_position(GTK_WINDOW(dialog), GTK_WIN_POS_CENTER); + gtk_signal_connect(GTK_OBJECT(dialog), "delete_event", + GTK_SIGNAL_FUNC(cancel_clicked), NULL); + gtk_signal_connect(GTK_OBJECT(dialog), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(dialog), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(dialog), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + + gtk_widget_realize(dialog); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), vbox); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + msg_label = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(hbox), msg_label, FALSE, FALSE, 0); + gtk_label_set_justify(GTK_LABEL(msg_label), GTK_JUSTIFY_LEFT); + + entry = gtk_entry_new(); + gtk_box_pack_start(GTK_BOX(vbox), entry, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(entry), "activate", + GTK_SIGNAL_FUNC(entry_activated), NULL); + + gtkut_button_set_create(&confirm_area, + &ok_button, _("OK"), + &cancel_button, _("Cancel"), + NULL, NULL); + gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->action_area), + confirm_area); + gtk_widget_grab_default(ok_button); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(ok_clicked), NULL); + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(cancel_clicked), NULL); + + + gtk_widget_show_all(GTK_DIALOG(dialog)->vbox); +} + +static void input_dialog_set(const gchar *title, const gchar *message, + const gchar *default_string) +{ + gtk_window_set_title(GTK_WINDOW(dialog), title); + gtk_label_set_text(GTK_LABEL(msg_label), message); + if (default_string && *default_string) + gtk_entry_set_text(GTK_ENTRY(entry), default_string); + else + gtk_entry_set_text(GTK_ENTRY(entry), ""); + gtk_entry_set_position(GTK_ENTRY(entry), 0); + gtk_entry_select_region(GTK_ENTRY(entry), 0, -1); + + gtk_widget_grab_focus(ok_button); + gtk_widget_grab_focus(entry); +} + +static void ok_clicked(GtkWidget *widget, gpointer data) +{ + ack = TRUE; + gtk_main_quit(); +} + +static void cancel_clicked(GtkWidget *widget, gpointer data) +{ + ack = FALSE; + gtk_main_quit(); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) { + ack = FALSE; + gtk_main_quit(); + } +} + +static void entry_activated(GtkEditable *editable) +{ + ack = TRUE; + gtk_main_quit(); +} diff --git a/src/inputdialog.h b/src/inputdialog.h new file mode 100644 index 000000000..b3993532d --- /dev/null +++ b/src/inputdialog.h @@ -0,0 +1,32 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __INPUTDIALOG_H__ +#define __INPUTDIALOG_H__ + +#include <glib.h> + +gchar *input_dialog (const gchar *title, + const gchar *message, + const gchar *default_string); +gchar *input_dialog_with_invisible (const gchar *title, + const gchar *message, + const gchar *default_string); + +#endif /* __INPUTDIALOG_H__ */ diff --git a/src/intl.h b/src/intl.h new file mode 100644 index 000000000..0f172d7c1 --- /dev/null +++ b/src/intl.h @@ -0,0 +1,22 @@ +#ifndef __INTL_H__ +#define __INTL_H__ + +#ifdef ENABLE_NLS +# include <libintl.h> +# define _(String) dgettext(PACKAGE,String) +# ifdef gettext_noop +# define N_(String) gettext_noop(String) +# else +# define N_(String) (String) +# endif /* gettext_noop */ +#else +# define _(String) (String) +# define N_(String) (String) +# define textdomain(String) (String) +# define gettext(String) (String) +# define dgettext(Domain,String) (String) +# define dcgettext(Domain,String,Type) (String) +# define bindtextdomain(Domain,Directory) (Domain) +#endif /* ENABLE_NLS */ + +#endif /* __INTL_H__ */ diff --git a/src/logwindow.c b/src/logwindow.c new file mode 100644 index 000000000..a4bccdc37 --- /dev/null +++ b/src/logwindow.c @@ -0,0 +1,159 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtktext.h> +#include <gtk/gtkstyle.h> + +#include "intl.h" +#include "logwindow.h" +#include "utils.h" +#include "gtkutils.h" + +static LogWindow *logwindow; + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, + LogWindow *logwin); + +LogWindow *log_window_create(void) +{ + LogWindow *logwin; + GtkWidget *window; + GtkWidget *scrolledwin; + GtkWidget *text; + + debug_print(_("Creating log window...\n")); + logwin = g_new0(LogWindow, 1); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), _("Protocol log")); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); + gtk_widget_set_usize(window, 520, 400); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), logwin); + gtk_widget_realize(window); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_container_add(GTK_CONTAINER(window), scrolledwin); + gtk_widget_show(scrolledwin); + + text = gtk_text_new(gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(scrolledwin)), + gtk_scrolled_window_get_vadjustment + (GTK_SCROLLED_WINDOW(scrolledwin))); + gtk_container_add(GTK_CONTAINER(scrolledwin), text); + gtk_widget_show(text); + + logwin->window = window; + logwin->scrolledwin = scrolledwin; + logwin->text = text; + + logwindow = logwin; + + return logwin; +} + +void log_window_init(LogWindow *logwin) +{ + GdkColormap *colormap; + GdkColor color[3] = + {{0, 0, 0xafff, 0}, {0, 0xefff, 0, 0}, {0, 0xefff, 0, 0}}; + gboolean success[3]; + gint i; + + gtkut_widget_disable_theme_engine(logwin->text); + + logwin->msg_color = color[0]; + logwin->warn_color = color[1]; + logwin->error_color = color[2]; + + colormap = gdk_window_get_colormap(logwin->window->window); + gdk_colormap_alloc_colors(colormap, color, 3, FALSE, TRUE, success); + + for (i = 0; i < 3; i++) { + if (success[i] == FALSE) { + GtkStyle *style; + + g_warning("LogWindow: color allocation failed\n"); + style = gtk_widget_get_style(logwin->window); + logwin->msg_color = logwin->warn_color = + logwin->error_color = style->black; + break; + } + } +} + +void log_window_show(LogWindow *logwin) +{ + gtk_widget_hide(logwin->window); + gtk_widget_show(logwin->window); +} + +void log_window_append(const gchar *str, LogType type) +{ + GtkText *text; + GdkColor *color = NULL; + gchar *head = NULL; + + g_return_if_fail(logwindow != NULL); + + text = GTK_TEXT(logwindow->text); + + //gtk_text_freeze(text); + + switch (type) { + case LOG_WARN: + color = &logwindow->warn_color; + head = "*** "; + break; + case LOG_ERROR: + color = &logwindow->error_color; + head = "*** "; + break; + case LOG_MSG: + color = &logwindow->msg_color; + break; + default: + } + + if (head) gtk_text_insert(text, NULL, color, NULL, head, -1); + gtk_text_insert(text, NULL, color, NULL, str, -1); + + //gtk_text_thaw(text); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, + LogWindow *logwin) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(logwin->window); +} diff --git a/src/logwindow.h b/src/logwindow.h new file mode 100644 index 000000000..48b64a045 --- /dev/null +++ b/src/logwindow.h @@ -0,0 +1,53 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __LOGWINDOW_H__ +#define __LOGWINDOW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +typedef struct _LogWindow LogWindow; + +typedef enum +{ + LOG_NORMAL, + LOG_MSG, + LOG_WARN, + LOG_ERROR +} LogType; + +struct _LogWindow +{ + GtkWidget *window; + GtkWidget *scrolledwin; + GtkWidget *text; + + GdkColor msg_color; + GdkColor warn_color; + GdkColor error_color; +}; + +LogWindow *log_window_create(void); +void log_window_init(LogWindow *logwin); +void log_window_show(LogWindow *logwin); + +void log_window_append(const gchar *str, LogType type); + +#endif /* __LOGWINDOW_H__ */ diff --git a/src/main.c b/src/main.c new file mode 100644 index 000000000..f0598e302 --- /dev/null +++ b/src/main.c @@ -0,0 +1,423 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkrc.h> + +#if HAVE_GDK_IMLIB +# include <gdk_imlib.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <unistd.h> +#include <time.h> +#include <sys/stat.h> +#include <sys/types.h> +#include <signal.h> + +#if HAVE_LOCALE_H +# include <locale.h> +#endif + +#if USE_GPGME +# include <gpgme.h> +#endif + +#include "intl.h" +#include "main.h" +#include "mainwindow.h" +#include "folderview.h" +#include "summaryview.h" +#include "prefs_common.h" +#include "prefs_filter.h" +#include "prefs_account.h" +#include "account.h" +#include "procmsg.h" +#include "inc.h" +#include "import.h" +#include "alertpanel.h" +#include "addressbook.h" +#include "compose.h" +#include "folder.h" +#include "setup.h" +#include "utils.h" +#include "gtkutils.h" + +gchar *prog_version; +gboolean debug_mode = FALSE; + +static gint lock_socket = -1; +static gint lock_socket_tag = 0; + +static struct Cmd { + gboolean receive; + gboolean receive_all; + gboolean compose; + const gchar *compose_mailto; +} cmd; + +static void parse_cmd_opt(int argc, char *argv[]); + +#if USE_GPGME +static void idle_function_for_gpgme(void); +#endif /* USE_GPGME */ + +static gint prohibit_duplicate_launch (void); +static void lock_socket_input_cb (gpointer data, + gint source, + GdkInputCondition condition); +static gchar *get_socket_name (void); + +static void open_compose_new_with_recipient (const gchar *address); + +#if 0 +/* for gettext */ +_("File `%s' already exists.\n" + "Can't create folder.") +#endif + +#define MAKE_DIR_IF_NOT_EXIST(dir) \ +{ \ + if (!is_dir_exist(dir)) { \ + if (is_file_exist(dir)) { \ + alertpanel_warning \ + (_("File `%s' already exists.\n" \ + "Can't create folder."), \ + dir); \ + return 1; \ + } \ + if (mkdir(dir, S_IRWXU) < 0) { \ + FILE_OP_ERROR(dir, "mkdir"); \ + return 1; \ + } \ + if (chmod(dir, S_IRWXU) < 0) \ + FILE_OP_ERROR(dir, "chmod"); \ + } \ +} + +int main(int argc, char *argv[]) +{ + gchar *userrc; + MainWindow *mainwin; + FolderView *folderview; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + gtk_set_locale(); + gtk_init(&argc, &argv); + +#if USE_THREADS + g_thread_init(NULL); + if (!g_thread_supported()) + g_error(_("g_thread is not supported by glib.\n")); +#endif + +#if HAVE_GDK_IMLIB + gdk_imlib_init(); + gtk_widget_push_visual(gdk_imlib_get_visual()); + gtk_widget_push_colormap(gdk_imlib_get_colormap()); +#endif + + /* parse gtkrc files */ + userrc = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, ".gtkrc", + NULL); + gtk_rc_parse(userrc); + g_free(userrc); + userrc = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, ".gtk", + G_DIR_SEPARATOR_S, "gtkrc", NULL); + gtk_rc_parse(userrc); + g_free(userrc); + userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, "gtkrc", NULL); + gtk_rc_parse(userrc); + g_free(userrc); + + gtk_rc_parse("./gtkrc"); + + userrc = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL); + gtk_item_factory_parse_rc(userrc); + g_free(userrc); + + prog_version = PROG_VERSION; + + parse_cmd_opt(argc, argv); + + CHDIR_RETURN_VAL_IF_FAIL(g_get_home_dir(), 1); + + /* check and create unix domain socket */ + lock_socket = prohibit_duplicate_launch(); + if (lock_socket < 0) return 0; + + /* backup if old rc file exists */ + if (is_file_exist(RC_DIR)) { + if (rename(RC_DIR, RC_DIR ".bak") < 0) + FILE_OP_ERROR(RC_DIR, "rename"); + } + MAKE_DIR_IF_NOT_EXIST(RC_DIR); + MAKE_DIR_IF_NOT_EXIST(get_imap_cache_dir()); + MAKE_DIR_IF_NOT_EXIST(get_news_cache_dir()); + MAKE_DIR_IF_NOT_EXIST(get_mime_tmp_dir()); + + if (is_file_exist(RC_DIR G_DIR_SEPARATOR_S "assortrc") && + !is_file_exist(RC_DIR G_DIR_SEPARATOR_S "filterrc")) { + if (rename(RC_DIR G_DIR_SEPARATOR_S "assortrc", + RC_DIR G_DIR_SEPARATOR_S "filterrc") < 0) + FILE_OP_ERROR(RC_DIR G_DIR_SEPARATOR_S "assortrc", + "rename"); + } + + srandom((gint)time(NULL)); + +#if USE_GPGME + gpgme_register_idle(idle_function_for_gpgme); +#endif + + prefs_common_read_config(); + prefs_common_save_config(); + prefs_filter_read_config(); + prefs_filter_write_config(); + + gtkut_widget_init(); + + mainwin = main_window_create + (prefs_common.sep_folder | prefs_common.sep_msg << 1); + folderview = mainwin->folderview; + + /* register the callback of unix domain socket input */ + lock_socket_tag = gdk_input_add(lock_socket, + GDK_INPUT_READ | GDK_INPUT_EXCEPTION, + lock_socket_input_cb, + mainwin); + + account_read_config_all(); + account_save_config_all(); + + if (folder_read_list() < 0) setup(mainwin); + account_set_missing_folder(); + folderview_set(folderview); + + if (cmd.receive_all) + inc_all_account_mail(mainwin); + else if (prefs_common.chk_on_startup || cmd.receive) + inc_mail(mainwin); + else + gtk_widget_grab_focus(folderview->ctree); + + if (cmd.compose) + open_compose_new_with_recipient(cmd.compose_mailto); + + /* ignore SIGPIPE signal for preventing sudden death of program */ + signal(SIGPIPE, SIG_IGN); + + gtk_main(); + + return 0; +} + +static void parse_cmd_opt(int argc, char *argv[]) +{ + gint i; + + for (i = 1; i < argc; i++) { + if (!strncmp(argv[i], "--debug", 7)) + debug_mode = TRUE; + else if (!strncmp(argv[i], "--receive-all", 13)) + cmd.receive_all = TRUE; + else if (!strncmp(argv[i], "--receive", 9)) + cmd.receive = TRUE; + else if (!strncmp(argv[i], "--compose", 9)) { + const gchar *p = argv[i + 1]; + + cmd.compose = TRUE; + cmd.compose_mailto = NULL; + if (p && *p != '\0' && *p != '-') { + if (!strncmp(p, "mailto:", 7)) + cmd.compose_mailto = p + 7; + else + cmd.compose_mailto = p; + i++; + } + } else if (!strncmp(argv[i], "--version", 9)) { + puts("Sylpheed version " VERSION); + exit(0); + } else if (!strncmp(argv[i], "--help", 6)) { + g_print(_("Usage: %s [OPTION]...\n"), g_get_prgname()); + + puts(_(" --compose [address] open composition window")); + puts(_(" --receive receive new messages")); + puts(_(" --receive-all receive new messages of all accounts")); + puts(_(" --debug debug mode")); + puts(_(" --help display this help and exit")); + puts(_(" --version output version information and exit")); + + exit(1); + } + } +} + +void app_will_exit(GtkWidget *widget, gpointer data) +{ + MainWindow *mainwin = data; + gchar *filename; + + if (compose_get_compose_list()) { + if (alertpanel(_("Notice"), + _("Composing message exists. Really quit?"), + _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT) + return; + } + + if (prefs_common.clean_on_exit) + main_window_empty_trash(mainwin, prefs_common.ask_on_clean); + + /* save all state before exiting */ + folder_write_list(); + summary_write_cache(mainwin->summaryview); + + main_window_get_size(mainwin); + main_window_get_position(mainwin); + prefs_common_save_config(); + prefs_filter_write_config(); + account_save_config_all(); + addressbook_export_to_file(); + + filename = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, MENU_RC, NULL); + gtk_item_factory_dump_rc(filename, NULL, TRUE); + g_free(filename); + + /* delete temporary files */ + remove_all_files(get_mime_tmp_dir()); + + /* delete unix domain socket */ + gdk_input_remove(lock_socket_tag); + sock_close(lock_socket); + filename = get_socket_name(); + unlink(filename); + + gtk_main_quit(); +} + +#if USE_GPGME +static void idle_function_for_gpgme(void) +{ + while (gtk_events_pending()) + gtk_main_iteration(); +} +#endif /* USE_GPGME */ + +static gchar *get_socket_name(void) +{ + static gchar *filename = NULL; + + if (filename == NULL) { + filename = g_strdup_printf("%s%csylpheed-%d", + g_get_tmp_dir(), G_DIR_SEPARATOR, + getuid()); + } + + return filename; +} + +static gint prohibit_duplicate_launch(void) +{ + gint uxsock; + gchar *path; + + path = get_socket_name(); + uxsock = sock_connect_unix(path); + if (uxsock < 0) { + unlink(path); + return sock_open_unix(path); + } + + /* remote command mode */ + + debug_print(_("another Sylpheed is already running.\n")); + + if (cmd.receive_all) + sock_write(uxsock, "receive_all\n", 12); + else if (cmd.receive) + sock_write(uxsock, "receive\n", 8); + else if (cmd.compose) { + gchar *compose_str; + + if (cmd.compose_mailto) + compose_str = g_strdup_printf("compose %s\n", cmd.compose_mailto); + else + compose_str = g_strdup("compose\n"); + + sock_write(uxsock, compose_str, strlen(compose_str)); + g_free(compose_str); + } else + sock_write(uxsock, "popup\n", 6); + + sock_close(uxsock); + return -1; +} + +static void lock_socket_input_cb(gpointer data, + gint source, + GdkInputCondition condition) +{ + MainWindow *mainwin = (MainWindow *)data; + gint sock; + gchar buf[BUFFSIZE]; + + sock = sock_accept(source); + sock_read(sock, buf, sizeof(buf)); + sock_close(sock); + + if (!strncmp(buf, "popup", 5)){ + main_window_popup(mainwin); + } else if (!strncmp(buf, "receive_all", 11)){ + main_window_popup(mainwin); + inc_all_account_mail(mainwin); + } else if (!strncmp(buf, "receive", 7)){ + main_window_popup(mainwin); + inc_mail(mainwin); + } else if (!strncmp(buf, "compose", 7)) { + open_compose_new_with_recipient(buf + strlen("compose") + 1); + } +} + +static void open_compose_new_with_recipient(const gchar *address) +{ + gchar *addr = NULL; + + if (address) { + Xstrdup_a(addr, address, return); + g_strstrip(addr); + } + + if (addr && *addr != '\0') + compose_new_with_recipient(NULL, addr); + else + compose_new(NULL); +} diff --git a/src/main.h b/src/main.h new file mode 100644 index 000000000..cf4d42e7a --- /dev/null +++ b/src/main.h @@ -0,0 +1,31 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MAIN_H__ +#define __MAIN_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +extern gchar *prog_version; +extern gboolean debug_mode; + +void app_will_exit (GtkWidget *widget, gpointer data); + +#endif /* __MAIN_H__ */ diff --git a/src/mainwindow.c b/src/mainwindow.c new file mode 100644 index 000000000..79892c193 --- /dev/null +++ b/src/mainwindow.c @@ -0,0 +1,2071 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkcontainer.h> +#include <gtk/gtkstatusbar.h> +#include <gtk/gtkhpaned.h> +#include <gtk/gtkvpaned.h> +#include <gtk/gtkcheckmenuitem.h> +#include <gtk/gtkitemfactory.h> +#include <gtk/gtkeditable.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkmenuitem.h> +#include <gtk/gtkhandlebox.h> +#include <gtk/gtktoolbar.h> +#include <gtk/gtkbutton.h> +#include <string.h> + +#include "intl.h" +#include "main.h" +#include "mainwindow.h" +#include "folderview.h" +#include "foldersel.h" +#include "summaryview.h" +#include "summary_search.h" +#include "messageview.h" +#include "headerview.h" +#include "menu.h" +#include "folder.h" +#include "inc.h" +#include "compose.h" +#include "procmsg.h" +#include "import.h" +#include "prefs_common.h" +#include "prefs_filter.h" +#include "prefs_account.h" +#include "account.h" +#include "addressbook.h" +#include "headerwindow.h" +#include "logwindow.h" +#include "manage_window.h" +#include "alertpanel.h" +#include "statusbar.h" +#include "inputdialog.h" +#include "utils.h" +#include "gtkutils.h" +#include "codeconv.h" +#include "about.h" +#include "manual.h" + +#define AC_LABEL_WIDTH 240 + +#define STATUSBAR_PUSH(mainwin, str) \ +{ \ + gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \ + mainwin->mainwin_cid, str); \ + gtkut_widget_wait_for_draw(mainwin->hbox_stat); \ +} + +#define STATUSBAR_POP(mainwin) \ +{ \ + gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \ + mainwin->mainwin_cid); \ +} + +/* list of all instantiated MainWindow */ +static GList *mainwin_list = NULL; + +static GdkCursor *watch_cursor; + +static void main_window_show_cur_account (MainWindow *mainwin); + +static void main_window_set_widgets (MainWindow *mainwin, + SeparateType type); +static void main_window_toolbar_create (MainWindow *mainwin, + GtkWidget *container); + +/* callback functions */ +static void toolbar_inc_cb (GtkWidget *widget, + gpointer data); +static void toolbar_inc_all_cb (GtkWidget *widget, + gpointer data); +static void toolbar_send_cb (GtkWidget *widget, + gpointer data); + +static void toolbar_compose_cb (GtkWidget *widget, + gpointer data); +static void toolbar_reply_cb (GtkWidget *widget, + gpointer data); +static void toolbar_reply_to_all_cb (GtkWidget *widget, + gpointer data); +static void toolbar_forward_cb (GtkWidget *widget, + gpointer data); + +static void toolbar_delete_cb (GtkWidget *widget, + gpointer data); +static void toolbar_exec_cb (GtkWidget *widget, + gpointer data); + +static void toolbar_next_unread_cb (GtkWidget *widget, + gpointer data); + +static void toolbar_prefs_cb (GtkWidget *widget, + gpointer data); +static void toolbar_account_cb (GtkWidget *widget, + gpointer data); + +static void toolbar_account_button_pressed (GtkWidget *widget, + GdkEventButton *event, + gpointer data); +static void ac_label_button_pressed (GtkWidget *widget, + GdkEventButton *event, + gpointer data); + +static gint main_window_close_cb (GtkWidget *widget, + GdkEventAny *event, + gpointer data); + +static void add_mailbox_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void update_folderview_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void new_folder_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void rename_folder_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void delete_folder_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void import_mbox_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void empty_trash_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void save_as_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void print_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void app_exit_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void toggle_folder_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void toggle_message_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void toggle_toolbar_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void toggle_statusbar_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void separate_widget_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void addressbook_open_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void log_window_show_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void inc_mail_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void inc_all_account_mail_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void send_queue_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void compose_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void reply_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void open_msg_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void view_source_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void reedit_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void move_to_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void copy_to_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void delete_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void mark_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void unmark_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void mark_as_unread_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void mark_as_read_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void set_charset_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void thread_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void set_display_item_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void sort_summary_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void attract_by_subject_cb(MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void delete_duplicated_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void filter_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void execute_summary_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void update_summary_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void prev_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void next_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void next_unread_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void goto_folder_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void copy_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void allsel_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void prefs_common_open_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void prefs_filter_open_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void prefs_account_open_cb(MainWindow *mainwin, + guint action, + GtkWidget *widget); +static void new_account_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void account_menu_cb (GtkMenuItem *menuitem, + gpointer data); + +static void manual_open_cb (MainWindow *mainwin, + guint action, + GtkWidget *widget); + +static void scan_tree_func (Folder *folder, + FolderItem *item, + gpointer data); + +static GtkItemFactoryEntry mainwin_entries[] = +{ + {N_("/_File"), NULL, NULL, 0, "<Branch>"}, + {N_("/_File/_Add mailbox..."), NULL, add_mailbox_cb, 0, NULL}, + {N_("/_File/_Update folder tree"), NULL, update_folderview_cb, 0, NULL}, + {N_("/_File/_Folder"), NULL, NULL, 0, "<Branch>"}, + {N_("/_File/_Folder/Create _new folder..."), + NULL, new_folder_cb, 0, NULL}, + {N_("/_File/_Folder/_Rename folder..."),NULL, rename_folder_cb, 0, NULL}, + {N_("/_File/_Folder/_Delete folder"), NULL, delete_folder_cb, 0, NULL}, + {N_("/_File/_Import mbox file..."), NULL, import_mbox_cb, 0, NULL}, + {N_("/_File/Empty _trash"), NULL, empty_trash_cb, 0, NULL}, + {N_("/_File/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_File/_Save as..."), NULL, save_as_cb, 0, NULL}, + {N_("/_File/_Print..."), "<alt>P", print_cb, 0, NULL}, + {N_("/_File/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_File/_Close"), "<alt>W", app_exit_cb, 0, NULL}, + {N_("/_File/E_xit"), "<alt>Q", app_exit_cb, 0, NULL}, + + {N_("/_Edit"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Edit/_Copy"), "<control>C", copy_cb, 0, NULL}, + {N_("/_Edit/Select _all"), "<control>A", allsel_cb, 0, NULL}, + {N_("/_Edit/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Edit/_Search"), "<control>S", summary_search_cb, 0, NULL}, + + {N_("/_View"), NULL, NULL, 0, "<Branch>"}, + {N_("/_View/_Folder tree"), NULL, toggle_folder_cb, 0, "<ToggleItem>"}, + {N_("/_View/_Message view"), NULL, toggle_message_cb, 0, "<ToggleItem>"}, + {N_("/_View/_Toolbar"), NULL, NULL, 0, "<Branch>"}, + {N_("/_View/_Toolbar/Icon _and text"), NULL, toggle_toolbar_cb, TOOLBAR_BOTH, "<RadioItem>"}, + {N_("/_View/_Toolbar/_Icon"), NULL, toggle_toolbar_cb, TOOLBAR_ICON, "/View/Toolbar/Icon and text"}, + {N_("/_View/_Toolbar/_Text"), NULL, toggle_toolbar_cb, TOOLBAR_TEXT, "/View/Toolbar/Icon and text"}, + {N_("/_View/_Toolbar/_Non-display"), NULL, toggle_toolbar_cb, TOOLBAR_NONE, "/View/Toolbar/Icon and text"}, + {N_("/_View/_Status bar"), NULL, toggle_statusbar_cb, 0, "<ToggleItem>"}, + {N_("/_View/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_View/Separate f_older tree"), NULL, separate_widget_cb, SEPARATE_FOLDER, "<ToggleItem>"}, + {N_("/_View/Separate m_essage view"), NULL, separate_widget_cb, SEPARATE_MESSAGE, "<ToggleItem>"}, + {N_("/_View/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_View/_Code set"), NULL, NULL, 0, "<Branch>"}, + {N_("/_View/_Code set/_Auto detect"), + NULL, set_charset_cb, C_AUTO, "<RadioItem>"}, + +#define CODESET_SEPARATOR \ + {N_("/_View/_Code set/---"), NULL, NULL, 0, "<Separator>"} +#define CODESET_ACTION(action) \ + NULL, set_charset_cb, action, "/View/Code set/Auto detect" + + {N_("/_View/_Code set/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_View/_Code set/7bit ascii (US-ASC_II)"), + CODESET_ACTION(C_US_ASCII)}, + +#if HAVE_LIBJCONV + {N_("/_View/_Code set/Unicode (_UTF-8)"), + CODESET_ACTION(C_UTF_8)}, + CODESET_SEPARATOR, +#endif + {N_("/_View/_Code set/Western European (ISO-8859-_1)"), + CODESET_ACTION(C_ISO_8859_1)}, + CODESET_SEPARATOR, +#if HAVE_LIBJCONV + {N_("/_View/_Code set/Central European (ISO-8859-_2)"), + CODESET_ACTION(C_ISO_8859_2)}, + CODESET_SEPARATOR, + {N_("/_View/_Code set/_Baltic (ISO-8859-13)"), + CODESET_ACTION(C_ISO_8859_13)}, + {N_("/_View/_Code set/Baltic (ISO-8859-_4)"), + CODESET_ACTION(C_ISO_8859_4)}, + CODESET_SEPARATOR, + {N_("/_View/_Code set/Greek (ISO-8859-_7)"), + CODESET_ACTION(C_ISO_8859_7)}, + CODESET_SEPARATOR, + {N_("/_View/_Code set/Turkish (ISO-8859-_9)"), + CODESET_ACTION(C_ISO_8859_9)}, + CODESET_SEPARATOR, + {N_("/_View/_Code set/Cyrillic (ISO-8859-_5)"), + CODESET_ACTION(C_ISO_8859_5)}, + {N_("/_View/_Code set/Cyrillic (KOI8-_R)"), + CODESET_ACTION(C_KOI8_R)}, + {N_("/_View/_Code set/Cyrillic (Windows-1251)"), + CODESET_ACTION(C_CP1251)}, + CODESET_SEPARATOR, +#endif + {N_("/_View/_Code set/Japanese (ISO-2022-_JP)"), + CODESET_ACTION(C_ISO_2022_JP)}, +#if HAVE_LIBJCONV + {N_("/_View/_Code set/Japanese (ISO-2022-JP-2)"), + CODESET_ACTION(C_ISO_2022_JP_2)}, +#endif + {N_("/_View/_Code set/Japanese (_EUC-JP)"), + CODESET_ACTION(C_EUC_JP)}, + {N_("/_View/_Code set/Japanese (_Shift__JIS)"), + CODESET_ACTION(C_SHIFT_JIS)}, +#if HAVE_LIBJCONV + CODESET_SEPARATOR, + {N_("/_View/_Code set/Simplified Chinese (_GB2312)"), + CODESET_ACTION(C_GB2312)}, + {N_("/_View/_Code set/Traditional Chinese (_Big5)"), + CODESET_ACTION(C_BIG5)}, + {N_("/_View/_Code set/Traditional Chinese (EUC-_TW)"), + CODESET_ACTION(C_EUC_TW)}, + {N_("/_View/_Code set/Chinese (ISO-2022-_CN)"), + CODESET_ACTION(C_ISO_2022_CN)}, + CODESET_SEPARATOR, + {N_("/_View/_Code set/Korean (EUC-_KR)"), + CODESET_ACTION(C_EUC_KR)}, + {N_("/_View/_Code set/Korean (ISO-2022-KR)"), + CODESET_ACTION(C_ISO_2022_KR)}, +#endif + +#undef CODESET_SEPARATOR +#undef CODESET_ACTION + + {N_("/_Message"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Message/Rece_ive new mail"), "<alt>I", inc_mail_cb, 0, NULL}, + {N_("/_Message/Receive from _all accounts"), + "<shift><alt>I", inc_all_account_mail_cb, 0, NULL}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/Send queued messa_ges"), + NULL, send_queue_cb, 0, NULL}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/Compose _new message"), "<alt>N", compose_cb, 0, NULL}, + {N_("/_Message/_Reply"), "<alt>R", reply_cb, COMPOSE_REPLY, NULL}, + {N_("/_Message/Reply to a_ll"), "<shift><alt>R", reply_cb, COMPOSE_REPLY_TO_ALL, NULL}, + {N_("/_Message/_Forward"), "<control>F", reply_cb, COMPOSE_FORWARD, NULL}, + {N_("/_Message/Forward as an a_ttachment"), + "<shift><control>F", reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/M_ove..."), "<alt>O", move_to_cb, 0, NULL}, + {N_("/_Message/_Copy..."), NULL, copy_to_cb, 0, NULL}, + {N_("/_Message/_Delete"), "<alt>D", delete_cb, 0, NULL}, + {N_("/_Message/_Mark"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Message/_Mark/_Mark"), NULL, mark_cb, 0, NULL}, + {N_("/_Message/_Mark/_Unmark"), NULL, unmark_cb, 0, NULL}, + {N_("/_Message/_Mark/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/_Mark/Mark as unr_ead"), NULL, mark_as_unread_cb, 0, NULL}, + {N_("/_Message/_Mark/Mark it as _being read"), + NULL, mark_as_read_cb, 0, NULL}, + {N_("/_Message/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Message/Open in new _window"), "<shift><control>N", open_msg_cb, 0, NULL}, + {N_("/_Message/View _source"), "<control>U", view_source_cb, 0, NULL}, + {N_("/_Message/Show all _header"), "<control>H", header_window_show_cb, 0, NULL}, + {N_("/_Message/Re_edit"), NULL, reedit_cb, 0, NULL}, + + {N_("/_Summary"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Summary/_Delete duplicated messages"), + NULL, delete_duplicated_cb, 0, NULL}, + {N_("/_Summary/_Filter messages"), NULL, filter_cb, 0, NULL}, + {N_("/_Summary/E_xecute"), "<alt>X", execute_summary_cb, 0, NULL}, + {N_("/_Summary/_Update"), "<alt>U", update_summary_cb, 0, NULL}, + {N_("/_Summary/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Summary/_Prev message"), NULL, prev_cb, 0, NULL}, + {N_("/_Summary/_Next message"), NULL, next_cb, 0, NULL}, + {N_("/_Summary/N_ext unread message"), NULL, next_unread_cb, 0, NULL}, + {N_("/_Summary/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Summary/_Go to other folder"), "<alt>G", goto_folder_cb, 0, NULL}, + {N_("/_Summary/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Summary/_Sort"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Summary/_Sort/Sort by _number"), NULL, sort_summary_cb, SORT_BY_NUMBER, NULL}, + {N_("/_Summary/_Sort/Sort by s_ize"), NULL, sort_summary_cb, SORT_BY_SIZE, NULL}, + {N_("/_Summary/_Sort/Sort by _date"), NULL, sort_summary_cb, SORT_BY_DATE, NULL}, + {N_("/_Summary/_Sort/Sort by _from"), NULL, sort_summary_cb, SORT_BY_FROM, NULL}, + {N_("/_Summary/_Sort/Sort by _subject"),NULL, sort_summary_cb, SORT_BY_SUBJECT, NULL}, + {N_("/_Summary/_Sort/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Summary/_Sort/_Attract by subject"), + NULL, attract_by_subject_cb, 0, NULL}, + {N_("/_Summary/_Thread view"), "<control>T", thread_cb, 0, NULL}, + {N_("/_Summary/Unt_hread view"), "<shift><control>T", thread_cb, 1, NULL}, + {N_("/_Summary/Set display _item..."), NULL, set_display_item_cb, 0, NULL}, + + {N_("/_Tool"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Tool/_Address book"), "<alt>A", addressbook_open_cb, 0, NULL}, + {N_("/_Tool/_Log window"), "<alt>L", log_window_show_cb, 0, NULL}, + + {N_("/_Configuration"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Configuration/_Common preferences..."), + NULL, prefs_common_open_cb, 0, NULL}, + {N_("/_Configuration/_Filter setting..."), + NULL, prefs_filter_open_cb, 0, NULL}, + {N_("/_Configuration/_Preferences per account..."), + NULL, prefs_account_open_cb, 0, NULL}, + {N_("/_Configuration/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Configuration/Create _new account..."), + NULL, new_account_cb, 0, NULL}, + {N_("/_Configuration/_Edit accounts..."), + NULL, account_edit_open, 0, NULL}, + {N_("/_Configuration/C_hange current account"), + NULL, NULL, 0, "<Branch>"}, + + {N_("/_Help"), NULL, NULL, 0, "<LastBranch>"}, + {N_("/_Help/_Manual"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Help/_Manual/_English"), NULL, NULL, MANUAL_LANG_EN, NULL}, + {N_("/_Help/_Manual/_Japanese"), NULL, manual_open_cb, MANUAL_LANG_JA, NULL}, + {N_("/_Help/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Help/_About"), NULL, about_show, 0, NULL} +}; + +MainWindow *main_window_create(SeparateType type) +{ + MainWindow *mainwin; + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *menubar; + GtkWidget *handlebox; + GtkWidget *vbox_body; + GtkWidget *hbox_stat; + GtkWidget *statusbar; + GtkWidget *ac_button; + GtkWidget *ac_label; + + FolderView *folderview; + SummaryView *summaryview; + MessageView *messageview; + GdkColormap *colormap; + GdkColor color[5]; + gboolean success[5]; + guint n_menu_entries; + GtkItemFactory *ifactory; + GtkWidget *ac_menu; + GtkWidget *menuitem; + gint i; + + debug_print(_("Creating main window...\n")); + mainwin = g_new0(MainWindow, 1); + + /* main window */ + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), PROG_VERSION); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(main_window_close_cb), mainwin); + gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + gtk_widget_realize(window); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_widget_show(vbox); + gtk_container_add(GTK_CONTAINER(window), vbox); + + /* menu bar */ + n_menu_entries = sizeof(mainwin_entries) / sizeof(mainwin_entries[0]); + menubar = menubar_create(window, mainwin_entries, + n_menu_entries, "<Main>", mainwin); + gtk_widget_show(menubar); + gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, TRUE, 0); + + handlebox = gtk_handle_box_new(); + gtk_widget_show(handlebox); + gtk_box_pack_start(GTK_BOX(vbox), handlebox, FALSE, FALSE, 0); + + main_window_toolbar_create(mainwin, handlebox); + + /* vbox that contains body */ + vbox_body = gtk_vbox_new(FALSE, BORDER_WIDTH); + gtk_widget_show(vbox_body); + gtk_container_set_border_width(GTK_CONTAINER(vbox_body), BORDER_WIDTH); + gtk_box_pack_start(GTK_BOX(vbox), vbox_body, TRUE, TRUE, 0); + + hbox_stat = gtk_hbox_new(FALSE, 2); + gtk_box_pack_end(GTK_BOX(vbox_body), hbox_stat, FALSE, FALSE, 0); + + statusbar = statusbar_create(); + gtk_box_pack_start(GTK_BOX(hbox_stat), statusbar, TRUE, TRUE, 0); + + ac_button = gtk_button_new(); + gtk_button_set_relief(GTK_BUTTON(ac_button), GTK_RELIEF_NONE); + GTK_WIDGET_UNSET_FLAGS(ac_button, GTK_CAN_FOCUS); + gtk_widget_set_usize(ac_button, -1, 1); + gtk_box_pack_end(GTK_BOX(hbox_stat), ac_button, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(ac_button), "button_press_event", + GTK_SIGNAL_FUNC(ac_label_button_pressed), mainwin); + + ac_label = gtk_label_new(""); + gtk_container_add(GTK_CONTAINER(ac_button), ac_label); + + gtk_widget_show_all(hbox_stat); + + /* create views */ + mainwin->folderview = folderview = folderview_create(); + mainwin->summaryview = summaryview = summary_create(); + mainwin->messageview = messageview = messageview_create(); + mainwin->headerwin = header_window_create(); + mainwin->logwin = log_window_create(); + + folderview->mainwin = mainwin; + folderview->summaryview = summaryview; + + summaryview->mainwin = mainwin; + summaryview->folderview = folderview; + summaryview->messageview = messageview; + summaryview->headerwin = mainwin->headerwin; + summaryview->window = window; + + messageview->mainwin = mainwin; + + mainwin->window = window; + mainwin->vbox = vbox; + mainwin->menubar = menubar; + mainwin->handlebox = handlebox; + mainwin->vbox_body = vbox_body; + mainwin->hbox_stat = hbox_stat; + mainwin->statusbar = statusbar; + mainwin->ac_button = ac_button; + mainwin->ac_label = ac_label; + + /* set context IDs for status bar */ + mainwin->mainwin_cid = gtk_statusbar_get_context_id + (GTK_STATUSBAR(statusbar), "Main Window"); + mainwin->folderview_cid = gtk_statusbar_get_context_id + (GTK_STATUSBAR(statusbar), "Folder View"); + mainwin->summaryview_cid = gtk_statusbar_get_context_id + (GTK_STATUSBAR(statusbar), "Summary View"); + + /* allocate colors for summary view and folder view */ + summaryview->color_marked.red = summaryview->color_marked.green = 0; + summaryview->color_marked.blue = (guint16)65535; + + summaryview->color_dim.red = summaryview->color_dim.green = + summaryview->color_dim.blue = COLOR_DIM; + + summaryview->color_normal.red = summaryview->color_normal.green = + summaryview->color_normal.blue = 0; + + folderview->color_new.red = (guint16)55000; + folderview->color_new.green = folderview->color_new.blue = 15000; + + folderview->color_normal.red = folderview->color_normal.green = + folderview->color_normal.blue = 0; + + color[0] = summaryview->color_marked; + color[1] = summaryview->color_dim; + color[2] = summaryview->color_normal; + color[3] = folderview->color_new; + color[4] = folderview->color_normal; + + colormap = gdk_window_get_colormap(window->window); + gdk_colormap_alloc_colors(colormap, color, 5, FALSE, TRUE, success); + for (i = 0; i < 5; i++) { + if (success[i] == FALSE) + g_warning(_("MainWindow: color allocation %d failed\n"), i); + } + + debug_print(_("done.\n")); + + main_window_set_widgets(mainwin, type); + + /* set menu items */ + ifactory = gtk_item_factory_from_widget(menubar); + menuitem = gtk_item_factory_get_item + (ifactory, "/View/Code set/Auto detect"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); + + switch (prefs_common.toolbar_style) { + case TOOLBAR_NONE: + menuitem = gtk_item_factory_get_item + (ifactory, "/View/Toolbar/Non-display"); + break; + case TOOLBAR_ICON: + menuitem = gtk_item_factory_get_item + (ifactory, "/View/Toolbar/Icon"); + break; + case TOOLBAR_TEXT: + menuitem = gtk_item_factory_get_item + (ifactory, "/View/Toolbar/Text"); + break; + case TOOLBAR_BOTH: + menuitem = gtk_item_factory_get_item + (ifactory, "/View/Toolbar/Icon and text"); + } + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), TRUE); + + gtk_widget_hide(mainwin->hbox_stat); + menuitem = gtk_item_factory_get_item(ifactory, "/View/Status bar"); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(menuitem), + prefs_common.show_statusbar); + + menu_set_sensitive(ifactory, "/Summary/Thread view", + prefs_common.enable_thread ? FALSE : TRUE); + menu_set_sensitive(ifactory, "/Summary/Unthread view", + prefs_common.enable_thread ? TRUE : FALSE); + menu_set_sensitive(ifactory, "/Help/Manual/English", FALSE); + + /* set account selection menu */ + ac_menu = gtk_item_factory_get_widget + (ifactory, "/Configuration/Change current account"); + mainwin->ac_menu = ac_menu; + + main_window_set_toolbar_sensitive(mainwin, FALSE); + + /* show main window */ + gtk_widget_set_uposition(mainwin->window, + prefs_common.mainwin_x, + prefs_common.mainwin_y); + gtk_widget_set_usize(window, prefs_common.mainwin_width, + prefs_common.mainwin_height); + gtk_widget_show(mainwin->window); + + /* initialize views */ + folderview_init(folderview); + summary_init(summaryview); + messageview_init(messageview); + header_window_init(mainwin->headerwin); + log_window_init(mainwin->logwin); + + mainwin->cursor_count = 0; + + if (!watch_cursor) + watch_cursor = gdk_cursor_new(GDK_WATCH); + + mainwin_list = g_list_append(mainwin_list, mainwin); + + return mainwin; +} + +void main_window_cursor_wait(MainWindow *mainwin) +{ + if (mainwin->cursor_count == 0) + gdk_window_set_cursor(mainwin->window->window, watch_cursor); + + mainwin->cursor_count++; + + gdk_flush(); +} + +void main_window_cursor_normal(MainWindow *mainwin) +{ + if (mainwin->cursor_count) + mainwin->cursor_count--; + + if (mainwin->cursor_count == 0) + gdk_window_set_cursor(mainwin->window->window, NULL); + + gdk_flush(); +} + +void main_window_reflect_prefs_all(void) +{ + GList *cur; + MainWindow *mainwin; + + for (cur = mainwin_list; cur != NULL; cur = cur->next) { + mainwin = (MainWindow *)cur->data; + + main_window_show_cur_account(mainwin); + if (cur_account) { + gtk_widget_set_sensitive(mainwin->get_btn, TRUE); + gtk_widget_set_sensitive(mainwin->getall_btn, TRUE); + } else { + gtk_widget_set_sensitive(mainwin->get_btn, FALSE); + gtk_widget_set_sensitive(mainwin->getall_btn, FALSE); + } + + summary_change_display_item(mainwin->summaryview); + headerview_set_visibility(mainwin->messageview->headerview, + prefs_common.display_header_pane); + } +} + +void main_window_set_account_menu(GList *account_list) +{ + GList *cur, *cur_ac, *cur_item; + GtkWidget *menuitem; + MainWindow *mainwin; + PrefsAccount *ac_prefs; + + for (cur = mainwin_list; cur != NULL; cur = cur->next) { + mainwin = (MainWindow *)cur->data; + + /* destroy all previous menu item */ + cur_item = GTK_MENU_SHELL(mainwin->ac_menu)->children; + while (cur_item != NULL) { + GList *next = cur_item->next; + gtk_widget_destroy(GTK_WIDGET(cur_item->data)); + cur_item = next; + } + + for (cur_ac = account_list; cur_ac != NULL; + cur_ac = cur_ac->next) { + ac_prefs = (PrefsAccount *)cur_ac->data; + + menuitem = gtk_menu_item_new_with_label + (ac_prefs->account_name + ? ac_prefs->account_name : _("Untitled")); + gtk_widget_show(menuitem); + gtk_menu_append(GTK_MENU(mainwin->ac_menu), menuitem); + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", + GTK_SIGNAL_FUNC(account_menu_cb), + ac_prefs); + } + } +} + +static void main_window_show_cur_account(MainWindow *mainwin) +{ + gchar *buf; + gchar *ac_name; + + ac_name = g_strdup(cur_account + ? (cur_account->account_name + ? cur_account->account_name : _("Untitled")) + : _("none")); + + if (cur_account) + buf = g_strdup_printf("%s - %s", ac_name, PROG_VERSION); + else + buf = g_strdup(PROG_VERSION); + gtk_window_set_title(GTK_WINDOW(mainwin->window), buf); + g_free(buf); + + buf = g_strdup_printf(_("Current account: %s"), ac_name); + gtk_label_set_text(GTK_LABEL(mainwin->ac_label), buf); + gtk_widget_queue_resize(mainwin->ac_button); + g_free(buf); + + g_free(ac_name); +} + +void main_window_separation_change(MainWindow *mainwin, SeparateType type) +{ + GtkWidget *folder_wid = GTK_WIDGET_PTR(mainwin->folderview); + GtkWidget *summary_wid = GTK_WIDGET_PTR(mainwin->summaryview); + GtkWidget *message_wid = GTK_WIDGET_PTR(mainwin->messageview); + + if (mainwin->type == type) return; + + /* remove widgets from those containers */ + gtk_widget_ref(folder_wid); + gtk_widget_ref(summary_wid); + gtk_widget_ref(message_wid); + gtk_container_remove + (GTK_CONTAINER(folder_wid->parent), folder_wid); + gtk_container_remove + (GTK_CONTAINER(summary_wid->parent), summary_wid); + gtk_container_remove + (GTK_CONTAINER(message_wid->parent), message_wid); + + /* clean containers */ + switch (mainwin->type) { + case SEPARATE_NONE: + gtk_widget_destroy(mainwin->win.sep_none.hpaned); + break; + case SEPARATE_FOLDER: + gtk_widget_destroy(mainwin->win.sep_folder.vpaned); + gtk_widget_destroy(mainwin->win.sep_folder.folderwin); + break; + case SEPARATE_MESSAGE: + gtk_widget_destroy(mainwin->win.sep_message.hpaned); + gtk_widget_destroy(mainwin->win.sep_message.messagewin); + break; + case SEPARATE_BOTH: + gtk_widget_destroy(mainwin->win.sep_both.messagewin); + gtk_widget_destroy(mainwin->win.sep_both.folderwin); + break; + } + + gtk_widget_hide(mainwin->window); + main_window_set_widgets(mainwin, type); + gtk_widget_show(mainwin->window); + + gtk_widget_unref(folder_wid); + gtk_widget_unref(summary_wid); + gtk_widget_unref(message_wid); +} + +void main_window_get_size(MainWindow *mainwin) +{ + GtkAllocation *allocation; + + allocation = &(GTK_WIDGET_PTR(mainwin->summaryview)->allocation); + + prefs_common.summaryview_width = allocation->width; + + if (mainwin->summaryview->msg_is_toggled_on) + prefs_common.summaryview_height = allocation->height; + + prefs_common.mainview_width = allocation->width; + + allocation = &mainwin->window->allocation; + + prefs_common.mainview_height = allocation->height; + prefs_common.mainwin_width = allocation->width; + prefs_common.mainwin_height = allocation->height; + + allocation = &(GTK_WIDGET_PTR(mainwin->folderview)->allocation); + + prefs_common.folderview_width = allocation->width; + prefs_common.folderview_height = allocation->height; +} + +void main_window_get_position(MainWindow *mainwin) +{ + gint x, y; + + gtkut_widget_get_uposition(mainwin->window, &x, &y); + + prefs_common.mainview_x = x; + prefs_common.mainview_y = y; + prefs_common.mainwin_x = x; + prefs_common.mainwin_y = y; + + debug_print(_("window position: x = %d, y = %d\n"), x, y); +} + +void main_window_empty_trash(MainWindow *mainwin, gboolean confirm) +{ + GList *list; + + if (confirm) { + if (alertpanel(_("Empty trash"), + _("Empty all messages in trash?"), + _("Yes"), _("No"), NULL) != G_ALERTDEFAULT) + return; + } + + procmsg_empty_trash(); + + for (list = folder_get_list(); list != NULL; list = list->next) { + Folder *folder; + + folder = list->data; + if (folder->trash) { + folder_item_scan(folder->trash); + folderview_update_item(folder->trash, TRUE); + } + } + + if (mainwin->summaryview->folder_item && + mainwin->summaryview->folder_item->stype == F_TRASH) + gtk_widget_grab_focus(mainwin->folderview->ctree); +} + +void main_window_add_mailbox(MainWindow *mainwin) +{ + gchar *path; + Folder *folder; + + path = input_dialog(_("Add mailbox"), + _("Input the location of mailbox.\n" + "If the existing mailbox is specified, it will be\n" + "scanned automatically."), + "Mail"); + if (!path) return; + if (folder_find_from_path(path)) { + alertpanel_error(_("The mailbox `%s' already exists."), path); + g_free(path); + return; + } + if (!strcmp(path, "Mail")) + folder = folder_new(F_MH, _("Mailbox"), path); + else + folder = folder_new(F_MH, g_basename(path), path); + g_free(path); + + if (folder->create_tree(folder) < 0) { + alertpanel_error(_("Creation of the mailbox failed.\n" + "Maybe some files already exist, or you don't have the permission to write there.")); + folder_destroy(folder); + return; + } + + folder_add(folder); + folder_set_ui_func(folder, scan_tree_func, mainwin); + folder->scan_tree(folder); + folder_set_ui_func(folder, NULL, NULL); + + folderview_set(mainwin->folderview); +} + +void main_window_set_toolbar_sensitive(MainWindow *mainwin, gboolean sensitive) +{ + gtk_widget_set_sensitive(mainwin->reply_btn, sensitive); + gtk_widget_set_sensitive(mainwin->replyall_btn, sensitive); + gtk_widget_set_sensitive(mainwin->fwd_btn, sensitive); + gtk_widget_set_sensitive(mainwin->exec_btn, sensitive); + gtk_widget_set_sensitive(mainwin->next_btn, sensitive); + + if (!mainwin->summaryview->folder_item || + mainwin->summaryview->folder_item->folder->type == F_NEWS) + gtk_widget_set_sensitive(mainwin->delete_btn, FALSE); + else + gtk_widget_set_sensitive(mainwin->delete_btn, sensitive); +} + +void main_window_set_menu_sensitive(MainWindow *mainwin, gint selection) +{ + GtkItemFactory *ifactory; + gboolean sens; + gboolean exec; + + ifactory = gtk_item_factory_from_widget(mainwin->menubar); + + if (selection == SUMMARY_SELECTED_SINGLE) + sens = TRUE; + else + sens = FALSE; + if (!mainwin->summaryview->folder_item || + mainwin->summaryview->folder_item->folder->type == F_NEWS) + exec = FALSE; + else + exec = TRUE; + + menu_set_sensitive(ifactory, "/File/Save as...", sens); + menu_set_sensitive(ifactory, "/Message/Reply", sens); + menu_set_sensitive(ifactory, "/Message/Reply to all", sens); + menu_set_sensitive(ifactory, "/Message/Forward", sens); + menu_set_sensitive(ifactory, "/Message/Forward as an attachment", sens); + menu_set_sensitive(ifactory, "/Message/Open in new window", sens); + menu_set_sensitive(ifactory, "/Message/Show all header", sens); + menu_set_sensitive(ifactory, "/Message/View source", sens); + if (sens && (!mainwin->summaryview->folder_item || + mainwin->summaryview->folder_item->stype != F_DRAFT)) + sens = FALSE; + menu_set_sensitive(ifactory, "/Message/Reedit", sens); + + if (selection == SUMMARY_SELECTED_SINGLE || + selection == SUMMARY_SELECTED_MULTIPLE) + sens = TRUE; + else + sens = FALSE; + + menu_set_sensitive(ifactory, "/File/Print..." , sens); + menu_set_sensitive(ifactory, "/Message/Move...", sens && exec); + menu_set_sensitive(ifactory, "/Message/Copy...", sens && exec); + menu_set_sensitive(ifactory, "/Message/Delete" , sens && exec); + menu_set_sensitive(ifactory, "/Message/Mark" , sens); + + if (selection != SUMMARY_NONE) + sens = TRUE; + else + sens = FALSE; + + menu_set_sensitive(ifactory, "/Summary/Delete duplicated messages", sens && exec); + menu_set_sensitive(ifactory, "/Summary/Filter messages", sens && exec); + menu_set_sensitive(ifactory, "/Summary/Execute", sens); + menu_set_sensitive(ifactory, "/Summary/Prev message", sens); + menu_set_sensitive(ifactory, "/Summary/Next message", sens); + menu_set_sensitive(ifactory, "/Summary/Next unread message", sens); + menu_set_sensitive(ifactory, "/Summary/Sort", sens); +} + +void main_window_popup(MainWindow *mainwin) +{ + gint x, y; + gint sx, sy; + GtkWidget *widget; + + gdk_window_get_origin(mainwin->window->window, &x, &y); + sx = gdk_screen_width(); + sy = gdk_screen_height(); + x %= sx; if (x < 0) x += sx; + y %= sy; if (y < 0) y += sy; + gdk_window_move(mainwin->window->window, x, y); + gdk_window_raise(mainwin->window->window); + + debug_print("window position: x = %d, y = %d\n", x, y); + + switch (mainwin->type) { + case SEPARATE_FOLDER: + widget = mainwin->win.sep_folder.folderwin; + gdk_window_get_origin(widget->window, &x, &y); + x %= sx; if (x < 0) x += sx; + y %= sy; if (y < 0) y += sy; + gdk_window_move(widget->window, x, y); + gdk_window_raise(widget->window); + break; + case SEPARATE_MESSAGE: + widget = mainwin->win.sep_message.messagewin; + gdk_window_get_origin(widget->window, &x, &y); + x %= sx; if (x < 0) x += sx; + y %= sy; if (y < 0) y += sy; + gdk_window_move(widget->window, x, y); + gdk_window_raise(widget->window); + break; + case SEPARATE_BOTH: + widget = mainwin->win.sep_both.folderwin; + gdk_window_get_origin(widget->window, &x, &y); + x %= sx; if (x < 0) x += sx; + y %= sy; if (y < 0) y += sy; + gdk_window_move(widget->window, x, y); + gdk_window_raise(widget->window); + widget = mainwin->win.sep_both.messagewin; + gdk_window_get_origin(widget->window, &x, &y); + x %= sx; if (x < 0) x += sx; + y %= sy; if (y < 0) y += sy; + gdk_window_move(widget->window, x, y); + gdk_window_raise(widget->window); + break; + default: + } +} + +static void main_window_set_widgets(MainWindow *mainwin, SeparateType type) +{ + GtkWidget *folderwin = NULL; + GtkWidget *messagewin = NULL; + GtkWidget *hpaned; + GtkWidget *vpaned; + GtkWidget *vbox_body = mainwin->vbox_body; + + debug_print(_("Setting widgets...")); + + /* create separated window(s) if needed */ + if (type & SEPARATE_FOLDER) { + folderwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_policy(GTK_WINDOW(folderwin), + TRUE, TRUE, FALSE); + gtk_widget_set_usize(folderwin, -1, + prefs_common.mainview_height); + gtk_container_set_border_width(GTK_CONTAINER(folderwin), + BORDER_WIDTH); + gtk_signal_connect(GTK_OBJECT(folderwin), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), + NULL); + } + if (type & SEPARATE_MESSAGE) { + messagewin = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_policy(GTK_WINDOW(messagewin), + TRUE, TRUE, FALSE); + gtk_widget_set_usize + (messagewin, prefs_common.mainview_width, + prefs_common.mainview_height + - prefs_common.summaryview_height + + DEFAULT_HEADERVIEW_HEIGHT); + gtk_container_set_border_width(GTK_CONTAINER(messagewin), + BORDER_WIDTH); + gtk_signal_connect(GTK_OBJECT(messagewin), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), + NULL); + } + + switch (type) { + case SEPARATE_NONE: + hpaned = gtk_hpaned_new(); + gtk_widget_show(hpaned); + gtk_box_pack_start(GTK_BOX(vbox_body), hpaned, TRUE, TRUE, 0); + gtk_paned_add1(GTK_PANED(hpaned), + GTK_WIDGET_PTR(mainwin->folderview)); + + vpaned = gtk_vpaned_new(); + if (mainwin->summaryview->msg_is_toggled_on) { + gtk_paned_add2(GTK_PANED(hpaned), vpaned); + gtk_paned_add1(GTK_PANED(vpaned), + GTK_WIDGET_PTR(mainwin->summaryview)); + } else { + gtk_paned_add2(GTK_PANED(hpaned), + GTK_WIDGET_PTR(mainwin->summaryview)); + gtk_widget_ref(vpaned); + } + gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->summaryview), + prefs_common.summaryview_width, + prefs_common.summaryview_height); + gtk_paned_add2(GTK_PANED(vpaned), + GTK_WIDGET_PTR(mainwin->messageview)); + gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->messageview), + prefs_common.mainview_width, -1); + gtk_widget_set_usize(mainwin->window, + prefs_common.folderview_width + + prefs_common.mainview_width, + prefs_common.mainwin_height); + gtk_widget_show_all(vpaned); + + mainwin->win.sep_none.hpaned = hpaned; + mainwin->win.sep_none.vpaned = vpaned; + break; + case SEPARATE_FOLDER: + vpaned = gtk_vpaned_new(); + if (mainwin->summaryview->msg_is_toggled_on) { + gtk_box_pack_start(GTK_BOX(vbox_body), vpaned, + TRUE, TRUE, 0); + gtk_paned_add1(GTK_PANED(vpaned), + GTK_WIDGET_PTR(mainwin->summaryview)); + } else { + gtk_box_pack_start(GTK_BOX(vbox_body), + GTK_WIDGET_PTR(mainwin->summaryview), + TRUE, TRUE, 0); + gtk_widget_ref(vpaned); + } + gtk_paned_add2(GTK_PANED(vpaned), + GTK_WIDGET_PTR(mainwin->messageview)); + gtk_widget_show_all(vpaned); + gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->summaryview), + prefs_common.summaryview_width, + prefs_common.summaryview_height); + gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->messageview), + prefs_common.mainview_width, -1); + gtk_widget_set_usize(mainwin->window, + prefs_common.mainview_width, + prefs_common.mainview_height); + + gtk_container_add(GTK_CONTAINER(folderwin), + GTK_WIDGET_PTR(mainwin->folderview)); + + mainwin->win.sep_folder.folderwin = folderwin; + mainwin->win.sep_folder.vpaned = vpaned; + + gtk_widget_show_all(folderwin); + break; + case SEPARATE_MESSAGE: + hpaned = gtk_hpaned_new(); + gtk_box_pack_start(GTK_BOX(vbox_body), hpaned, TRUE, TRUE, 0); + + gtk_paned_add1(GTK_PANED(hpaned), + GTK_WIDGET_PTR(mainwin->folderview)); + gtk_paned_add2(GTK_PANED(hpaned), + GTK_WIDGET_PTR(mainwin->summaryview)); + gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->summaryview), + prefs_common.summaryview_width, + prefs_common.summaryview_height); + gtk_widget_set_usize(mainwin->window, + prefs_common.folderview_width + + prefs_common.mainview_width, + prefs_common.mainwin_height); + gtk_widget_show_all(hpaned); + gtk_container_add(GTK_CONTAINER(messagewin), + GTK_WIDGET_PTR(mainwin->messageview)); + + mainwin->win.sep_message.messagewin = messagewin; + mainwin->win.sep_message.hpaned = hpaned; + + gtk_widget_show_all(messagewin); + break; + case SEPARATE_BOTH: + gtk_box_pack_start(GTK_BOX(vbox_body), + GTK_WIDGET_PTR(mainwin->summaryview), + TRUE, TRUE, 0); + gtk_widget_set_usize(GTK_WIDGET_PTR(mainwin->summaryview), + prefs_common.summaryview_width, + prefs_common.summaryview_height); + gtk_widget_set_usize(mainwin->window, + prefs_common.mainview_width, + prefs_common.mainwin_height); + gtk_container_add(GTK_CONTAINER(folderwin), + GTK_WIDGET_PTR(mainwin->folderview)); + gtk_container_add(GTK_CONTAINER(messagewin), + GTK_WIDGET_PTR(mainwin->messageview)); + + mainwin->win.sep_both.folderwin = folderwin; + mainwin->win.sep_both.messagewin = messagewin; + + gtk_widget_show_all(folderwin); + gtk_widget_show_all(messagewin); + break; + } + + mainwin->type = type; + + debug_print(_("done.\n")); +} + +#include "pixmaps/stock_mail_receive.xpm" +#include "pixmaps/stock_mail_receive_all.xpm" +#include "pixmaps/stock_mail_compose.xpm" +#include "pixmaps/stock_mail_reply.xpm" +#include "pixmaps/stock_mail_reply_to_all.xpm" +#include "pixmaps/stock_mail_forward.xpm" +#include "pixmaps/stock_mail_send.xpm" +#include "pixmaps/stock_preferences.xpm" +#include "pixmaps/stock_properties.xpm" +#include "pixmaps/stock_down_arrow.xpm" +#include "pixmaps/stock_close.xpm" +#include "pixmaps/stock_exec.xpm" + +#define CREATE_TOOLBAR_ICON(xpm_d) \ +{ \ + icon = gdk_pixmap_create_from_xpm_d(container->window, &mask, \ + &container->style->white, \ + xpm_d); \ + icon_wid = gtk_pixmap_new(icon, mask); \ +} + +static void main_window_toolbar_create(MainWindow *mainwin, + GtkWidget *container) +{ + GtkWidget *toolbar; + GdkPixmap *icon; + GdkBitmap *mask; + GtkWidget *icon_wid; + GtkWidget *get_btn; + GtkWidget *getall_btn; + GtkWidget *compose_btn; + GtkWidget *reply_btn; + GtkWidget *replyall_btn; + GtkWidget *fwd_btn; + GtkWidget *send_btn; + GtkWidget *prefs_btn; + GtkWidget *account_btn; + GtkWidget *next_btn; + GtkWidget *delete_btn; + GtkWidget *exec_btn; + + toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, + GTK_TOOLBAR_BOTH); + gtk_container_add(GTK_CONTAINER(container), toolbar); + gtk_container_set_border_width(GTK_CONTAINER(container), 2); + gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE); + gtk_toolbar_set_space_style(GTK_TOOLBAR(toolbar), + GTK_TOOLBAR_SPACE_LINE); + + CREATE_TOOLBAR_ICON(stock_mail_receive_xpm); + get_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Get"), + _("Incorporate new mail"), + "Get", + icon_wid, toolbar_inc_cb, mainwin); + CREATE_TOOLBAR_ICON(stock_mail_receive_all_xpm); + getall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Get all"), + _("Incorporate new mail of all accounts"), + "Get all", + icon_wid, + toolbar_inc_all_cb, + mainwin); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_mail_send_xpm); + send_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Send"), + _("Send queued message(s)"), + "Send", + icon_wid, + toolbar_send_cb, + mainwin); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_mail_compose_xpm); + compose_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Compose"), + _("Compose new message"), + "New", + icon_wid, + toolbar_compose_cb, + mainwin); + CREATE_TOOLBAR_ICON(stock_mail_reply_xpm); + reply_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Reply"), + _("Reply to the message"), + "Reply", + icon_wid, + toolbar_reply_cb, + mainwin); + CREATE_TOOLBAR_ICON(stock_mail_reply_to_all_xpm); + replyall_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Reply all"), + _("Reply to all"), + "Reply to all", + icon_wid, + toolbar_reply_to_all_cb, + mainwin); + CREATE_TOOLBAR_ICON(stock_mail_forward_xpm); + fwd_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Forward"), + _("Forward the message"), + "Fwd", + icon_wid, + toolbar_forward_cb, + mainwin); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_close_xpm); + delete_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Delete"), + _("Delete the message"), + "Delete", + icon_wid, + toolbar_delete_cb, + mainwin); + + CREATE_TOOLBAR_ICON(stock_exec_xpm); + exec_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Execute"), + _("Execute marked process"), + "Execute", + icon_wid, + toolbar_exec_cb, + mainwin); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_down_arrow_xpm); + next_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Next"), + _("Next unread message"), + "Next unread", + icon_wid, + toolbar_next_unread_cb, + mainwin); + + gtk_toolbar_append_space(GTK_TOOLBAR(toolbar)); + + CREATE_TOOLBAR_ICON(stock_preferences_xpm); + prefs_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Prefs"), + _("Common preference"), + "Prefs", + icon_wid, + toolbar_prefs_cb, + mainwin); + CREATE_TOOLBAR_ICON(stock_properties_xpm); + account_btn = gtk_toolbar_append_item(GTK_TOOLBAR(toolbar), + _("Account"), + _("Account setting"), + "Account", + icon_wid, + toolbar_account_cb, + mainwin); + gtk_signal_connect(GTK_OBJECT(account_btn), "button_press_event", + GTK_SIGNAL_FUNC(toolbar_account_button_pressed), + mainwin); + + mainwin->toolbar = toolbar; + mainwin->get_btn = get_btn; + mainwin->getall_btn = getall_btn; + mainwin->compose_btn = compose_btn; + mainwin->reply_btn = reply_btn; + mainwin->replyall_btn = replyall_btn; + mainwin->fwd_btn = fwd_btn; + mainwin->send_btn = send_btn; + mainwin->prefs_btn = prefs_btn; + mainwin->account_btn = account_btn; + mainwin->next_btn = next_btn; + mainwin->delete_btn = delete_btn; + mainwin->exec_btn = exec_btn; + + gtk_widget_show_all(toolbar); +} + +/* callback functions */ + +static void toolbar_inc_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + inc_mail_cb(mainwin, 0, NULL); +} + +static void toolbar_inc_all_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + inc_all_account_mail_cb(mainwin, 0, NULL); +} + +static void toolbar_send_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + send_queue_cb(mainwin, 0, NULL); +} + +static void toolbar_compose_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + compose_cb(mainwin, 0, NULL); +} + +static void toolbar_reply_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + reply_cb(mainwin, COMPOSE_REPLY, NULL); +} + +static void toolbar_reply_to_all_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + reply_cb(mainwin, COMPOSE_REPLY_TO_ALL, NULL); +} + +static void toolbar_forward_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + reply_cb(mainwin, COMPOSE_FORWARD, NULL); +} + +static void toolbar_delete_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + summary_delete(mainwin->summaryview); +} + +static void toolbar_exec_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + summary_execute(mainwin->summaryview); +} + +static void toolbar_next_unread_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + next_unread_cb(mainwin, 0, NULL); +} + +static void toolbar_prefs_cb (GtkWidget *widget, + gpointer data) +{ + prefs_common_open(); +} + +static void toolbar_account_cb (GtkWidget *widget, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + prefs_account_open_cb(mainwin, 0, NULL); +} + +static void toolbar_account_button_pressed(GtkWidget *widget, + GdkEventButton *event, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + if (!event) return; + if (event->button != 3) return; + + gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL, NULL, NULL, + event->button, event->time); +} + +static void ac_label_button_pressed(GtkWidget *widget, GdkEventButton *event, + gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + + if (!event) return; + + gtk_menu_popup(GTK_MENU(mainwin->ac_menu), NULL, NULL, NULL, NULL, + event->button, event->time); +} + +static gint main_window_close_cb(GtkWidget *widget, GdkEventAny *event, + gpointer data) +{ + app_exit_cb(data, 0, widget); + + return TRUE; +} + +static void add_mailbox_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + main_window_add_mailbox(mainwin); +} + +static void update_folderview_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_show(mainwin->summaryview, NULL, FALSE); + folderview_update_all(); +} + +static void new_folder_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + folderview_new_folder(mainwin->folderview); +} + +static void rename_folder_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + folderview_rename_folder(mainwin->folderview); +} + +static void delete_folder_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + folderview_delete_folder(mainwin->folderview); +} + +static void import_mbox_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + import_mbox(); +} + +static void empty_trash_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + main_window_empty_trash(mainwin, TRUE); +} + +static void save_as_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_save_as(mainwin->summaryview); +} + +static void print_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_print(mainwin->summaryview); +} + +static void app_exit_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + if (prefs_common.confirm_on_exit) { + if (alertpanel(_("Exit"), _("Exit this program?"), + _("OK"), _("Cancel"), NULL) != G_ALERTDEFAULT) + return; + } + + manage_window_focus_in(mainwin->window, NULL, NULL); + app_will_exit(widget, mainwin); +} + +static void toggle_folder_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + switch (mainwin->type) { + case SEPARATE_NONE: + case SEPARATE_MESSAGE: + break; + case SEPARATE_FOLDER: + if (GTK_CHECK_MENU_ITEM(widget)->active) + gtk_widget_show(mainwin->win.sep_folder.folderwin); + else + gtk_widget_hide(mainwin->win.sep_folder.folderwin); + break; + case SEPARATE_BOTH: + if (GTK_CHECK_MENU_ITEM(widget)->active) + gtk_widget_show(mainwin->win.sep_both.folderwin); + else + gtk_widget_hide(mainwin->win.sep_both.folderwin); + break; + } +} + +static void toggle_message_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + switch (mainwin->type) { + case SEPARATE_NONE: + case SEPARATE_FOLDER: + break; + case SEPARATE_MESSAGE: + if (GTK_CHECK_MENU_ITEM(widget)->active) + gtk_widget_show(mainwin->win.sep_message.messagewin); + else + gtk_widget_hide(mainwin->win.sep_message.messagewin); + break; + case SEPARATE_BOTH: + if (GTK_CHECK_MENU_ITEM(widget)->active) + gtk_widget_show(mainwin->win.sep_both.messagewin); + else + gtk_widget_hide(mainwin->win.sep_both.messagewin); + break; + } +} + +static void toggle_toolbar_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + switch ((ToolbarStyle)action) { + case TOOLBAR_NONE: + gtk_widget_hide(mainwin->handlebox); + case TOOLBAR_ICON: + gtk_toolbar_set_style(GTK_TOOLBAR(mainwin->toolbar), + GTK_TOOLBAR_ICONS); + break; + case TOOLBAR_TEXT: + gtk_toolbar_set_style(GTK_TOOLBAR(mainwin->toolbar), + GTK_TOOLBAR_TEXT); + break; + case TOOLBAR_BOTH: + gtk_toolbar_set_style(GTK_TOOLBAR(mainwin->toolbar), + GTK_TOOLBAR_BOTH); + break; + } + + if (action != TOOLBAR_NONE) { + gtk_widget_show(mainwin->handlebox); + gtk_widget_queue_resize(mainwin->handlebox); + } + + mainwin->toolbar_style = (ToolbarStyle)action; + prefs_common.toolbar_style = (ToolbarStyle)action; +} + +static void toggle_statusbar_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + if (GTK_CHECK_MENU_ITEM(widget)->active) { + gtk_widget_show(mainwin->hbox_stat); + prefs_common.show_statusbar = TRUE; + } else { + gtk_widget_hide(mainwin->hbox_stat); + prefs_common.show_statusbar = FALSE; + } +} + +static void separate_widget_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + SeparateType type; + + type = mainwin->type ^ action; + main_window_separation_change(mainwin, type); + + prefs_common.sep_folder = (type & SEPARATE_FOLDER) != 0; + prefs_common.sep_msg = (type & SEPARATE_MESSAGE) != 0; +} + +static void addressbook_open_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + addressbook_open(NULL); +} + +static void log_window_show_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + log_window_show(mainwin->logwin); +} + +static void inc_mail_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + inc_mail(mainwin); +} + +static void inc_all_account_mail_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + inc_all_account_mail(mainwin); +} + +static void send_queue_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + GList *list; + + if (procmsg_send_queue() < 0) + alertpanel_error(_("Sending queued message failed.")); + + statusbar_pop_all(); + + for (list = folder_get_list(); list != NULL; list = list->next) { + Folder *folder; + + folder = list->data; + if (folder->queue) { + folder_item_scan(folder->queue); + folderview_update_item(folder->queue, TRUE); + } + } +} + +static void compose_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + if (mainwin->summaryview->folder_item) + compose_new(mainwin->summaryview->folder_item->folder->account); + else + compose_new(NULL); +} + +static void reply_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mainwin->summaryview->ctree), + mainwin->summaryview->selected); + + if (!msginfo) return; + + switch (action) { + case COMPOSE_REPLY: + compose_reply(msginfo, prefs_common.reply_with_quote, FALSE); + break; + case COMPOSE_REPLY_TO_ALL: + compose_reply(msginfo, prefs_common.reply_with_quote, TRUE); + break; + case COMPOSE_FORWARD: + compose_forward(msginfo, FALSE); + break; + case COMPOSE_FORWARD_AS_ATTACH: + compose_forward(msginfo, TRUE); + break; + default: + compose_reply(msginfo, prefs_common.reply_with_quote, FALSE); + } + + summary_set_marks_selected(mainwin->summaryview); +} + +static void move_to_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_move_to(mainwin->summaryview); +} + +static void copy_to_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_copy_to(mainwin->summaryview); +} + +static void delete_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_delete(mainwin->summaryview); +} + +static void open_msg_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_open_msg(mainwin->summaryview); +} + +static void view_source_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_view_source(mainwin->summaryview); +} + +static void reedit_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_reedit(mainwin->summaryview); +} + +static void mark_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_mark(mainwin->summaryview); +} + +static void unmark_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_unmark(mainwin->summaryview); +} + +static void mark_as_unread_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_mark_as_unread(mainwin->summaryview); +} + +static void mark_as_read_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_mark_as_read(mainwin->summaryview); +} + +static void set_charset_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + const gchar *str; + + str = conv_get_charset_str((CharSet)action); + g_free(prefs_common.force_charset); + prefs_common.force_charset = str ? g_strdup(str) : NULL; + + summary_redisplay_msg(mainwin->summaryview); + + debug_print(_("forced charset: %s\n"), str ? str : "Auto-Detect"); +} + +static void thread_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + GtkItemFactory *ifactory; + + ifactory = gtk_item_factory_from_widget(widget); + + if (0 == action) { + summary_thread_build(mainwin->summaryview); + prefs_common.enable_thread = TRUE; + menu_set_sensitive(ifactory, "/Summary/Thread view", FALSE); + menu_set_sensitive(ifactory, "/Summary/Unthread view", TRUE); + } else { + summary_unthread(mainwin->summaryview); + prefs_common.enable_thread = FALSE; + menu_set_sensitive(ifactory, "/Summary/Thread view", TRUE); + menu_set_sensitive(ifactory, "/Summary/Unthread view", FALSE); + } +} + +static void set_display_item_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + prefs_summary_display_item_set(); +} + +static void sort_summary_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_sort(mainwin->summaryview, (SummarySortType)action); +} + +static void attract_by_subject_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_attract_by_subject(mainwin->summaryview); +} + +static void delete_duplicated_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_delete_duplicated(mainwin->summaryview); +} + +static void filter_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_filter(mainwin->summaryview); +} + +static void execute_summary_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_execute(mainwin->summaryview); +} + +static void update_summary_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + FolderItem *fitem; + FolderView *folderview = mainwin->folderview; + + if (!mainwin->summaryview->folder_item) return; + if (!folderview->opened) return; + + fitem = gtk_ctree_node_get_row_data(GTK_CTREE(folderview->ctree), + folderview->opened); + if (!fitem) return; + + summary_show(mainwin->summaryview, fitem, TRUE); +} + +static void prev_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_step(mainwin->summaryview, GTK_SCROLL_STEP_BACKWARD); +} + +static void next_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + summary_step(mainwin->summaryview, GTK_SCROLL_STEP_FORWARD); +} + +static void next_unread_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + summary_select_next_unread(mainwin->summaryview); +} + +static void goto_folder_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + FolderItem *to_folder; + + to_folder = foldersel_folder_sel(NULL); + + if (to_folder) + folderview_select(mainwin->folderview, to_folder); +} + +static void copy_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + messageview_copy_clipboard(mainwin->messageview); +} + +static void allsel_cb(MainWindow *mainwin, guint action, GtkWidget *widget) +{ + if (GTK_WIDGET_HAS_FOCUS(mainwin->summaryview->ctree)) + summary_select_all(mainwin->summaryview); + else if (mainwin->summaryview->msg_is_toggled_on && + GTK_WIDGET_HAS_FOCUS(mainwin->messageview->textview->text)) + messageview_select_all(mainwin->messageview); +} + +static void prefs_common_open_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + prefs_common_open(); +} + +static void prefs_filter_open_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + prefs_filter_open(); +} + +static void prefs_account_open_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + if (!cur_account) { + new_account_cb(mainwin, 0, widget); + } else { + gboolean prev_default = cur_account->is_default; + + prefs_account_open(cur_account); + if (!prev_default && cur_account->is_default) + account_set_as_default(cur_account); + account_save_config_all(); + account_set_menu(); + main_window_reflect_prefs_all(); + } +} + +static void new_account_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + account_edit_open(); + if (!compose_get_compose_list()) account_add(); +} + +static void account_menu_cb(GtkMenuItem *menuitem, gpointer data) +{ + cur_account = (PrefsAccount *)data; + main_window_reflect_prefs_all(); +} + +static void manual_open_cb(MainWindow *mainwin, guint action, + GtkWidget *widget) +{ + manual_open((ManualLang)action); +} + +static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + gchar *str; + + if (item->path) + str = g_strdup_printf(_("Scanning folder %s%c%s ..."), + LOCAL_FOLDER(folder)->rootpath, + G_DIR_SEPARATOR, + item->path); + else + str = g_strdup_printf(_("Scanning folder %s ..."), + LOCAL_FOLDER(folder)->rootpath); + + STATUSBAR_PUSH(mainwin, str); + STATUSBAR_POP(mainwin); + g_free(str); +} diff --git a/src/mainwindow.h b/src/mainwindow.h new file mode 100644 index 000000000..b7028fafa --- /dev/null +++ b/src/mainwindow.h @@ -0,0 +1,137 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifndef __MAINWINDOW_H__ +#define __MAINWINDOW_H__ + +#include <glib.h> + +typedef struct _MainWindow MainWindow; + +#include "folderview.h" +#include "summaryview.h" +#include "headerview.h" +#include "messageview.h" +#include "headerwindow.h" +#include "logwindow.h" + +typedef enum +{ + SEPARATE_NONE = 0, + SEPARATE_FOLDER = 1 << 0, + SEPARATE_MESSAGE = 1 << 1, + SEPARATE_BOTH = (SEPARATE_FOLDER | SEPARATE_MESSAGE) +} SeparateType; + +typedef enum +{ + TOOLBAR_NONE = 0, + TOOLBAR_ICON = 1, + TOOLBAR_TEXT = 2, + TOOLBAR_BOTH = 3 +} ToolbarStyle; + +struct _MainWindow +{ + SeparateType type; + + union CompositeWin { + struct + { + GtkWidget *hpaned; + GtkWidget *vpaned; + } sep_none; + struct { + GtkWidget *folderwin; + GtkWidget *vpaned; + } sep_folder; + struct { + GtkWidget *messagewin; + GtkWidget *hpaned; + } sep_message; + struct { + GtkWidget *folderwin; + GtkWidget *messagewin; + } sep_both; + } win; + + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *menubar; + + /* tool bar */ + GtkWidget *handlebox; + GtkWidget *toolbar; + GtkWidget *get_btn; + GtkWidget *getall_btn; + GtkWidget *compose_btn; + GtkWidget *reply_btn; + GtkWidget *replyall_btn; + GtkWidget *fwd_btn; + GtkWidget *send_btn; + GtkWidget *prefs_btn; + GtkWidget *account_btn; + GtkWidget *next_btn; + GtkWidget *delete_btn; + GtkWidget *exec_btn; + + /* body */ + GtkWidget *vbox_body; + GtkWidget *hbox_stat; + GtkWidget *statusbar; + GtkWidget *ac_button; + GtkWidget *ac_label; + GtkWidget *ac_menu; + + /* context IDs for status bar */ + gint mainwin_cid; + gint folderview_cid; + gint summaryview_cid; + + ToolbarStyle toolbar_style; + + guint cursor_count; + + FolderView *folderview; + SummaryView *summaryview; + MessageView *messageview; + HeaderWindow *headerwin; + LogWindow *logwin; +}; + +MainWindow *main_window_create (SeparateType type); +void main_window_cursor_wait (MainWindow *mainwin); +void main_window_cursor_normal (MainWindow *mainwin); +void main_window_reflect_prefs_all (void); +void main_window_set_account_menu (GList *account_list); +void main_window_separation_change (MainWindow *mainwin, + SeparateType type); +void main_window_get_size (MainWindow *mainwin); +void main_window_get_position (MainWindow *mainwin); +void main_window_empty_trash (MainWindow *mainwin, + gboolean confirm); +void main_window_add_mailbox (MainWindow *mainwin); + +void main_window_set_toolbar_sensitive (MainWindow *mainwin, + gboolean sensitive); +void main_window_set_menu_sensitive (MainWindow *mainwin, + gint selection); +void main_window_popup (MainWindow *mainwin); + +#endif /* __MAINWINDOW_H__ */ diff --git a/src/manage_window.c b/src/manage_window.c new file mode 100644 index 000000000..cb5a40fcc --- /dev/null +++ b/src/manage_window.c @@ -0,0 +1,58 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> + +#include "manage_window.h" +#include "utils.h" + +static GtkWidget *focus_window; + +gint manage_window_focus_in(GtkWidget *widget, GdkEventFocus *event, + gpointer data) +{ + debug_print("Focus in event: window: %08x\n", (guint)widget); + + focus_window = widget; + + return TRUE; +} + +gint manage_window_focus_out(GtkWidget *widget, GdkEventFocus *event, + gpointer data) +{ + debug_print("Focused window: %08x\n", (guint)focus_window); + debug_print("Focus out event: window: %08x\n", (guint)widget); + + if (focus_window == widget) + focus_window = NULL; + + return TRUE; +} + +void manage_window_set_transient(GtkWindow *window) +{ + debug_print("window = %08x, focus_window = %08x\n", + (guint)window, (guint)focus_window); + + if (window && focus_window) + gtk_window_set_transient_for(window, GTK_WINDOW(focus_window)); +} diff --git a/src/manage_window.h b/src/manage_window.h new file mode 100644 index 000000000..9ba02aed7 --- /dev/null +++ b/src/manage_window.h @@ -0,0 +1,36 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MANAGE_WINDOW_H__ +#define __MANAGE_WINDOW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> + +gint manage_window_focus_in (GtkWidget *widget, + GdkEventFocus *event, + gpointer data); +gint manage_window_focus_out (GtkWidget *widget, + GdkEventFocus *event, + gpointer data); + +void manage_window_set_transient (GtkWindow *window); + +#endif /* __MANAGE_WINDOW_H__ */ diff --git a/src/manual.c b/src/manual.c new file mode 100644 index 000000000..2f9535ebd --- /dev/null +++ b/src/manual.c @@ -0,0 +1,55 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <string.h> + +#include "prefs_common.h" +#include "manual.h" +#include "utils.h" + +void manual_open(ManualLang lang) +{ + gchar *lang_str; + gchar *file_uri; + + switch (lang) { + case MANUAL_LANG_EN: + lang_str = "en"; + break; + case MANUAL_LANG_JA: + lang_str = "ja"; + break; + default: + return; + } + + file_uri = g_strconcat("file://", MANUALDIR, + G_DIR_SEPARATOR_S, lang_str, G_DIR_SEPARATOR_S, + MANUAL_HTML_INDEX, NULL); + debug_print("Opening manual: %s\n", file_uri); + open_uri(file_uri, prefs_common.uri_cmd); + g_free(file_uri); +} diff --git a/src/manual.h b/src/manual.h new file mode 100644 index 000000000..f88e20345 --- /dev/null +++ b/src/manual.h @@ -0,0 +1,31 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MANUAL_H__ +#define __MANUAL_H__ + +typedef enum +{ + MANUAL_LANG_EN, + MANUAL_LANG_JA, +} ManualLang; + +void manual_open(ManualLang lang); + +#endif /* __MANUAL_H__ */ diff --git a/src/mbox.c b/src/mbox.c new file mode 100644 index 000000000..051ee5e66 --- /dev/null +++ b/src/mbox.c @@ -0,0 +1,426 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <unistd.h> +#include <string.h> +#include <fcntl.h> +#include <sys/file.h> +#include <ctype.h> +#include <time.h> + +#include "intl.h" +#include "mbox.h" +#include "procmsg.h" +#include "folder.h" +#include "filter.h" +#include "prefs_common.h" +#include "prefs_account.h" +#include "account.h" +#include "utils.h" + +#define MSGBUFSIZE 8192 + +#define FPUTS_TO_TMP_ABORT_IF_FAIL(s) \ +{ \ + if (fputs(s, tmp_fp) == EOF) { \ + g_warning(_("can't write to temporary file\n")); \ + fclose(tmp_fp); \ + fclose(mbox_fp); \ + unlink(tmp_file); \ + return -1; \ + } \ +} + +gint proc_mbox(FolderItem *dest, const gchar *mbox, GHashTable *folder_table) +{ + FILE *mbox_fp; + gchar buf[MSGBUFSIZE], from_line[MSGBUFSIZE]; + gchar *tmp_file; + gint msgs = 0; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(mbox != NULL, -1); + + debug_print(_("Getting messages from %s into %s...\n"), mbox, dest->path); + + if ((mbox_fp = fopen(mbox, "r")) == NULL) { + FILE_OP_ERROR(mbox, "fopen"); + return -1; + } + + /* ignore empty lines on the head */ + do { + if (fgets(buf, sizeof(buf), mbox_fp) == NULL) { + g_warning(_("can't read mbox file.\n")); + fclose(mbox_fp); + return -1; + } + } while (buf[0] == '\n' || buf[0] == '\r'); + + if (strncmp(buf, "From ", 5) != 0) { + g_warning(_("invalid mbox format: %s\n"), mbox); + fclose(mbox_fp); + return -1; + } + + strcpy(from_line, buf); + if (fgets(buf, sizeof(buf), mbox_fp) == NULL) { + g_warning(_("malformed mbox: %s\n"), mbox); + fclose(mbox_fp); + return -1; + } + + tmp_file = get_tmp_file(); + + do { + FILE *tmp_fp; + FolderItem *dropfolder; + gchar *startp, *endp, *rpath; + gint empty_line; + gint val; + gboolean is_next_msg = FALSE; + + if ((tmp_fp = fopen(tmp_file, "w")) == NULL) { + FILE_OP_ERROR(tmp_file, "fopen"); + g_warning(_("can't open temporary file\n")); + fclose(mbox_fp); + return -1; + } + if (change_file_mode_rw(tmp_fp, tmp_file) < 0) + FILE_OP_ERROR(tmp_file, "chmod"); + + /* convert unix From into Return-Path */ + startp = from_line + 5; + endp = strchr(startp, ' '); + if (endp == NULL) + rpath = g_strdup(startp); + else + rpath = g_strndup(startp, endp - startp); + g_strstrip(rpath); + g_snprintf(from_line, sizeof(from_line), + "Return-Path: %s\n", rpath); + g_free(rpath); + + FPUTS_TO_TMP_ABORT_IF_FAIL(from_line); + FPUTS_TO_TMP_ABORT_IF_FAIL(buf); + from_line[0] = '\0'; + + empty_line = 0; + + while (fgets(buf, sizeof(buf), mbox_fp) != NULL) { + if (buf[0] == '\n' || buf[0] == '\r') { + empty_line++; + buf[0] = '\0'; + continue; + } + + /* From separator */ + while (!strncmp(buf, "From ", 5)) { + strcpy(from_line, buf); + if (fgets(buf, sizeof(buf), mbox_fp) == NULL) { + buf[0] = '\0'; + break; + } + + if (is_header_line(buf)) { + is_next_msg = TRUE; + break; + } else if (!strncmp(buf, "From ", 5)) { + continue; + } else if (!strncmp(buf, ">From ", 6)) { + g_memmove(buf, buf + 1, strlen(buf)); + is_next_msg = TRUE; + break; + } else { + g_warning(_("unescaped From found:\n%s"), + from_line); + break; + } + } + if (is_next_msg) break; + + if (empty_line > 0) { + while (empty_line--) + FPUTS_TO_TMP_ABORT_IF_FAIL("\n"); + empty_line = 0; + } + + if (from_line[0] != '\0') { + FPUTS_TO_TMP_ABORT_IF_FAIL(from_line); + from_line[0] = '\0'; + } + + if (buf[0] != '\0') { + if (!strncmp(buf, ">From ", 6)) { + FPUTS_TO_TMP_ABORT_IF_FAIL(buf + 1); + } else + FPUTS_TO_TMP_ABORT_IF_FAIL(buf); + + buf[0] = '\0'; + } + } + + if (empty_line > 0) { + while (--empty_line) + FPUTS_TO_TMP_ABORT_IF_FAIL("\n"); + } + + if (fclose(tmp_fp) == EOF) { + FILE_OP_ERROR(tmp_file, "fclose"); + g_warning(_("can't write to temporary file\n")); + fclose(mbox_fp); + unlink(tmp_file); + return -1; + } + + if (folder_table) { + dropfolder = filter_get_dest_folder + (prefs_common.fltlist, tmp_file); + if (!dropfolder || + !strcmp(dropfolder->path, FILTER_NOT_RECEIVE)) + dropfolder = dest; + val = GPOINTER_TO_INT(g_hash_table_lookup + (folder_table, dropfolder)); + if (val == 0) { + folder_item_scan(dropfolder); + g_hash_table_insert(folder_table, dropfolder, + GINT_TO_POINTER(1)); + } + } else + dropfolder = dest; + + if (folder_item_add_msg(dropfolder, tmp_file) < 0) { + fclose(mbox_fp); + unlink(tmp_file); + return -1; + } + + msgs++; + } while (from_line[0] != '\0'); + + fclose(mbox_fp); + debug_print(_("%d messages found.\n"), msgs); + + return msgs; +} + +gint lock_mbox(const gchar *base, LockType type) +{ + gint retval = 0; + + if (type == LOCK_FILE) { + gchar *lockfile, *locklink; + gint retry = 0; + FILE *lockfp; + + lockfile = g_strdup_printf("%s.%d", base, getpid()); + if ((lockfp = fopen(lockfile, "w")) == NULL) { + FILE_OP_ERROR(lockfile, "fopen"); + g_warning(_("can't create lock file %s\n"), lockfile); + g_warning(_("use 'flock' instead of 'file' if possible.\n")); + g_free(lockfile); + return -1; + } + + fprintf(lockfp, "%d\n", getpid()); + fclose(lockfp); + + locklink = g_strconcat(base, ".lock", NULL); + while (link(lockfile, locklink) < 0) { + FILE_OP_ERROR(lockfile, "link"); + if (retry >= 5) { + g_warning(_("can't create %s\n"), lockfile); + unlink(lockfile); + g_free(lockfile); + return -1; + } + if (retry == 0) + g_warning(_("mailbox is owned by another" + " process, waiting...\n")); + retry++; + sleep(5); + } + unlink(lockfile); + g_free(lockfile); + } else if (type == LOCK_FLOCK) { + gint lockfd; + +#if HAVE_FLOCK + if ((lockfd = open(base, O_RDONLY)) < 0) { +#else + if ((lockfd = open(base, O_RDWR)) < 0) { +#endif + FILE_OP_ERROR(base, "open"); + return -1; + } +#if HAVE_FLOCK + if (flock(lockfd, LOCK_EX|LOCK_NB) < 0) { + perror("flock"); +#else +#if HAVE_LOCKF + if (lockf(lockfd, F_TLOCK, 0) < 0) { + perror("lockf"); +#else + { +#endif +#endif /* HAVE_FLOCK */ + g_warning(_("can't lock %s\n"), base); + if (close(lockfd) < 0) + perror("close"); + return -1; + } + retval = lockfd; + } else { + g_warning(_("invalid lock type\n")); + return -1; + } + + return retval; +} + +gint unlock_mbox(const gchar *base, gint fd, LockType type) +{ + if (type == LOCK_FILE) { + gchar *lockfile; + + lockfile = g_strconcat(base, ".lock", NULL); + if (unlink(lockfile) < 0) { + FILE_OP_ERROR(lockfile, "unlink"); + g_free(lockfile); + return -1; + } + g_free(lockfile); + + return 0; + } else if (type == LOCK_FLOCK) { +#if HAVE_FLOCK + if (flock(fd, LOCK_UN) < 0) { + perror("flock"); +#else +#if HAVE_LOCKF + if (lockf(fd, F_ULOCK, 0) < 0) { + perror("lockf"); +#else + { +#endif +#endif /* HAVE_FLOCK */ + g_warning(_("can't unlock %s\n"), base); + if (close(fd) < 0) + perror("close"); + return -1; + } + + if (close(fd) < 0) { + perror("close"); + return -1; + } + + return 0; + } + + g_warning(_("invalid lock type\n")); + return -1; +} + +gint copy_mbox(const gchar *src, const gchar *dest) +{ + return copy_file(src, dest); +} + +void empty_mbox(const gchar *mbox) +{ + if (truncate(mbox, 0) < 0) { + FILE *fp; + + FILE_OP_ERROR(mbox, "truncate"); + if ((fp = fopen(mbox, "w")) == NULL) { + FILE_OP_ERROR(mbox, "fopen"); + g_warning(_("can't truncate mailbox to zero.\n")); + return; + } + fclose(fp); + } +} + +/* read all messages in SRC, and store them into one MBOX file. */ +gint export_mbox(FolderItem *src, const gchar *mbox) +{ + GSList *mlist = NULL; + GSList *cur; + MsgInfo *msginfo; + FILE *msg_fp; + FILE *mbox_fp; + gchar buf[BUFFSIZE]; + + g_return_val_if_fail(src != NULL, -1); + g_return_val_if_fail(src->folder != NULL, -1); + g_return_val_if_fail(mbox != NULL, -1); + + debug_print(_("Exporting messages from %s into %s...\n"), + src->path, mbox); + + mlist = src->folder->get_msg_list(src->folder, src, TRUE); + if (!mlist) return 0; + + if ((mbox_fp = fopen(mbox, "w")) == NULL) { + FILE_OP_ERROR(mbox, "fopen"); + return -1; + } + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + + msg_fp = procmsg_open_message(msginfo); + if (!msg_fp) continue; + + strncpy2(buf, + msginfo->from ? msginfo->from : + cur_account && cur_account->address ? + cur_account->address : "unknown", + sizeof(buf)); + extract_address(buf); + + fprintf(mbox_fp, "From %s %s", + buf, ctime(&msginfo->date_t)); + + while (fgets(buf, sizeof(buf), msg_fp) != NULL) { + if (!strncmp(buf, "From ", 5)) + fputc('>', mbox_fp); + fputs(buf, mbox_fp); + } + fputc('\n', mbox_fp); + + fclose(msg_fp); + procmsg_msginfo_free(msginfo); + } + + g_slist_free(mlist); + + fclose(mbox_fp); + + return 0; +} diff --git a/src/mbox.h b/src/mbox.h new file mode 100644 index 000000000..969b07129 --- /dev/null +++ b/src/mbox.h @@ -0,0 +1,47 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MBOX_H__ +#define __MBOX_H__ + +#include <glib.h> + +#include "folder.h" + +typedef enum { + LOCK_FILE, + LOCK_FLOCK +} LockType; + +gint proc_mbox (FolderItem *dest, + const gchar *mbox, + GHashTable *folder_table); +gint lock_mbox (const gchar *base, + LockType type); +gint unlock_mbox (const gchar *base, + gint fd, + LockType type); +gint copy_mbox (const gchar *src, + const gchar *dest); +void empty_mbox (const gchar *mbox); + +gint export_mbox (FolderItem *src, + const gchar *mbox); + +#endif /* __MBOX_H__ */ diff --git a/src/md5.h b/src/md5.h new file mode 100644 index 000000000..f9deb4efb --- /dev/null +++ b/src/md5.h @@ -0,0 +1,42 @@ +/* MD5.H - header file for MD5C.C + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + */ + +#ifndef MD5_H__ +#define MD5_H__ + +#include "md5global.h" + +/* MD5 context. */ +typedef struct { + UINT4 state[4]; /* state (ABCD) */ + UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ + unsigned char buffer[64]; /* input buffer */ +} MD5_CTX; + +void MD5Init PROTO_LIST ((MD5_CTX *)); +void MD5Update PROTO_LIST + ((MD5_CTX *, unsigned char *, unsigned int)); +void MD5Final PROTO_LIST ((unsigned char [16], MD5_CTX *)); +#endif /* MD5_H__ */ diff --git a/src/md5c.c b/src/md5c.c new file mode 100644 index 000000000..92b5d44aa --- /dev/null +++ b/src/md5c.c @@ -0,0 +1,334 @@ +/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + */ + +#include "config.h" +#include "md5global.h" +#include "md5.h" + +/* Constants for MD5Transform routine. + */ +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + +static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); +static void Encode PROTO_LIST + ((unsigned char *, UINT4 *, unsigned int)); +static void Decode PROTO_LIST + ((UINT4 *, unsigned char *, unsigned int)); +static void MD5_memcpy PROTO_LIST ((POINTER, POINTER, unsigned int)); +static void MD5_memset PROTO_LIST ((POINTER, int, unsigned int)); + +static unsigned char PADDING[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* F, G, H and I are basic MD5 functions. + */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits. + */ +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. +Rotation is separate from addition to prevent recomputation. + */ +#define FF(a, b, c, d, x, s, ac) { \ + (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define GG(a, b, c, d, x, s, ac) { \ + (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define HH(a, b, c, d, x, s, ac) { \ + (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define II(a, b, c, d, x, s, ac) { \ + (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } + +/* MD5 initialization. Begins an MD5 operation, writing a new context. + */ +void MD5Init (context) +MD5_CTX *context; /* context */ +{ + context->count[0] = context->count[1] = 0; + /* Load magic initialization constants. +*/ + context->state[0] = 0x67452301; + context->state[1] = 0xefcdab89; + context->state[2] = 0x98badcfe; + context->state[3] = 0x10325476; +} + +/* MD5 block update operation. Continues an MD5 message-digest + operation, processing another message block, and updating the + context. + */ +void MD5Update (context, input, inputLen) +MD5_CTX *context; /* context */ +unsigned char *input; /* input block */ +unsigned int inputLen; /* length of input block */ +{ + unsigned int i, index, partLen; + + /* Compute number of bytes mod 64 */ + index = (unsigned int)((context->count[0] >> 3) & 0x3F); + + /* Update number of bits */ + if ((context->count[0] += ((UINT4)inputLen << 3)) + < ((UINT4)inputLen << 3)) + context->count[1]++; + context->count[1] += ((UINT4)inputLen >> 29); + + partLen = 64 - index; + + /* Transform as many times as possible. +*/ + if (inputLen >= partLen) { + MD5_memcpy + ((POINTER)&context->buffer[index], (POINTER)input, partLen); + MD5Transform (context->state, context->buffer); + + for (i = partLen; i + 63 < inputLen; i += 64) + MD5Transform (context->state, &input[i]); + + index = 0; + } + else + i = 0; + + /* Buffer remaining input */ + MD5_memcpy + ((POINTER)&context->buffer[index], (POINTER)&input[i], + inputLen-i); +} + +/* MD5 finalization. Ends an MD5 message-digest operation, writing the + the message digest and zeroizing the context. + */ +void MD5Final (digest, context) +unsigned char digest[16]; /* message digest */ +MD5_CTX *context; /* context */ +{ + unsigned char bits[8]; + unsigned int index, padLen; + + /* Save number of bits */ + Encode (bits, context->count, 8); + + /* Pad out to 56 mod 64. +*/ + index = (unsigned int)((context->count[0] >> 3) & 0x3f); + padLen = (index < 56) ? (56 - index) : (120 - index); + MD5Update (context, PADDING, padLen); + + /* Append length (before padding) */ + MD5Update (context, bits, 8); + /* Store state in digest */ + Encode (digest, context->state, 16); + + /* Zeroize sensitive information. +*/ + MD5_memset ((POINTER)context, 0, sizeof (*context)); +} + +/* MD5 basic transformation. Transforms state based on block. + */ +static void MD5Transform (state, block) +UINT4 state[4]; +unsigned char block[64]; +{ + UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; + + Decode (x, block, 64); + + /* Round 1 */ + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ + FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ + FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ + FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ + FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ + FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ + GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ + GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ + GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ + GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ + GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ + HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ + HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ + HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ + HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ + HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ + II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ + II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ + II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ + II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ + II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ + II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ + II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + + /* Zeroize sensitive information. +*/ + MD5_memset ((POINTER)x, 0, sizeof (x)); +} + +/* Encodes input (UINT4) into output (unsigned char). Assumes len is + a multiple of 4. + */ +static void Encode (output, input, len) +unsigned char *output; +UINT4 *input; +unsigned int len; +{ + unsigned int i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) { + output[j] = (unsigned char)(input[i] & 0xff); + output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); + output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); + output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); + } +} + +/* Decodes input (unsigned char) into output (UINT4). Assumes len is + a multiple of 4. + */ +static void Decode (output, input, len) +UINT4 *output; +unsigned char *input; +unsigned int len; +{ + unsigned int i, j; + + for (i = 0, j = 0; j < len; i++, j += 4) + output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | + (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); +} + +/* Note: Replace "for loop" with standard memcpy if possible. + */ + +static void MD5_memcpy (output, input, len) +POINTER output; +POINTER input; +unsigned int len; +{ + unsigned int i; + + for (i = 0; i < len; i++) + output[i] = input[i]; +} + +/* Note: Replace "for loop" with standard memset if possible. + */ +static void MD5_memset (output, value, len) +POINTER output; +int value; +unsigned int len; +{ + unsigned int i; + + for (i = 0; i < len; i++) + ((char *)output)[i] = (char)value; +} diff --git a/src/md5global.h b/src/md5global.h new file mode 100644 index 000000000..14f6e44b3 --- /dev/null +++ b/src/md5global.h @@ -0,0 +1,41 @@ +/* + * For license terms, see the file COPYING in this directory. + * + * md5global.h Global declarations for MD5 module used by fetchmail + * + */ + +#ifndef MD5GLOBAL_H__ +#define MD5GLOBAL_H__ +/* GLOBAL.H - RSAREF types and constants + */ + +/* force prototypes on, we need ANSI C anyway */ +#ifndef PROTOTYPES +#define PROTOTYPES 1 +#endif + +/* POINTER defines a generic pointer type */ +typedef unsigned char *POINTER; + +/* UINT2 defines a two byte word */ +typedef unsigned short int UINT2; + +/* UINT4 defines a four byte word */ +#if SIZEOF_INT == 4 +typedef unsigned int UINT4; +#else +typedef unsigned long int UINT4; +#endif + +/* PROTO_LIST is defined depending on how PROTOTYPES is defined above. +If using PROTOTYPES, then PROTO_LIST returns the list, otherwise it + returns an empty list. + */ +#if PROTOTYPES +#define PROTO_LIST(list) list +#else +#define PROTO_LIST(list) () +#endif + +#endif /* MD5GLOBAL_H__ */ diff --git a/src/md5ify.c b/src/md5ify.c new file mode 100644 index 000000000..dc8b1a9ee --- /dev/null +++ b/src/md5ify.c @@ -0,0 +1,42 @@ +/* + * For license terms, see the file COPYING in this directory. + */ + +/*********************************************************************** + module: md5ify.c + project: fetchmail + programmer: Carl Harris, ceharris@mal.com + description: Simple interface to MD5 module. + + ***********************************************************************/ + +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif + +#include <stdio.h> +#include <string.h> + +#if defined(STDC_HEADERS) +#include <string.h> +#endif + +#include "md5.h" + +char * +MD5Digest (unsigned char *s) +{ + int i; + MD5_CTX context; + unsigned char digest[16]; + static char ascii_digest [33]; + + MD5Init(&context); + MD5Update(&context, s, strlen(s)); + MD5Final(digest, &context); + + for (i = 0; i < 16; i++) + sprintf(ascii_digest+2*i, "%02x", digest[i]); + + return(ascii_digest); +} diff --git a/src/md5ify.h b/src/md5ify.h new file mode 100644 index 000000000..ef2de23ec --- /dev/null +++ b/src/md5ify.h @@ -0,0 +1,6 @@ +#ifndef __MD5IFY_H__ +#define __MD5IFY_H__ + +char *MD5Digest(unsigned char *s); + +#endif __MD5IFY_H__ diff --git a/src/menu.c b/src/menu.c new file mode 100644 index 000000000..c585c966a --- /dev/null +++ b/src/menu.c @@ -0,0 +1,89 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkmenubar.h> +#include <gtk/gtkitemfactory.h> + +#include "intl.h" +#include "menu.h" + +static gchar *menu_translate(const gchar *path, gpointer data); + +GtkWidget *menubar_create(GtkWidget *window, GtkItemFactoryEntry *entries, + guint n_entries, const gchar *path, gpointer data) +{ + GtkItemFactory *factory; + GtkAccelGroup *accel_group; + + accel_group = gtk_accel_group_new(); + factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, path, accel_group); + gtk_item_factory_set_translate_func(factory, menu_translate, + NULL, NULL); + gtk_item_factory_create_items(factory, n_entries, entries, data); + gtk_accel_group_attach(accel_group, GTK_OBJECT(window)); + + return gtk_item_factory_get_widget(factory, path); +} + +GtkWidget *menu_create_items(GtkItemFactoryEntry *entries, + guint n_entries, const gchar *path, + GtkItemFactory **factory, gpointer data) +{ + *factory = gtk_item_factory_new(GTK_TYPE_MENU, path, NULL); + gtk_item_factory_set_translate_func(*factory, menu_translate, + NULL, NULL); + gtk_item_factory_create_items(*factory, n_entries, entries, data); + + return gtk_item_factory_get_widget(*factory, path); +} + +static gchar *menu_translate(const gchar *path, gpointer data) +{ + gchar *retval; + + retval = gettext(path); + + return retval; +} + +void menu_set_sensitive(GtkItemFactory *ifactory, const gchar *path, + gboolean sensitive) +{ + GtkWidget *widget; + + g_return_if_fail(ifactory != NULL); + + widget = gtk_item_factory_get_item(ifactory, path); + gtk_widget_set_sensitive(widget, sensitive); +} + +void menu_set_insensitive_all(GtkMenuShell *menu_shell) +{ + GList *cur; + + for (cur = menu_shell->children; cur != NULL; cur = cur->next) + gtk_widget_set_sensitive(GTK_WIDGET(cur->data), FALSE); +} diff --git a/src/menu.h b/src/menu.h new file mode 100644 index 000000000..fc2b3f1d6 --- /dev/null +++ b/src/menu.h @@ -0,0 +1,53 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MENU_H__ +#define __MENU_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkitemfactory.h> +#include <gtk/gtkmenushell.h> + +#define MENUITEM_ADD(menu, menuitem, label, data) \ +{ \ + menuitem = gtk_menu_item_new_with_label(label); \ + gtk_widget_show(menuitem); \ + gtk_menu_append(GTK_MENU(menu), menuitem); \ + if (data) \ + gtk_object_set_user_data(GTK_OBJECT(menuitem), \ + GINT_TO_POINTER(data)); \ +} + +GtkWidget *menubar_create (GtkWidget *window, + GtkItemFactoryEntry *entries, + guint n_entries, + const gchar *path, + gpointer data); +GtkWidget *menu_create_items (GtkItemFactoryEntry *entries, + guint n_entries, + const gchar *path, + GtkItemFactory **factory, + gpointer data); +void menu_set_sensitive (GtkItemFactory *ifactory, + const gchar *path, + gboolean sensitive); +void menu_set_insensitive_all (GtkMenuShell *menu_shell); + +#endif /* __MENU_H__ */ diff --git a/src/messageview.c b/src/messageview.c new file mode 100644 index 000000000..0aa958802 --- /dev/null +++ b/src/messageview.c @@ -0,0 +1,321 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkcontainer.h> +#include <gtk/gtkeditable.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtktext.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> + +#include "intl.h" +#include "main.h" +#include "messageview.h" +#include "headerview.h" +#include "textview.h" +#include "imageview.h" +#include "mimeview.h" +#include "procmsg.h" +#include "procheader.h" +#include "procmime.h" +#include "prefs_common.h" +#include "gtkutils.h" +#include "utils.h" +#include "rfc2015.h" + +static void messageview_change_view_type(MessageView *messageview, + MessageType type); +static void messageview_destroy_cb (GtkWidget *widget, + MessageView *messageview); +static void messageview_size_allocate_cb(GtkWidget *widget, + GtkAllocation *allocation); +static void key_pressed (GtkWidget *widget, + GdkEventKey *event, + MessageView *messageview); + +MessageView *messageview_create(void) +{ + MessageView *messageview; + GtkWidget *vbox; + HeaderView *headerview; + TextView *textview; + ImageView *imageview; + MimeView *mimeview; + + debug_print(_("Creating message view...\n")); + messageview = g_new0(MessageView, 1); + + messageview->type = MVIEW_TEXT; + + headerview = headerview_create(); + + textview = textview_create(); + textview->messageview = messageview; + + imageview = imageview_create(); + imageview->messageview = messageview; + + mimeview = mimeview_create(); + mimeview->textview = textview; + mimeview->imageview = imageview; + mimeview->messageview = messageview; + + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET_PTR(headerview), + FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET_PTR(textview), + TRUE, TRUE, 0); + + /* to remove without destroyed */ + gtk_widget_ref(GTK_WIDGET_PTR(textview)); + gtk_widget_ref(GTK_WIDGET_PTR(imageview)); + gtk_widget_ref(GTK_WIDGET_PTR(mimeview)); + + messageview->vbox = vbox; + messageview->new_window = FALSE; + messageview->window = NULL; + messageview->headerview = headerview; + messageview->textview = textview; + messageview->imageview = imageview; + messageview->mimeview = mimeview; + + return messageview; +} + +MessageView *messageview_create_with_new_window(void) +{ + GtkWidget *window; + MessageView *msgview; + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), "Message"); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); + gtk_widget_set_usize(window, prefs_common.msgwin_width, + prefs_common.msgwin_height); + + msgview = messageview_create(); + + gtk_signal_connect(GTK_OBJECT(window), "size_allocate", + GTK_SIGNAL_FUNC(messageview_size_allocate_cb), + msgview); + gtk_signal_connect(GTK_OBJECT(window), "destroy", + GTK_SIGNAL_FUNC(messageview_destroy_cb), msgview); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), msgview); + + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET_PTR(msgview)); + gtk_widget_grab_focus(msgview->textview->text); + gtk_widget_show_all(window); + + msgview->new_window = TRUE; + msgview->window = window; + + messageview_init(msgview); + + return msgview; +} + +void messageview_init(MessageView *messageview) +{ + headerview_init(messageview->headerview); + textview_init(messageview->textview); + imageview_init(messageview->imageview); + mimeview_init(messageview->mimeview); + //messageview_set_font(messageview); +} + +void messageview_show(MessageView *messageview, MsgInfo *msginfo) +{ + FILE *fp; + gchar *file; + MimeInfo *mimeinfo; + MsgInfo *tmpmsginfo; + + g_return_if_fail(msginfo != NULL); + +#if USE_GPGME + for (;;) { + if ((fp = procmsg_open_message(msginfo)) == NULL) return; + mimeinfo = procmime_scan_mime_header(fp); + if (!mimeinfo) break; + + if (!MSG_IS_ENCRYPTED(msginfo->flags) && + rfc2015_is_encrypted(mimeinfo)) { + MSG_SET_FLAGS(msginfo->flags, MSG_ENCRYPTED); + } + if (MSG_IS_ENCRYPTED(msginfo->flags) && + !msginfo->plaintext_file && + !msginfo->decryption_failed) { + /* This is an encrypted message but it has not yet + * been decrypted and there was no unsuccessful + * decryption attempt */ + rfc2015_decrypt_message(msginfo, mimeinfo, fp); + if (msginfo->plaintext_file && + !msginfo->decryption_failed) { + fclose(fp); + continue; + } + } + + break; + } +#else /* !USE_GPGME */ + if ((fp = procmsg_open_message(msginfo)) == NULL) return; + mimeinfo = procmime_scan_mime_header(fp); +#endif /* USE_GPGME */ + fclose(fp); + if (!mimeinfo) return; + + file = procmsg_get_message_file_path(msginfo); + g_return_if_fail(file != NULL); + + tmpmsginfo = procheader_parse(file, msginfo->flags, TRUE); + headerview_show(messageview->headerview, tmpmsginfo); + procmsg_msginfo_free(tmpmsginfo); + + if (mimeinfo->mime_type != MIME_TEXT) { + messageview_change_view_type(messageview, MVIEW_MIME); + mimeview_show_message(messageview->mimeview, mimeinfo, file); + } else { + messageview_change_view_type(messageview, MVIEW_TEXT); + textview_show_message(messageview->textview, mimeinfo, file); + procmime_mimeinfo_free(mimeinfo); + } + + g_free(file); +} + +static void messageview_change_view_type(MessageView *messageview, + MessageType type) +{ + TextView *textview = messageview->textview; + ImageView *imageview = messageview->imageview; + MimeView *mimeview = messageview->mimeview; + + if (messageview->type == type) return; + + if (type == MVIEW_MIME) { + gtk_container_remove + (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), + GTK_WIDGET_PTR(textview)); + gtk_box_pack_start(GTK_BOX(messageview->vbox), + GTK_WIDGET_PTR(mimeview), TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(textview)); + mimeview->type = MIMEVIEW_TEXT; + } else if (type == MVIEW_TEXT) { + gtk_container_remove + (GTK_CONTAINER(GTK_WIDGET_PTR(messageview)), + GTK_WIDGET_PTR(mimeview)); + + if (mimeview->vbox == GTK_WIDGET_PTR(textview)->parent) { + gtk_container_remove(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(textview)); + } else { + gtk_container_remove(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(imageview)); + } + + gtk_box_pack_start(GTK_BOX(messageview->vbox), + GTK_WIDGET_PTR(textview), TRUE, TRUE, 0); + } else + return; + + messageview->type = type; +} + +void messageview_clear(MessageView *messageview) +{ + messageview_change_view_type(messageview, MVIEW_TEXT); + headerview_clear(messageview->headerview); + textview_clear(messageview->textview); +} + +void messageview_destroy(MessageView *messageview) +{ + GtkWidget *textview = GTK_WIDGET_PTR(messageview->textview); + GtkWidget *imageview = GTK_WIDGET_PTR(messageview->imageview); + GtkWidget *mimeview = GTK_WIDGET_PTR(messageview->mimeview); + + headerview_destroy(messageview->headerview); + textview_destroy(messageview->textview); + imageview_destroy(messageview->imageview); + mimeview_destroy(messageview->mimeview); + + g_free(messageview); + + gtk_widget_unref(textview); + gtk_widget_unref(imageview); + gtk_widget_unref(mimeview); +} + +void messageview_quote_color_set(void) +{ +} + +void messageview_set_font(MessageView *messageview) +{ + textview_set_font(messageview->textview, NULL); +} + +void messageview_copy_clipboard(MessageView *messageview) +{ + if (messageview->type == MVIEW_TEXT) + gtk_editable_copy_clipboard + (GTK_EDITABLE(messageview->textview->text)); +} + +void messageview_select_all(MessageView *messageview) +{ + if (messageview->type == MVIEW_TEXT) + gtk_editable_select_region + (GTK_EDITABLE(messageview->textview->text), 0, -1); +} + +GtkWidget *messageview_get_text_widget(MessageView *messageview) +{ + return messageview->textview->text; +} + +static void messageview_destroy_cb(GtkWidget *widget, MessageView *messageview) +{ + messageview_destroy(messageview); +} + +static void messageview_size_allocate_cb(GtkWidget *widget, + GtkAllocation *allocation) +{ + g_return_if_fail(allocation != NULL); + + prefs_common.msgwin_width = allocation->width; + prefs_common.msgwin_height = allocation->height; +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, + MessageView *messageview) +{ + if (event && event->keyval == GDK_Escape && messageview->window) + gtk_widget_destroy(messageview->window); +} diff --git a/src/messageview.h b/src/messageview.h new file mode 100644 index 000000000..f17f418ea --- /dev/null +++ b/src/messageview.h @@ -0,0 +1,70 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MESSAGEVIEW_H__ +#define __MESSAGEVIEW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +typedef struct _MessageView MessageView; + +#include "mainwindow.h" +#include "headerview.h" +#include "textview.h" +#include "imageview.h" +#include "mimeview.h" +#include "procmsg.h" + +typedef enum +{ + MVIEW_TEXT, + MVIEW_MIME +} MessageType; + +struct _MessageView +{ + GtkWidget *vbox; + + MessageType type; + gboolean new_window; + GtkWidget *window; + + HeaderView *headerview; + TextView *textview; + ImageView *imageview; + MimeView *mimeview; + + MainWindow *mainwin; +}; + +MessageView *messageview_create (void); +MessageView *messageview_create_with_new_window (void); +void messageview_init (MessageView *messageview); +void messageview_show (MessageView *messageview, + MsgInfo *msginfo); +void messageview_clear (MessageView *messageview); +void messageview_destroy (MessageView *messageview); +void messageview_quote_color_set (void); +void messageview_set_font (MessageView *messageview); +void messageview_copy_clipboard (MessageView *messageview); +void messageview_select_all (MessageView *messageview); +GtkWidget *messageview_get_text_widget (MessageView *messageview); + +#endif /* __MESSAGEVIEW_H__ */ diff --git a/src/mh.c b/src/mh.c new file mode 100644 index 000000000..fd3259e53 --- /dev/null +++ b/src/mh.c @@ -0,0 +1,999 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <dirent.h> +#include <sys/stat.h> +#include <errno.h> + +#undef MEASURE_TIME + +#ifdef MEASURE_TIME +# include <sys/time.h> +#endif + +#include "intl.h" +#include "folder.h" +#include "mh.h" +#include "procmsg.h" +#include "procheader.h" +#include "utils.h" + +static GSList *mh_get_uncached_msgs (GHashTable *msg_table, + FolderItem *item); +static MsgInfo *mh_parse_msg (const gchar *file, + FolderItem *item); +static void mh_scan_tree_recursive (FolderItem *item); + +static gboolean mh_rename_folder_func (GNode *node, + gpointer data); + + +GSList *mh_get_msg_list(Folder *folder, FolderItem *item, gboolean use_cache) +{ + GSList *mlist; + GHashTable *msg_table; + gchar *path; + struct stat s; + gboolean scan_new = TRUE; +#ifdef MEASURE_TIME + struct timeval tv_before, tv_after, tv_result; + + gettimeofday(&tv_before, NULL); +#endif + + g_return_val_if_fail(item != NULL, NULL); + + path = folder_item_get_path(item); + if (stat(path, &s) < 0) { + FILE_OP_ERROR(path, "stat"); + } else { + if (item->mtime == s.st_mtime) { + debug_print("Folder is not modified.\n"); + scan_new = FALSE; + } else + item->mtime = s.st_mtime; + } + g_free(path); + + if (use_cache && !scan_new) { + mlist = procmsg_read_cache(item, FALSE); + if (!mlist) + mlist = mh_get_uncached_msgs(NULL, item); + } else if (use_cache) { + GSList *newlist; + + mlist = procmsg_read_cache(item, TRUE); + msg_table = procmsg_msg_hash_table_create(mlist); + + newlist = mh_get_uncached_msgs(msg_table, item); + if (msg_table) + g_hash_table_destroy(msg_table); + + mlist = g_slist_concat(mlist, newlist); + } else + mlist = mh_get_uncached_msgs(NULL, item); + + procmsg_set_flags(mlist, item); + +#ifdef MEASURE_TIME + gettimeofday(&tv_after, NULL); + + timersub(&tv_after, &tv_before, &tv_result); + g_print("mh_get_msg_list: %s: elapsed time: %ld.%06ld sec\n", + item->path, tv_result.tv_sec, tv_result.tv_usec); +#endif + + return mlist; +} + +gchar *mh_fetch_msg(Folder *folder, FolderItem *item, gint num) +{ + gchar *path; + gchar *file; + + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(num > 0 && num <= item->last_num, NULL); + + path = folder_item_get_path(item); + file = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL); + g_free(path); + if (!is_file_exist(file)) { + g_free(file); + return NULL; + } + + return file; +} + +gint mh_add_msg(Folder *folder, FolderItem *dest, const gchar *file) +{ + gchar *destpath; + gchar *destfile; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(file != NULL, -1); + + if (dest->last_num < 0) { + mh_scan_folder(folder, dest); + if (dest->last_num < 0) return -1; + } + + destpath = folder_item_get_path(dest); + g_return_val_if_fail(destpath != NULL, -1); + destfile = g_strdup_printf("%s%c%d", destpath, G_DIR_SEPARATOR, + dest->last_num + 1); + if (copy_file(file, destfile) < 0) { + g_warning(_("can't copy message %s to %s\n"), file, destfile); + g_free(destfile); + return -1; + } + + g_free(destfile); + dest->last_num++; + return dest->last_num; +} + +gint mh_move_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) +{ + gchar *destdir; + gchar *srcfile; + gchar *destfile; + FILE *fp; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msginfo != NULL, -1); + + if (msginfo->folder == dest) { + g_warning(_("the src folder is identical to the dest.\n")); + return -1; + } + + if (dest->last_num < 0) { + mh_scan_folder(folder, dest); + if (dest->last_num < 0) return -1; + } + + destdir = folder_item_get_path(dest); + if ((fp = procmsg_open_mark_file(destdir, TRUE)) == NULL) + g_warning(_("Can't open mark file.\n")); + + debug_print(_("Moving message %s%c%d to %s ...\n"), + msginfo->folder->path, G_DIR_SEPARATOR, + msginfo->msgnum, dest->path); + srcfile = procmsg_get_message_file_path(msginfo); + destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR, + dest->last_num + 1); + g_free(destdir); + + if (is_file_exist(destfile)) { + g_warning(_("%s already exists."), destfile); + g_free(srcfile); + g_free(destfile); + if (fp) fclose(fp); + return -1; + } + + if (rename(srcfile, destfile) < 0) { + if (EXDEV == errno) { + if (copy_file(srcfile, destfile) < 0) { + g_free(srcfile); + g_free(destfile); + return -1; + } + unlink(srcfile); + } else { + FILE_OP_ERROR(srcfile, "rename"); + g_free(srcfile); + g_free(destfile); + if (fp) fclose(fp); + return -1; + } + } + + g_free(srcfile); + g_free(destfile); + dest->last_num++; + + if (fp) { + MsgInfo newmsginfo; + + newmsginfo.msgnum = dest->last_num; + newmsginfo.flags = msginfo->flags; + if (dest->stype == F_OUTBOX || + dest->stype == F_QUEUE || + dest->stype == F_DRAFT || + dest->stype == F_TRASH) + MSG_UNSET_FLAGS(newmsginfo.flags, + MSG_NEW|MSG_UNREAD|MSG_DELETED); + + procmsg_write_flags(&newmsginfo, fp); + fclose(fp); + } + + return dest->last_num; +} + +gint mh_move_msgs_with_dest(Folder *folder, FolderItem *dest, GSList *msglist) +{ + gchar *destdir; + gchar *srcfile; + gchar *destfile; + FILE *fp; + GSList *cur; + MsgInfo *msginfo; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msglist != NULL, -1); + + if (dest->last_num < 0) { + mh_scan_folder(folder, dest); + if (dest->last_num < 0) return -1; + } + + destdir = folder_item_get_path(dest); + if ((fp = procmsg_open_mark_file(destdir, TRUE)) == NULL) + g_warning(_("Can't open mark file.\n")); + + for (cur = msglist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + + if (msginfo->folder == dest) { + g_warning(_("the src folder is identical to the dest.\n")); + continue; + } + debug_print(_("Moving message %s%c%d to %s ...\n"), + msginfo->folder->path, G_DIR_SEPARATOR, + msginfo->msgnum, dest->path); + + srcfile = procmsg_get_message_file_path(msginfo); + destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR, + dest->last_num + 1); + + if (is_file_exist(destfile)) { + g_warning(_("%s already exists."), destfile); + g_free(srcfile); + g_free(destfile); + break; + } + + if (rename(srcfile, destfile) < 0) { + if (EXDEV == errno) { + if (copy_file(srcfile, destfile) < 0) { + g_free(srcfile); + g_free(destfile); + break; + } + unlink(srcfile); + } else { + FILE_OP_ERROR(srcfile, "rename"); + g_free(srcfile); + g_free(destfile); + break; + } + } + + g_free(srcfile); + g_free(destfile); + dest->last_num++; + + if (fp) { + MsgInfo newmsginfo; + + newmsginfo.msgnum = dest->last_num; + newmsginfo.flags = msginfo->flags; + if (dest->stype == F_OUTBOX || + dest->stype == F_QUEUE || + dest->stype == F_DRAFT || + dest->stype == F_TRASH) + MSG_UNSET_FLAGS(newmsginfo.flags, + MSG_NEW|MSG_UNREAD|MSG_DELETED); + + procmsg_write_flags(&newmsginfo, fp); + } + } + + g_free(destdir); + if (fp) fclose(fp); + + return dest->last_num; +} + +gint mh_copy_msg(Folder *folder, FolderItem *dest, MsgInfo *msginfo) +{ + gchar *destdir; + gchar *srcfile; + gchar *destfile; + FILE *fp; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msginfo != NULL, -1); + + if (msginfo->folder == dest) { + g_warning(_("the src folder is identical to the dest.\n")); + return -1; + } + + if (dest->last_num < 0) { + mh_scan_folder(folder, dest); + if (dest->last_num < 0) return -1; + } + + destdir = folder_item_get_path(dest); + if ((fp = procmsg_open_mark_file(destdir, TRUE)) == NULL) + g_warning(_("Can't open mark file.\n")); + + debug_print(_("Copying message %s%c%d to %s ...\n"), + msginfo->folder->path, G_DIR_SEPARATOR, + msginfo->msgnum, dest->path); + srcfile = procmsg_get_message_file_path(msginfo); + destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR, + dest->last_num + 1); + g_free(destdir); + + if (is_file_exist(destfile)) { + g_warning(_("%s already exists."), destfile); + g_free(srcfile); + g_free(destfile); + if (fp) fclose(fp); + return -1; + } + + if (copy_file(srcfile, destfile) < 0) { + FILE_OP_ERROR(srcfile, "copy"); + g_free(srcfile); + g_free(destfile); + if (fp) fclose(fp); + return -1; + } + + g_free(srcfile); + g_free(destfile); + dest->last_num++; + + if (fp) { + MsgInfo newmsginfo; + + newmsginfo.msgnum = dest->last_num; + newmsginfo.flags = msginfo->flags; + if (dest->stype == F_OUTBOX || + dest->stype == F_QUEUE || + dest->stype == F_DRAFT || + dest->stype == F_TRASH) + MSG_UNSET_FLAGS(newmsginfo.flags, + MSG_NEW|MSG_UNREAD|MSG_DELETED); + procmsg_write_flags(&newmsginfo, fp); + fclose(fp); + } + + return dest->last_num; +} + +gint mh_copy_msgs_with_dest(Folder *folder, FolderItem *dest, GSList *msglist) +{ + gchar *destdir; + gchar *srcfile; + gchar *destfile; + FILE *fp; + GSList *cur; + MsgInfo *msginfo; + + g_return_val_if_fail(dest != NULL, -1); + g_return_val_if_fail(msglist != NULL, -1); + + if (dest->last_num < 0) { + mh_scan_folder(folder, dest); + if (dest->last_num < 0) return -1; + } + + destdir = folder_item_get_path(dest); + if ((fp = procmsg_open_mark_file(destdir, TRUE)) == NULL) + g_warning(_("Can't open mark file.\n")); + + for (cur = msglist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + + if (msginfo->folder == dest) { + g_warning(_("the src folder is identical to the dest.\n")); + continue; + } + debug_print(_("Copying message %s%c%d to %s ...\n"), + msginfo->folder->path, G_DIR_SEPARATOR, + msginfo->msgnum, dest->path); + + srcfile = procmsg_get_message_file_path(msginfo); + destfile = g_strdup_printf("%s%c%d", destdir, G_DIR_SEPARATOR, + dest->last_num + 1); + + if (is_file_exist(destfile)) { + g_warning(_("%s already exists."), destfile); + g_free(srcfile); + g_free(destfile); + break; + } + + if (copy_file(srcfile, destfile) < 0) { + FILE_OP_ERROR(srcfile, "copy"); + g_free(srcfile); + g_free(destfile); + break; + } + + g_free(srcfile); + g_free(destfile); + dest->last_num++; + + if (fp) { + MsgInfo newmsginfo; + + newmsginfo.msgnum = dest->last_num; + newmsginfo.flags = msginfo->flags; + if (dest->stype == F_OUTBOX || + dest->stype == F_QUEUE || + dest->stype == F_DRAFT || + dest->stype == F_TRASH) + MSG_UNSET_FLAGS(newmsginfo.flags, + MSG_NEW|MSG_UNREAD|MSG_DELETED); + procmsg_write_flags(&newmsginfo, fp); + } + } + + g_free(destdir); + if (fp) fclose(fp); + + return dest->last_num; +} + +gint mh_remove_msg(Folder *folder, FolderItem *item, gint num) +{ + gchar *file; + + g_return_val_if_fail(item != NULL, -1); + + file = mh_fetch_msg(folder, item, num); + g_return_val_if_fail(file != NULL, -1); + + if (unlink(file) < 0) { + FILE_OP_ERROR(file, "unlink"); + g_free(file); + return -1; + } + + g_free(file); + return 0; +} + +gint mh_remove_all_msg(Folder *folder, FolderItem *item) +{ + gchar *path; + DIR *dp; + struct dirent *d; + + g_return_val_if_fail(item != NULL, -1); + + path = folder_item_get_path(item); + g_return_val_if_fail(path != NULL, -1); + if (change_dir(path) < 0) { + g_free(path); + return -1; + } + g_free(path); + + if ((dp = opendir(".")) == NULL) { + FILE_OP_ERROR(item->path, "opendir"); + return -1; + } + + while ((d = readdir(dp)) != NULL) { + if (to_number(d->d_name) < 0) continue; + if (unlink(d->d_name) < 0) + FILE_OP_ERROR(d->d_name, "unlink"); + } + + closedir(dp); + return 0; +} + +gboolean mh_is_msg_changed(Folder *folder, FolderItem *item, MsgInfo *msginfo) +{ + struct stat s; + + if (stat(itos(msginfo->msgnum), &s) < 0 || + msginfo->size != s.st_size || + msginfo->mtime != s.st_mtime) + return TRUE; + + return FALSE; +} + +void mh_scan_folder(Folder *folder, FolderItem *item) +{ + gchar *path; + DIR *dp; + struct dirent *d; + struct stat s; + gint max = 0; + gint num; + gint n_msg = 0; + + g_return_if_fail(item != NULL); + + path = folder_item_get_path(item); + g_return_if_fail(path != NULL); + if (change_dir(path) < 0) { + g_free(path); + return; + } + g_free(path); + + if ((dp = opendir(".")) == NULL) { + FILE_OP_ERROR(item->path, "opendir"); + return; + } + + if (folder->ui_func) + folder->ui_func(folder, item, folder->ui_func_data); + + while ((d = readdir(dp)) != NULL) { + if ((num = to_number(d->d_name)) >= 0 && + stat(d->d_name, &s) == 0 && + S_ISREG(s.st_mode)) { + n_msg++; + if (max < num) + max = num; + } + } + + closedir(dp); + + if (n_msg == 0) + item->new = item->unread = item->total = 0; + else { + gint new, unread, total; + + procmsg_get_mark_sum(".", &new, &unread, &total); + if (n_msg > total) { + new += n_msg - total; + unread += n_msg - total; + } + item->new = new; + item->unread = unread; + item->total = n_msg; + } + + debug_print(_("Last number in dir %s = %d\n"), item->path, max); + item->last_num = max; +} + +void mh_scan_tree(Folder *folder) +{ + FolderItem *item; + gchar *rootpath; + + g_return_if_fail(folder != NULL); + + folder_tree_destroy(folder); + item = folder_item_new(folder->name, NULL); + item->folder = folder; + folder->node = g_node_new(item); + + rootpath = folder_item_get_path(item); + if (change_dir(rootpath) < 0) { + g_free(rootpath); + return; + } + g_free(rootpath); + + mh_scan_tree_recursive(item); +} + +#define MAKE_DIR_IF_NOT_EXIST(dir) \ +{ \ + if (!is_dir_exist(dir)) { \ + if (is_file_exist(dir)) { \ + g_warning(_("File `%s' already exists.\n" \ + "Can't create folder."), dir); \ + return -1; \ + } \ + if (mkdir(dir, S_IRWXU) < 0) { \ + FILE_OP_ERROR(dir, "mkdir"); \ + return -1; \ + } \ + if (chmod(dir, S_IRWXU) < 0) \ + FILE_OP_ERROR(dir, "chmod"); \ + } \ +} + +gint mh_create_tree(Folder *folder) +{ + gchar *rootpath; + + g_return_val_if_fail(folder != NULL, -1); + + CHDIR_RETURN_VAL_IF_FAIL(g_get_home_dir(), -1); + rootpath = LOCAL_FOLDER(folder)->rootpath; + MAKE_DIR_IF_NOT_EXIST(rootpath); + CHDIR_RETURN_VAL_IF_FAIL(rootpath, -1); + MAKE_DIR_IF_NOT_EXIST(INBOX_DIR); + MAKE_DIR_IF_NOT_EXIST(OUTBOX_DIR); + MAKE_DIR_IF_NOT_EXIST(QUEUE_DIR); + MAKE_DIR_IF_NOT_EXIST(DRAFT_DIR); + MAKE_DIR_IF_NOT_EXIST(TRASH_DIR); + + return 0; +} + +#undef MAKE_DIR_IF_NOT_EXIST + +FolderItem *mh_create_folder(Folder *folder, FolderItem *parent, + const gchar *name) +{ + gchar *path; + gchar *fullpath; + FolderItem *new_item; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(parent != NULL, NULL); + g_return_val_if_fail(name != NULL, NULL); + + path = folder_item_get_path(parent); + fullpath = g_strconcat(path, G_DIR_SEPARATOR_S, name, NULL); + g_free(path); + + if (mkdir(fullpath, S_IRWXU) < 0) { + FILE_OP_ERROR(fullpath, "mkdir"); + g_free(fullpath); + return NULL; + } + if (chmod(fullpath, S_IRWXU) < 0) + FILE_OP_ERROR(fullpath, "chmod"); + + g_free(fullpath); + + if (parent->path) + path = g_strconcat(parent->path, G_DIR_SEPARATOR_S, name, + NULL); + else + path = g_strdup(name); + new_item = folder_item_new(name, path); + folder_item_append(parent, new_item); + g_free(path); + + return new_item; +} + +gint mh_rename_folder(Folder *folder, FolderItem *item, const gchar *name) +{ + gchar *oldpath; + gchar *dirname; + gchar *newpath; + GNode *node; + gchar *paths[2]; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(item != NULL, -1); + g_return_val_if_fail(item->path != NULL, -1); + g_return_val_if_fail(name != NULL, -1); + + oldpath = folder_item_get_path(item); + dirname = g_dirname(oldpath); + newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, name, NULL); + g_free(dirname); + + if (rename(oldpath, newpath) < 0) { + FILE_OP_ERROR(oldpath, "rename"); + g_free(oldpath); + g_free(newpath); + return -1; + } + + g_free(oldpath); + g_free(newpath); + + if (strchr(item->path, G_DIR_SEPARATOR) != NULL) { + dirname = g_dirname(item->path); + newpath = g_strconcat(dirname, G_DIR_SEPARATOR_S, name, NULL); + g_free(dirname); + } else + newpath = g_strdup(name); + + g_free(item->name); + item->name = g_strdup(name); + + node = g_node_find(item->folder->node, G_PRE_ORDER, G_TRAVERSE_ALL, + item); + paths[0] = g_strdup(item->path); + paths[1] = newpath; + g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, + mh_rename_folder_func, paths); + + g_free(paths[0]); + g_free(paths[1]); + return 0; +} + +gint mh_remove_folder(Folder *folder, FolderItem *item) +{ + gchar *path; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(item != NULL, -1); + g_return_val_if_fail(item->path != NULL, -1); + + path = folder_item_get_path(item); + if (remove_dir_recursive(path) < 0) { + g_warning("can't remove directory `%s'\n", path); + g_free(path); + return -1; + } + + g_free(path); + folder_item_remove(item); + return 0; +} + + +static GSList *mh_get_uncached_msgs(GHashTable *msg_table, FolderItem *item) +{ + gchar *path; + DIR *dp; + struct dirent *d; + struct stat s; + GSList *newlist = NULL; + GSList *last = NULL; + MsgInfo *msginfo; + gint n_newmsg = 0; + gint num; + + g_return_val_if_fail(item != NULL, NULL); + + path = folder_item_get_path(item); + g_return_val_if_fail(path != NULL, NULL); + if (change_dir(path) < 0) { + g_free(path); + return NULL; + } + g_free(path); + + if ((dp = opendir(".")) == NULL) { + FILE_OP_ERROR(item->path, "opendir"); + return NULL; + } + + debug_print(_("\tSearching uncached messages... ")); + + if (msg_table) { + while ((d = readdir(dp)) != NULL) { + if ((num = to_number(d->d_name)) < 0) continue; + if (stat(d->d_name, &s) < 0) { + FILE_OP_ERROR(d->d_name, "stat"); + continue; + } + if (!S_ISREG(s.st_mode)) continue; + + msginfo = g_hash_table_lookup + (msg_table, GUINT_TO_POINTER(num)); + + if (!msginfo) { + /* not found in the cache (uncached message) */ + msginfo = mh_parse_msg(d->d_name, item); + if (!msginfo) continue; + + if (!newlist) + last = newlist = + g_slist_append(NULL, msginfo); + else { + last = g_slist_append(last, msginfo); + last = last->next; + } + n_newmsg++; + } + } + } else { + /* discard all previous cache */ + while ((d = readdir(dp)) != NULL) { + if (to_number(d->d_name) < 0) continue; + if (stat(d->d_name, &s) < 0) { + FILE_OP_ERROR(d->d_name, "stat"); + continue; + } + if (!S_ISREG(s.st_mode)) continue; + + msginfo = mh_parse_msg(d->d_name, item); + if (!msginfo) continue; + + if (!newlist) + last = newlist = g_slist_append(NULL, msginfo); + else { + last = g_slist_append(last, msginfo); + last = last->next; + } + n_newmsg++; + } + } + + closedir(dp); + + if (n_newmsg) + debug_print(_("%d uncached message(s) found.\n"), n_newmsg); + else + debug_print(_("done.\n")); + + /* sort new messages in numerical order */ + if (newlist) { + debug_print(_("\tSorting uncached messages in numerical order... ")); + newlist = g_slist_sort + (newlist, (GCompareFunc)procmsg_cmp_msgnum_for_sort); + debug_print(_("done.\n")); + } + + return newlist; +} + +static MsgInfo *mh_parse_msg(const gchar *file, FolderItem *item) +{ + struct stat s; + MsgInfo *msginfo; + MsgFlags flags = MSG_NEW|MSG_UNREAD; + + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(file != NULL, NULL); + + if (item->stype == F_QUEUE) { + MSG_SET_FLAGS(flags, MSG_QUEUED); + } else if (item->stype == F_DRAFT) { + MSG_SET_FLAGS(flags, MSG_DRAFT); + } + + msginfo = procheader_parse(file, flags, FALSE); + if (!msginfo) return NULL; + + msginfo->msgnum = atoi(file); + msginfo->folder = item; + + if (stat(file, &s) < 0) { + FILE_OP_ERROR(file, "stat"); + msginfo->size = 0; + msginfo->mtime = 0; + } else { + msginfo->size = s.st_size; + msginfo->mtime = s.st_mtime; + } + + return msginfo; +} + +static void mh_scan_tree_recursive(FolderItem *item) +{ + DIR *dp; + struct dirent *d; + struct stat s; + gchar *entry; + gint n_msg = 0; + + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + + dp = opendir(item->path ? item->path : "."); + if (!dp) { + FILE_OP_ERROR(item->path ? item->path : ".", "opendir"); + return; + } + + debug_print("scanning %s ...\n", + item->path ? item->path + : LOCAL_FOLDER(item->folder)->rootpath); + if (item->folder->ui_func) + item->folder->ui_func(item->folder, item, + item->folder->ui_func_data); + + while ((d = readdir(dp)) != NULL) { + if (d->d_name[0] == '.') continue; + + if (item->path) + entry = g_strconcat(item->path, G_DIR_SEPARATOR_S, + d->d_name, NULL); + else + entry = g_strdup(d->d_name); + + if (stat(entry, &s) < 0) { + FILE_OP_ERROR(entry, "stat"); + g_free(entry); + continue; + } + + if (S_ISDIR(s.st_mode)) { + FolderItem *new_item; + + new_item = folder_item_new(d->d_name, entry); + folder_item_append(item, new_item); + if (!item->path) { + if (!strcmp(d->d_name, "inbox")) { + new_item->stype = F_INBOX; + item->folder->inbox = new_item; + } else if (!strcmp(d->d_name, "outbox")) { + new_item->stype = F_OUTBOX; + item->folder->outbox = new_item; + } else if (!strcmp(d->d_name, "draft")) { + new_item->stype = F_DRAFT; + item->folder->draft = new_item; + } else if (!strcmp(d->d_name, "queue")) { + new_item->stype = F_QUEUE; + item->folder->queue = new_item; + } else if (!strcmp(d->d_name, "trash")) { + new_item->stype = F_TRASH; + item->folder->trash = new_item; + } + } + mh_scan_tree_recursive(new_item); + } else if (to_number(d->d_name) != -1) n_msg++; + + g_free(entry); + } + + closedir(dp); + + if (item->path) { + gint new, unread, total; + + procmsg_get_mark_sum(item->path, &new, &unread, &total); + if (n_msg > total) { + new += n_msg - total; + unread += n_msg - total; + } + item->new = new; + item->unread = unread; + item->total = n_msg; + } +} + +static gboolean mh_rename_folder_func(GNode *node, gpointer data) +{ + FolderItem *item = node->data; + gchar **paths = data; + const gchar *oldpath = paths[0]; + const gchar *newpath = paths[1]; + gchar *base; + gchar *new_itempath; + gint oldpathlen; + + oldpathlen = strlen(oldpath); + if (strncmp(oldpath, item->path, oldpathlen) != 0) { + g_warning("path doesn't match: %s, %s\n", oldpath, item->path); + return TRUE; + } + + base = item->path + oldpathlen; + while (*base == G_DIR_SEPARATOR) base++; + if (*base == '\0') + new_itempath = g_strdup(newpath); + else + new_itempath = g_strconcat(newpath, G_DIR_SEPARATOR_S, base, + NULL); + g_free(item->path); + item->path = new_itempath; + + return FALSE; +} diff --git a/src/mh.h b/src/mh.h new file mode 100644 index 000000000..05711ba09 --- /dev/null +++ b/src/mh.h @@ -0,0 +1,72 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifndef __MH_H__ +#define __MH_H__ + +#include <glib.h> + +#include "folder.h" +#include "procmsg.h" + +GSList *mh_get_msg_list (Folder *folder, + FolderItem *item, + gboolean use_cache); +gchar *mh_fetch_msg (Folder *folder, + FolderItem *item, + gint num); +gint mh_add_msg (Folder *folder, + FolderItem *dest, + const gchar *file); +gint mh_move_msg (Folder *folder, + FolderItem *dest, + MsgInfo *msginfo); +gint mh_move_msgs_with_dest (Folder *folder, + FolderItem *dest, + GSList *msglist); +gint mh_copy_msg (Folder *folder, + FolderItem *dest, + MsgInfo *msginfo); +gint mh_copy_msgs_with_dest (Folder *folder, + FolderItem *dest, + GSList *msglist); +gint mh_remove_msg (Folder *folder, + FolderItem *item, + gint num); +gint mh_remove_all_msg (Folder *folder, + FolderItem *item); +gboolean mh_is_msg_changed (Folder *folder, + FolderItem *item, + MsgInfo *msginfo); + +void mh_scan_folder (Folder *folder, + FolderItem *item); +void mh_scan_tree (Folder *folder); + +gint mh_create_tree (Folder *folder); +FolderItem *mh_create_folder (Folder *folder, + FolderItem *parent, + const gchar *name); +gint mh_rename_folder (Folder *folder, + FolderItem *item, + const gchar *name); +gint mh_remove_folder (Folder *folder, + FolderItem *item); + +#endif /* __MH_H__ */ diff --git a/src/mimeview.c b/src/mimeview.c new file mode 100644 index 000000000..b72fd6445 --- /dev/null +++ b/src/mimeview.c @@ -0,0 +1,858 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkvpaned.h> +#include <gtk/gtktext.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkdnd.h> +#include <gtk/gtkselection.h> +#include <stdio.h> +#include <unistd.h> + +#include "intl.h" +#include "main.h" +#include "mimeview.h" +#include "textview.h" +#include "procmime.h" +#include "summaryview.h" +#include "menu.h" +#include "filesel.h" +#include "alertpanel.h" +#include "utils.h" +#include "gtkutils.h" +#include "prefs_common.h" +#include "rfc2015.h" + +typedef enum +{ + COL_MIMETYPE = 0, + COL_SIZE = 1, + COL_NAME = 2 +} MimeViewColumnPos; + +#define N_MIMEVIEW_COLS 3 + +static void mimeview_set_multipart_tree (MimeView *mimeview, + MimeInfo *mimeinfo, + GtkCTreeNode *parent); +static GtkCTreeNode *mimeview_append_part (MimeView *mimeview, + MimeInfo *partinfo, + GtkCTreeNode *parent); +static void mimeview_show_message_part (MimeView *mimeview, + MimeInfo *partinfo); +static void mimeview_show_image_part (MimeView *mimeview, + MimeInfo *partinfo); +static void mimeview_change_view_type (MimeView *mimeview, + ContentType type); +static void mimeview_clear (MimeView *mimeview); + +static void mimeview_selected (GtkCTree *ctree, + GtkCTreeNode *node, + gint column, + MimeView *mimeview); +static void mimeview_start_drag (GtkWidget *widget, + gint button, + GdkEvent *event, + MimeView *mimeview); +static void mimeview_button_pressed (GtkWidget *widget, + GdkEventButton *event, + MimeView *mimeview); +static void mimeview_key_pressed (GtkWidget *widget, + GdkEventKey *event, + MimeView *mimeview); + +static void mimeview_drag_data_get (GtkWidget *widget, + GdkDragContext *drag_context, + GtkSelectionData *selection_data, + guint info, + guint time, + MimeView *mimeview); + +static void mimeview_display_as_text (MimeView *mimeview); +static void mimeview_save_as (MimeView *mimeview); +static void mimeview_launch (MimeView *mimeview); +static void mimeview_view_file (const gchar *filename, + MimeInfo *partinfo); +#if USE_GPGME +static void mimeview_check_signature (MimeView *mimeview); +#endif + +static GtkItemFactoryEntry mimeview_popup_entries[] = +{ + {N_("/_Open"), NULL, mimeview_launch, 0, NULL}, + {N_("/_Display as text"), NULL, mimeview_display_as_text, 0, NULL}, + {N_("/_Save as..."), NULL, mimeview_save_as, 0, NULL} +#if USE_GPGME + , + {N_("/_Check signature"), NULL, mimeview_check_signature, 0, NULL} +#endif +}; + +static GtkTargetEntry mimeview_mime_types[] = +{ + {"text/uri-list", 0, 0} +}; + +MimeView *mimeview_create(void) +{ + MimeView *mimeview; + + GtkWidget *paned; + GtkWidget *scrolledwin; + GtkWidget *ctree; + GtkWidget *vbox; + GtkWidget *popupmenu; + GtkItemFactory *popupfactory; + + gchar *titles[] = {_("MIME Type"), _("Size"), _("Name")}; + gint n_entries; + gint i; + + debug_print(_("Creating MIME view...\n")); + mimeview = g_new0(MimeView, 1); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_ALWAYS); + gtk_widget_set_usize(scrolledwin, -1, 80); + + ctree = gtk_sctree_new_with_titles(N_MIMEVIEW_COLS, 0, titles); + gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_BROWSE);//SINGLE); + gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_NONE); + gtk_clist_set_column_justification(GTK_CLIST(ctree), COL_SIZE, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_width(GTK_CLIST(ctree), COL_MIMETYPE, 240); + gtk_clist_set_column_width(GTK_CLIST(ctree), COL_SIZE, 64); + for (i = 0; i < N_MIMEVIEW_COLS; i++) + GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button, + GTK_CAN_FOCUS); + gtk_container_add(GTK_CONTAINER(scrolledwin), ctree); + + gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", + GTK_SIGNAL_FUNC(mimeview_selected), mimeview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", + GTK_SIGNAL_FUNC(mimeview_button_pressed), mimeview); + gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", + GTK_SIGNAL_FUNC(mimeview_key_pressed), mimeview); + gtk_signal_connect(GTK_OBJECT (ctree),"start_drag", + GTK_SIGNAL_FUNC (mimeview_start_drag), mimeview); + gtk_signal_connect(GTK_OBJECT(ctree), "drag_data_get", + GTK_SIGNAL_FUNC(mimeview_drag_data_get), mimeview); + + vbox = gtk_vbox_new(FALSE, 0); + + paned = gtk_vpaned_new(); + gtk_paned_add1(GTK_PANED(paned), scrolledwin); + gtk_paned_add2(GTK_PANED(paned), vbox); + gtk_widget_show_all(paned); + + n_entries = sizeof(mimeview_popup_entries) / + sizeof(mimeview_popup_entries[0]); + popupmenu = menu_create_items(mimeview_popup_entries, n_entries, + "<MimeView>", &popupfactory, mimeview); + + mimeview->paned = paned; + mimeview->scrolledwin = scrolledwin; + mimeview->ctree = ctree; + mimeview->vbox = vbox; + mimeview->popupmenu = popupmenu; + mimeview->popupfactory = popupfactory; + + return mimeview; +} + +void mimeview_init(MimeView *mimeview) +{ +} + +/* + * Check whether the message is OpenPGP signed + */ +#if USE_GPGME +static gboolean mimeview_is_signed(MimeView *mimeview) +{ + MimeInfo *partinfo; + + debug_print("mimeview_is signed of %p\n", mimeview); + + if (!mimeview) return FALSE; + if (!mimeview->opened) return FALSE; + + debug_print("mimeview_is_signed: open\n" ); + + if (!mimeview->file) return FALSE; + + debug_print("mimeview_is_signed: file\n" ); + + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + g_return_val_if_fail(partinfo != NULL, FALSE); + + /* walk the tree and see whether there is a signature somewhere */ + do { + if (rfc2015_has_signature(partinfo)) + return TRUE; + } while ((partinfo = partinfo->parent) != NULL); + + debug_print("mimeview_is_signed: FALSE\n" ); + + return FALSE; +} + +static void set_unchecked_signature(MimeInfo *mimeinfo) +{ + MimeInfo *sig_partinfo; + + sig_partinfo = rfc2015_find_signature(mimeinfo); + if (sig_partinfo == NULL) return; + + g_free(sig_partinfo->sigstatus); + sig_partinfo->sigstatus = + g_strdup(_("Select \"Check signature\" to check")); + + g_free(sig_partinfo->sigstatus_full); + sig_partinfo->sigstatus_full = NULL; +} +#endif /*USE_GPGME*/ + +void mimeview_show_message(MimeView *mimeview, MimeInfo *mimeinfo, + const gchar *file) +{ + GtkCTree *ctree = GTK_CTREE(mimeview->ctree); + GtkCTreeNode *node; + gchar buf[BUFFSIZE]; + FILE *fp; + + mimeview_clear(mimeview); + + g_return_if_fail(file != NULL); + g_return_if_fail(mimeinfo != NULL); + + mimeview->mimeinfo = mimeinfo; + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return; + } + mimeview->file = g_strdup(file); + + /* skip headers */ + if (mimeinfo->mime_type == MIME_MULTIPART) { + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) + perror("fseek"); + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + } + + procmime_scan_multipart_message(mimeinfo, fp); +#if USE_GPGME + if (prefs_common.auto_check_signatures) + rfc2015_check_signature(mimeinfo, fp); + else + set_unchecked_signature(mimeinfo); +#endif + fclose(fp); + + gtk_signal_handler_block_by_func(GTK_OBJECT(ctree), mimeview_selected, + mimeview); + + mimeview_set_multipart_tree(mimeview, mimeinfo, NULL); + + gtk_signal_handler_unblock_by_func(GTK_OBJECT(ctree), + mimeview_selected, mimeview); + + if ((node = gtk_ctree_node_nth(ctree, 0))) { + gtk_ctree_select(ctree, node); + gtk_widget_grab_focus(mimeview->ctree); + } +} + +void mimeview_destroy(MimeView *mimeview) +{ + procmime_mimeinfo_free_all(mimeview->mimeinfo); + g_free(mimeview->file); + g_free(mimeview); +} + +static void mimeview_set_multipart_tree(MimeView *mimeview, + MimeInfo *mimeinfo, + GtkCTreeNode *parent) +{ + g_return_if_fail(mimeinfo != NULL); + + if (!mimeinfo->main && mimeinfo->parent) + parent = mimeview_append_part(mimeview, mimeinfo, parent); + + if (mimeinfo->sub && mimeinfo->sub->children) + mimeview_set_multipart_tree(mimeview, mimeinfo->sub, parent); + + if (mimeinfo->children) { + MimeInfo *child; + + child = mimeinfo->children; + while (child) { + mimeview_set_multipart_tree(mimeview, child, parent); + child = child->next; + } + } +} + +static gchar *get_part_name(MimeInfo *partinfo) +{ +#if USE_GPGME + if (partinfo->sigstatus) + return partinfo->sigstatus; + else +#endif + if (partinfo->name) + return partinfo->name; + else if (partinfo->filename) + return partinfo->filename; + else + return ""; +} + +static GtkCTreeNode *mimeview_append_part(MimeView *mimeview, + MimeInfo *partinfo, + GtkCTreeNode *parent) +{ + GtkCTree *ctree = GTK_CTREE(mimeview->ctree); + GtkCTreeNode *node; + gchar *str[N_MIMEVIEW_COLS]; + + str[COL_MIMETYPE] = + partinfo->content_type ? partinfo->content_type : ""; + str[COL_SIZE] = to_human_readable(partinfo->size); + str[COL_NAME] = get_part_name(partinfo); + + node = gtk_ctree_insert_node(ctree, parent, NULL, str, 0, + NULL, NULL, NULL, NULL, + FALSE, TRUE); + gtk_ctree_node_set_row_data(ctree, node, partinfo); + + return node; +} + +static void mimeview_show_message_part(MimeView *mimeview, MimeInfo *partinfo) +{ + FILE *fp; + const gchar *fname; +#if USE_GPGME + MimeInfo *pi; +#endif + + if (!partinfo) return; + +#if USE_GPGME + for (pi = partinfo; pi && !pi->plaintextfile ; pi = pi->parent) + ; + fname = pi ? pi->plaintextfile : mimeview->file; +#else + fname = mimeview->file; +#endif /* USE_GPGME */ + if (!fname) return; + + if ((fp = fopen(fname, "r")) == NULL) { + FILE_OP_ERROR(fname, "fopen"); + return; + } + + if (fseek(fp, partinfo->fpos, SEEK_SET) < 0) { + FILE_OP_ERROR(mimeview->file, "fseek"); + fclose(fp); + return; + } + + mimeview_change_view_type(mimeview, MIMEVIEW_TEXT); + textview_show_part(mimeview->textview, partinfo, fp); + + fclose(fp); +} + +static void mimeview_show_image_part(MimeView *mimeview, MimeInfo *partinfo) +{ + gchar *filename; + + if (!partinfo) return; + + filename = procmime_get_tmp_file_name(partinfo); + + if (procmime_get_part(filename, mimeview->file, partinfo) < 0) + alertpanel_error + (_("Can't get the part of multipart message.")); + else { + mimeview_change_view_type(mimeview, MIMEVIEW_IMAGE); + imageview_show_image(mimeview->imageview, partinfo, filename); + unlink(filename); + } + + g_free(filename); +} + +static void mimeview_change_view_type(MimeView *mimeview, MimeViewType type) +{ + TextView *textview = mimeview->textview; + ImageView *imageview = mimeview->imageview; + + if (mimeview->type == type) return; + + switch (type) { + case MIMEVIEW_IMAGE: + gtk_container_remove(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(textview)); + gtk_container_add(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(imageview)); + break; + case MIMEVIEW_TEXT: + gtk_container_remove(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(imageview)); + gtk_container_add(GTK_CONTAINER(mimeview->vbox), + GTK_WIDGET_PTR(textview)); + break; + default: + return; + } + + mimeview->type = type; +} + +static void mimeview_clear(MimeView *mimeview) +{ + GtkCList *clist = GTK_CLIST(mimeview->ctree); + + procmime_mimeinfo_free_all(mimeview->mimeinfo); + mimeview->mimeinfo = NULL; + + gtk_clist_clear(clist); + textview_clear(mimeview->textview); + + mimeview->opened = NULL; + + g_free(mimeview->file); + mimeview->file = NULL; +} + +static void mimeview_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column, + MimeView *mimeview) +{ + MimeInfo *partinfo; + + if (mimeview->opened == node) return; + mimeview->opened = node; + gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0); + + partinfo = gtk_ctree_node_get_row_data(ctree, node); + if (!partinfo) return; + + switch (partinfo->mime_type) { + case MIME_TEXT: + case MIME_TEXT_HTML: + case MIME_MESSAGE_RFC822: + case MIME_MULTIPART: + mimeview_show_message_part(mimeview, partinfo); + break; +#if (HAVE_GDK_PIXBUF || HAVE_GDK_IMLIB) + case MIME_IMAGE: + mimeview_show_image_part(mimeview, partinfo); + break; +#endif + default: + mimeview_change_view_type(mimeview, MIMEVIEW_TEXT); +#if USE_GPGME + if (g_strcasecmp(partinfo->content_type, + "application/pgp-signature") == 0) + textview_show_signature_part(mimeview->textview, + partinfo); + else +#endif + textview_show_mime_part(mimeview->textview, partinfo); + break; + } +} + +static void mimeview_start_drag (GtkWidget *widget, gint button, + GdkEvent *event, MimeView *mimeview) +{ + GtkTargetList *list; + GdkDragContext *context; + MimeInfo *partinfo; + GtkCTree *ctree; + + g_return_if_fail(mimeview != NULL); + ctree = GTK_CTREE(mimeview->ctree); + partinfo = gtk_ctree_node_get_row_data(ctree, mimeview->opened); + if (partinfo->filename == NULL && partinfo->name == NULL) return; + + list = gtk_target_list_new(mimeview_mime_types, 1); + context = gtk_drag_begin(widget, list, + GDK_ACTION_COPY, button, event); + gtk_drag_set_icon_default(context); +} + +static void mimeview_button_pressed(GtkWidget *widget, GdkEventButton *event, + MimeView *mimeview) +{ + GtkCList *clist = GTK_CLIST(widget); + MimeInfo *partinfo; + gint row, column; + + if (!event) return; + + if (event->button == 2 || event->button == 3) { + if (!gtk_clist_get_selection_info(clist, event->x, event->y, + &row, &column)) + return; + gtk_clist_unselect_all(clist); + gtk_clist_select_row(clist, row, column); + gtkut_clist_set_focus_row(clist, row); + } + + if (event->button == 2 || + (event->button == 1 && event->type == GDK_2BUTTON_PRESS)) { + /* call external program for image, audio or html */ + mimeview_launch(mimeview); + } else if (event->button == 3) { + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + if (partinfo && (partinfo->mime_type == MIME_TEXT || + partinfo->mime_type == MIME_TEXT_HTML || + partinfo->mime_type == MIME_MESSAGE_RFC822 || + partinfo->mime_type == MIME_IMAGE || + partinfo->mime_type == MIME_MULTIPART)) + menu_set_sensitive(mimeview->popupfactory, + "/Display as text", FALSE); + else + menu_set_sensitive(mimeview->popupfactory, + "/Display as text", TRUE); +#if USE_GPGME + menu_set_sensitive(mimeview->popupfactory, + "/Check signature", + mimeview_is_signed(mimeview)); +#endif + + gtk_menu_popup(GTK_MENU(mimeview->popupmenu), + NULL, NULL, NULL, NULL, + event->button, event->time); + } +} + +#define BREAK_ON_MODIFIER_KEY() \ + if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break + +static void mimeview_key_pressed(GtkWidget *widget, GdkEventKey *event, + MimeView *mimeview) +{ + SummaryView *summaryview; + GtkCTree *ctree = GTK_CTREE(mimeview->ctree); + GtkCTreeNode *node; + + if (!event) return; + if (!mimeview->opened) return; + + switch (event->keyval) { + case GDK_space: + if (textview_scroll_page(mimeview->textview, FALSE)) return; + + node = GTK_CTREE_NODE_NEXT(mimeview->opened); + if (node) { + gtk_sctree_unselect_all(GTK_SCTREE(ctree)); + gtk_sctree_select(GTK_SCTREE(ctree), node); + return; + } + break; + case GDK_BackSpace: + case GDK_Delete: + textview_scroll_page(mimeview->textview, TRUE); + return; + case GDK_Return: + textview_scroll_one_line(mimeview->textview, + (event->state & GDK_MOD1_MASK) != 0); + return; + case GDK_n: + case GDK_N: + BREAK_ON_MODIFIER_KEY(); + if (!GTK_CTREE_NODE_NEXT(mimeview->opened)) break; + + gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", + GTK_SCROLL_STEP_FORWARD, 0.0); + return; + case GDK_p: + case GDK_P: + BREAK_ON_MODIFIER_KEY(); + if (!GTK_CTREE_NODE_PREV(mimeview->opened)) break; + + gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", + GTK_SCROLL_STEP_BACKWARD, 0.0); + return; + case GDK_y: + BREAK_ON_MODIFIER_KEY(); + mimeview_save_as(mimeview); + return; + case GDK_t: + BREAK_ON_MODIFIER_KEY(); + mimeview_display_as_text(mimeview); + return; + case GDK_l: + BREAK_ON_MODIFIER_KEY(); + mimeview_launch(mimeview); + return; + default: + } + + if (!mimeview->messageview->mainwin) return; + summaryview = mimeview->messageview->mainwin->summaryview; + summary_pass_key_press_event(summaryview, event); +} + +static void mimeview_drag_data_get(GtkWidget *widget, + GdkDragContext *drag_context, + GtkSelectionData *selection_data, + guint info, + guint time, + MimeView *mimeview) +{ + gchar *filename, *uriname; + MimeInfo *partinfo; + + if (!mimeview->opened) return; + if (!mimeview->file) return; + + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + if (!partinfo) return; + if (!partinfo->filename && !partinfo->name) return; + + filename = partinfo->filename ? partinfo->filename : partinfo->name; + filename = g_basename(filename); + if (*filename == '\0') return; + + filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, + filename, NULL); + + if (procmime_get_part(filename, mimeview->file, partinfo) < 0) + alertpanel_error + (_("Can't save the part of multipart message.")); + + uriname = g_strconcat("file:/", filename, NULL); + gtk_selection_data_set(selection_data, selection_data->target, 8, + uriname, strlen(uriname)); + + g_free(uriname); + g_free(filename); +} + +static void mimeview_display_as_text(MimeView *mimeview) +{ + MimeInfo *partinfo; + + if (!mimeview->opened) return; + + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + mimeview_show_message_part(mimeview, partinfo); +} + +static void mimeview_save_as(MimeView *mimeview) +{ + gchar *filename; + MimeInfo *partinfo; + + if (!mimeview->opened) return; + if (!mimeview->file) return; + + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + g_return_if_fail(partinfo != NULL); + + filename = filesel_select_file + (_("Save as"), + partinfo->filename ? partinfo->filename : partinfo->name); + if (!filename) return; + if (is_file_exist(filename)) { + AlertValue aval; + + aval = alertpanel(_("Overwrite"), + _("Overwrite existing file?"), + _("OK"), _("Cancel"), NULL); + if (G_ALERTDEFAULT != aval) return; + } + + if (procmime_get_part(filename, mimeview->file, partinfo) < 0) + alertpanel_error + (_("Can't save the part of multipart message.")); +} + +static void mimeview_launch(MimeView *mimeview) +{ + MimeInfo *partinfo; + gchar *filename; + + if (!mimeview->opened) return; + if (!mimeview->file) return; + + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + g_return_if_fail(partinfo != NULL); + + filename = procmime_get_tmp_file_name(partinfo); + + if (procmime_get_part(filename, mimeview->file, partinfo) < 0) + alertpanel_error + (_("Can't save the part of multipart message.")); + else + mimeview_view_file(filename, partinfo); + + g_free(filename); +} + +static void mimeview_view_file(const gchar *filename, MimeInfo *partinfo) +{ + static gchar *default_image_cmdline = "display '%s'"; + static gchar *default_audio_cmdline = "play '%s'"; + static gchar *default_html_cmdline = + "netscape -remote 'openURL(%s,raise)'"; + static gchar *mime_cmdline = "metamail -d -b -c %s '%s'"; + gchar buf[1024]; + gchar m_buf[1024]; + gchar *cmd; + gchar *def_cmd; + gchar *p; + + if (MIME_APPLICATION_OCTET_STREAM == partinfo->mime_type) { + return; + } else if (MIME_IMAGE == partinfo->mime_type) { + cmd = prefs_common.mime_image_viewer; + def_cmd = default_image_cmdline; + } else if (MIME_AUDIO == partinfo->mime_type) { + cmd = prefs_common.mime_audio_player; + def_cmd = default_audio_cmdline; + } else if (MIME_TEXT_HTML == partinfo->mime_type) { + cmd = prefs_common.uri_cmd; + def_cmd = default_html_cmdline; + } else { + g_snprintf(m_buf, sizeof(m_buf), mime_cmdline, + partinfo->content_type, "%s"); + cmd = m_buf; + def_cmd = NULL; + } + + if (cmd && (p = strchr(cmd, '%')) && *(p + 1) == 's' && + !strchr(p + 2, '%')) + g_snprintf(buf, sizeof(buf), cmd, filename); + else { + if (cmd) + g_warning(_("MIME viewer command line is invalid: `%s'"), cmd); + if (def_cmd) + g_snprintf(buf, sizeof(buf), def_cmd, filename); + else + return; + } + + execute_command_line(buf); +} + +#if USE_GPGME +static void update_node_name(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + MimeInfo *partinfo; + gchar *part_name; + + partinfo = gtk_ctree_node_get_row_data(ctree, node); + g_return_if_fail(partinfo != NULL); + + part_name = get_part_name(partinfo); + gtk_ctree_node_set_text(ctree, node, COL_NAME, part_name); +} + +static void mimeview_update_names(MimeView *mimeview) +{ + GtkCTree *ctree = GTK_CTREE(mimeview->ctree); + + gtk_ctree_pre_recursive(ctree, NULL, update_node_name, NULL); +} + +static void mimeview_update_signature_info(MimeView *mimeview) +{ + MimeInfo *partinfo; + + if (!mimeview) return; + if (!mimeview->opened) return; + + partinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + if (!partinfo) return; + + if (g_strcasecmp(partinfo->content_type, + "application/pgp-signature") == 0) { + mimeview_change_view_type(mimeview, MIMEVIEW_TEXT); + textview_show_signature_part(mimeview->textview, partinfo); + } +} + +static void mimeview_check_signature(MimeView *mimeview) +{ + MimeInfo *mimeinfo; + gchar buf[BUFFSIZE]; + FILE *fp; + + g_return_if_fail (mimeview_is_signed(mimeview)); + + mimeinfo = gtk_ctree_node_get_row_data + (GTK_CTREE(mimeview->ctree), mimeview->opened); + g_return_if_fail(mimeinfo != NULL); + g_return_if_fail(mimeview->file != NULL); + + while (mimeinfo->parent) + mimeinfo = mimeinfo->parent; + + if ((fp = fopen(mimeview->file, "r")) == NULL) { + FILE_OP_ERROR(mimeview->file, "fopen"); + return; + } + + /* skip headers */ + if (mimeinfo->mime_type == MIME_MULTIPART) { + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) + FILE_OP_ERROR(mimeview->file, "fseek"); + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + } + + procmime_scan_multipart_message(mimeinfo, fp); + rfc2015_check_signature(mimeinfo, fp); + fclose(fp); + + mimeview_update_names(mimeview); + mimeview_update_signature_info(mimeview); +} +#endif /*USE_GPGME*/ diff --git a/src/mimeview.h b/src/mimeview.h new file mode 100644 index 000000000..42051396f --- /dev/null +++ b/src/mimeview.h @@ -0,0 +1,72 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __MIMEVIEW_H__ +#define __MIMEVIEW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkctree.h> + +typedef struct _MimeView MimeView; + +#include "textview.h" +#include "imageview.h" +#include "messageview.h" +#include "procmime.h" + +typedef enum +{ + MIMEVIEW_TEXT, + MIMEVIEW_IMAGE +} MimeViewType; + +struct _MimeView +{ + GtkWidget *paned; + + MimeViewType type; + + GtkWidget *scrolledwin; + GtkWidget *ctree; + GtkWidget *vbox; + + GtkWidget *popupmenu; + GtkItemFactory *popupfactory; + + GtkCTreeNode *opened; + + TextView *textview; + ImageView *imageview; + + MessageView *messageview; + + MimeInfo *mimeinfo; + + gchar *file; +}; + +MimeView *mimeview_create (void); +void mimeview_init (MimeView *mimeview); +void mimeview_show_message (MimeView *mimeview, + MimeInfo *mimeinfo, + const gchar *file); +void mimeview_destroy (MimeView *mimeview); + +#endif /* __MIMEVIEW_H__ */ diff --git a/src/news.c b/src/news.c new file mode 100644 index 000000000..279b8f960 --- /dev/null +++ b/src/news.c @@ -0,0 +1,484 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <dirent.h> +#include <unistd.h> + +#include "intl.h" +#include "news.h" +#include "nntp.h" +#include "socket.h" +#include "recv.h" +#include "procmsg.h" +#include "procheader.h" +#include "folder.h" +#include "session.h" +#include "statusbar.h" +#include "codeconv.h" +#include "utils.h" +#include "prefs_common.h" + +static gint news_get_article_cmd (NNTPSession *session, + const gchar *cmd, + gint num, + gchar *filename); +static gint news_get_article (NNTPSession *session, + gint num, + gchar *filename); +static gint news_get_header (NNTPSession *session, + gint num, + gchar *filename); + +static GSList *news_get_uncached_articles(NNTPSession *session, + FolderItem *item, + gint cache_last, + gint *rfirst, + gint *rlast); +static MsgInfo *news_parse_xover (const gchar *xover_str); +static GSList *news_delete_old_article (GSList *alist, + gint first); +static void news_delete_all_article (FolderItem *item); + + +Session *news_session_new(const gchar *server, gushort port) +{ + gchar buf[NNTPBUFSIZE]; + NNTPSession *session; + gint nntp_sock; + + g_return_val_if_fail(server != NULL, NULL); + + log_message(_("creating NNTP connection to %s:%d ...\n"), server, port); + + if ((nntp_sock = nntp_open(server, port, buf)) < 0) + return NULL; + + session = g_new(NNTPSession, 1); + SESSION(session)->type = SESSION_NEWS; + SESSION(session)->server = g_strdup(server); + SESSION(session)->sock = nntp_sock; + SESSION(session)->connected = TRUE; + SESSION(session)->phase = SESSION_READY; + SESSION(session)->data = NULL; + session->group = NULL; + + return SESSION(session); +} + +void news_session_destroy(NNTPSession *session) +{ + close(SESSION(session)->sock); + + g_free(session->group); +} + +NNTPSession *news_session_get(Folder *folder) +{ + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(folder->type == F_NEWS, NULL); + g_return_val_if_fail(folder->account != NULL, NULL); + + if (!REMOTE_FOLDER(folder)->session) { + REMOTE_FOLDER(folder)->session = + news_session_new(folder->account->nntp_server, 119); + } else { + if (nntp_mode(REMOTE_FOLDER(folder)->session->sock, FALSE) + != NN_SUCCESS) { + log_warning(_("NNTP connection to %s:%d has been" + " disconnected. Reconnecting...\n"), + folder->account->nntp_server, 119); + session_destroy(REMOTE_FOLDER(folder)->session); + REMOTE_FOLDER(folder)->session = + news_session_new(folder->account->nntp_server, + 119); + } + } + + return NNTP_SESSION(REMOTE_FOLDER(folder)->session); +} + +GSList *news_get_article_list(Folder *folder, FolderItem *item, + gboolean use_cache) +{ + GSList *alist; + NNTPSession *session; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(folder->type == F_NEWS, NULL); + + session = news_session_get(folder); + + if (!session) { + alist = procmsg_read_cache(item, FALSE); + item->last_num = procmsg_get_last_num_in_cache(alist); + } else if (use_cache) { + GSList *newlist; + gint cache_last; + gint first, last; + + alist = procmsg_read_cache(item, FALSE); + + cache_last = procmsg_get_last_num_in_cache(alist); + newlist = news_get_uncached_articles + (session, item, cache_last, &first, &last); + alist = news_delete_old_article(alist, first); + + alist = g_slist_concat(alist, newlist); + item->last_num = last; + } else { + gint last; + + alist = news_get_uncached_articles + (session, item, 0, NULL, &last); + news_delete_all_article(item); + item->last_num = last; + } + + procmsg_set_flags(alist, item); + + statusbar_pop_all(); + + return alist; +} + +gchar *news_fetch_msg(Folder *folder, FolderItem *item, gint num) +{ + gchar *path, *filename; + gint ok; + + g_return_val_if_fail(folder != NULL, NULL); + g_return_val_if_fail(item != NULL, NULL); + + path = folder_item_get_path(item); + filename = g_strconcat(path, G_DIR_SEPARATOR_S, itos(num), NULL); + g_free(path); + + if (is_file_exist(filename)) { + debug_print(_("article %d has been already cached.\n"), num); + return filename; + } + + if (!REMOTE_FOLDER(folder)->session) { + g_free(filename); + return NULL; + } + + debug_print(_("getting article %d...\n"), num); + ok = news_get_article(NNTP_SESSION(REMOTE_FOLDER(folder)->session), + num, filename); + statusbar_pop_all(); + if (ok < 0) { + g_warning(_("can't read article %d\n"), num); + g_free(filename); + return NULL; + } + + return filename; +} + +void news_scan_group(Folder *folder, FolderItem *item) +{ +} + +gint news_post(Folder *folder, const gchar *file) +{ + NNTPSession *session; + FILE *fp; + gint ok; + + g_return_val_if_fail(folder != NULL, -1); + g_return_val_if_fail(folder->type == F_NEWS, -1); + g_return_val_if_fail(file != NULL, -1); + + session = news_session_get(folder); + if (!session) return -1; + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return -1; + } + + ok = nntp_post(SESSION(session)->sock, fp); + if (ok != NN_SUCCESS) { + log_warning(_("can't post article.\n")); + return -1; + } + + fclose(fp); + + statusbar_pop_all(); + + return 0; +} + +static gint news_get_article_cmd(NNTPSession *session, const gchar *cmd, + gint num, gchar *filename) +{ + gchar *msgid; + + if (nntp_get_article(SESSION(session)->sock, cmd, num, &msgid) + != NN_SUCCESS) + return -1; + + debug_print("Message-Id = %s, num = %d\n", msgid, num); + g_free(msgid); + + if (recv_write_to_file(SESSION(session)->sock, filename) < 0) { + log_warning(_("can't retrieve article %d\n"), num); + return -1; + } + + return 0; +} + +static gint news_get_article(NNTPSession *session, gint num, gchar *filename) +{ + return news_get_article_cmd(session, "ARTICLE", num, filename); +} + +static gint news_get_header(NNTPSession *session, gint num, gchar *filename) +{ + return news_get_article_cmd(session, "HEAD", num, filename); +} + +static GSList *news_get_uncached_articles(NNTPSession *session, + FolderItem *item, gint cache_last, + gint *rfirst, gint *rlast) +{ + gint ok; + gint num = 0, first = 0, last = 0, begin = 0, end = 0; + gchar buf[NNTPBUFSIZE]; + GSList *newlist = NULL; + GSList *llast = NULL; + MsgInfo *msginfo; + + if (rfirst) *rfirst = 0; + if (rlast) *rlast = 0; + + g_return_val_if_fail(session != NULL, NULL); + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(item->folder != NULL, NULL); + g_return_val_if_fail(item->folder->type == F_NEWS, NULL); + + ok = nntp_group(SESSION(session)->sock, item->path, + &num, &first, &last); + if (ok != NN_SUCCESS) { + log_warning(_("can't set group: %s\n"), item->path); + return NULL; + } + + /* calculate getting overview range */ + if (first > last) { + log_warning(_("invalid article range: %d - %d\n"), + first, last); + return NULL; + } + if (cache_last < first) + begin = first; + else if (last < cache_last) + begin = first; + else if (last == cache_last) { + debug_print(_("no new articles.\n")); + return NULL; + } else + begin = cache_last + 1; + end = last; + + if (prefs_common.max_articles > 0 && + end - begin + 1 > prefs_common.max_articles) + begin = end - prefs_common.max_articles + 1; + + log_message(_("getting xover %d - %d in %s...\n"), + begin, end, item->path); + if (nntp_xover(SESSION(session)->sock, begin, end) != NN_SUCCESS) { + log_warning(_("can't get xover\n")); + return NULL; + } + + for (;;) { + if (sock_read(SESSION(session)->sock, buf, sizeof(buf)) < 0) { + log_warning(_("error occurred while getting xover.\n")); + return newlist; + } + + if (buf[0] == '.' && buf[1] == '\r') break; + + msginfo = news_parse_xover(buf); + if (!msginfo) { + log_warning(_("invalid xover line: %s\n"), buf); + continue; + } + + msginfo->folder = item; + msginfo->flags = MSG_NEW|MSG_UNREAD|MSG_NEWS; + + if (!newlist) + llast = newlist = g_slist_append(newlist, msginfo); + else { + llast = g_slist_append(llast, msginfo); + llast = llast->next; + } + } + + if (rfirst) *rfirst = first; + if (rlast) *rlast = last; + return newlist; +} + +#define PARSE_ONE_PARAM(p, srcp) \ +{ \ + p = strchr(srcp, '\t'); \ + if (!p) return NULL; \ + else \ + *p++ = '\0'; \ +} + +static MsgInfo *news_parse_xover(const gchar *xover_str) +{ + MsgInfo *msginfo; + gchar buf[NNTPBUFSIZE]; + gchar *subject, *sender, *size, *line, *date, *msgid, *ref, *tmp; + gchar *p; + gint num, size_int, line_int; + gchar *xover_buf; + + Xalloca(xover_buf, strlen(xover_str) + 1, return NULL); + strcpy(xover_buf, xover_str); + + PARSE_ONE_PARAM(subject, xover_buf); + PARSE_ONE_PARAM(sender, subject); + PARSE_ONE_PARAM(date, sender); + PARSE_ONE_PARAM(msgid, date); + PARSE_ONE_PARAM(ref, msgid); + PARSE_ONE_PARAM(size, ref); + PARSE_ONE_PARAM(line, size); + + tmp = strchr(line, '\t'); + if (!tmp) tmp = strchr(line, '\r'); + if (!tmp) tmp = strchr(line, '\n'); + if (tmp) *tmp = '\0'; + + num = atoi(xover_str); + size_int = atoi(size); + line_int = atoi(line); + + /* set MsgInfo */ + msginfo = g_new0(MsgInfo, 1); + msginfo->msgnum = num; + msginfo->size = size_int; + + msginfo->date = g_strdup(date); + msginfo->date_t = procheader_date_parse(NULL, date, 0); + + conv_unmime_header(buf, sizeof(buf), sender, NULL); + msginfo->from = g_strdup(buf); + msginfo->fromname = procheader_get_fromname(buf); + + conv_unmime_header(buf, sizeof(buf), subject, NULL); + msginfo->subject = g_strdup(buf); + + extract_parenthesis(msgid, '<', '>'); + remove_space(msgid); + if (*msgid != '\0') + msginfo->msgid = g_strdup(msgid); + + eliminate_parenthesis(ref, '(', ')'); + if ((p = strrchr(ref, '<')) != NULL) { + extract_parenthesis(p, '<', '>'); + remove_space(p); + if (*p != '\0') + msginfo->inreplyto = g_strdup(p); + } + + return msginfo; +} + +static GSList *news_delete_old_article(GSList *alist, gint first) +{ + GSList *cur, *next; + MsgInfo *msginfo; + gchar *cache_file; + + if (first < 2) return alist; + + for (cur = alist; cur != NULL; ) { + next = cur->next; + + msginfo = (MsgInfo *)cur->data; + if (msginfo && msginfo->msgnum < first) { + debug_print(_("deleting article %d...\n"), + msginfo->msgnum); + + cache_file = procmsg_get_message_file_path(msginfo); + if (is_file_exist(cache_file)) unlink(cache_file); + g_free(cache_file); + + procmsg_msginfo_free(msginfo); + alist = g_slist_remove(alist, msginfo); + } + + cur = next; + } + + return alist; +} + +static void news_delete_all_article(FolderItem *item) +{ + DIR *dp; + struct dirent *d; + gchar *dir; + gchar *file; + + dir = folder_item_get_path(item); + if ((dp = opendir(dir)) == NULL) { + FILE_OP_ERROR(dir, "opendir"); + g_free(dir); + return; + } + + debug_print(_("\tDeleting all cached articles... ")); + + while ((d = readdir(dp)) != NULL) { + if (to_number(d->d_name) < 0) continue; + + file = g_strconcat(dir, G_DIR_SEPARATOR_S, d->d_name, NULL); + + if (is_file_exist(file)) { + if (unlink(file) < 0) + FILE_OP_ERROR(file, "unlink"); + } + + g_free(file); + } + + closedir(dp); + g_free(dir); + + debug_print(_("done.\n")); +} diff --git a/src/news.h b/src/news.h new file mode 100644 index 000000000..90da8f067 --- /dev/null +++ b/src/news.h @@ -0,0 +1,58 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __NEWS_H__ +#define __NEWS_H__ + +#include <glib.h> + +#include "folder.h" +#include "session.h" + +typedef struct _NNTPSession NNTPSession; + +#define NNTP_SESSION(obj) ((NNTPSession *)obj) + +struct _NNTPSession +{ + Session session; + + gchar *group; +}; + + +Session *news_session_new (const gchar *server, + gushort port); +void news_session_destroy (NNTPSession *session); +NNTPSession *news_session_get (Folder *folder); + +GSList *news_get_article_list (Folder *folder, + FolderItem *item, + gboolean use_cache); +gchar *news_fetch_msg (Folder *folder, + FolderItem *item, + gint num); + +void news_scan_group (Folder *folder, + FolderItem *item); + +gint news_post (Folder *folder, + const gchar *file); + +#endif /* __NEWS_H__ */ diff --git a/src/nntp.c b/src/nntp.c new file mode 100644 index 000000000..e0ae5f5da --- /dev/null +++ b/src/nntp.c @@ -0,0 +1,261 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> + +#include "intl.h" +#include "nntp.h" +#include "socket.h" +#include "utils.h" + +static gint verbose = 1; + +static void nntp_gen_send(gint sock, const gchar *format, ...); +static gint nntp_gen_recv(gint sock, gchar *buf, gint size); + +gint nntp_open(const gchar *server, gushort port, gchar *buf) +{ + SockInfo *sockinfo; + gint sock; + + if ((sockinfo = sock_connect(server, port)) == NULL) { + log_warning(_("Can't connect to NNTP server: %s:%d\n"), + server, port); + return -1; + } + sock = sockinfo->sock; + sock_sockinfo_free(sockinfo); + + if (nntp_ok(sock, buf) == NN_SUCCESS) + return sock; + else { + sock_close(sock); + return -1; + } +} + +gint nntp_group(gint sock, const gchar *group, + gint *num, gint *first, gint *last) +{ + gint ok; + gint resp; + gchar buf[NNTPBUFSIZE]; + + nntp_gen_send(sock, "GROUP %s", group); + + if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) + return ok; + + if (sscanf(buf, "%d %d %d %d", &resp, num, first, last) + != 4) { + log_warning(_("protocol error: %s\n"), buf); + return NN_PROTOCOL; + } + + return NN_SUCCESS; +} + +gint nntp_get_article(gint sock, const gchar *cmd, gint num, gchar **msgid) +{ + gint ok; + gchar buf[NNTPBUFSIZE]; + + if (num > 0) + nntp_gen_send(sock, "%s %d", cmd, num); + else + nntp_gen_send(sock, cmd); + + if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) + return ok; + + extract_parenthesis(buf, '<', '>'); + if (buf[0] == '\0') { + log_warning(_("protocol error\n")); + return NN_PROTOCOL; + } + *msgid = g_strdup(buf); + + return NN_SUCCESS; +} + +gint nntp_article(gint sock, gint num, gchar **msgid) +{ + return nntp_get_article(sock, "ARTICLE", num, msgid); +} + +gint nntp_body(gint sock, gint num, gchar **msgid) +{ + return nntp_get_article(sock, "BODY", num, msgid); +} + +gint nntp_head(gint sock, gint num, gchar **msgid) +{ + return nntp_get_article(sock, "HEAD", num, msgid); +} + +gint nntp_stat(gint sock, gint num, gchar **msgid) +{ + return nntp_get_article(sock, "STAT", num, msgid); +} + +gint nntp_next(gint sock, gint *num, gchar **msgid) +{ + gint ok; + gint resp; + gchar buf[NNTPBUFSIZE]; + + nntp_gen_send(sock, "NEXT"); + + if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) + return ok; + + if (sscanf(buf, "%d %d", &resp, num) != 2) { + log_warning(_("protocol error: %s\n"), buf); + return NN_PROTOCOL; + } + + extract_parenthesis(buf, '<', '>'); + if (buf[0] == '\0') { + log_warning(_("protocol error\n")); + return NN_PROTOCOL; + } + *msgid = g_strdup(buf); + + return NN_SUCCESS; +} + +gint nntp_xover(gint sock, gint first, gint last) +{ + gint ok; + gchar buf[NNTPBUFSIZE]; + + nntp_gen_send(sock, "XOVER %d-%d", first, last); + if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) + return ok; + + return NN_SUCCESS; +} + +gint nntp_post(gint sock, FILE *fp) +{ + gint ok; + gchar buf[NNTPBUFSIZE]; + + nntp_gen_send(sock, "POST"); + if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) + return ok; + + while (fgets(buf, sizeof(buf), fp) != NULL) { + strretchomp(buf); + if (buf[0] == '.') { + if (sock_write(sock, ".", 1) < 0) { + log_warning(_("Error occurred while posting\n")); + return NN_SOCKET; + } + } + + if (sock_puts(sock, buf) < 0) { + log_warning(_("Error occurred while posting\n")); + return NN_SOCKET; + } + } + + sock_write(sock, ".\r\n", 3); + if ((ok = nntp_ok(sock, buf)) != NN_SUCCESS) + return ok; + + return NN_SUCCESS; +} + +gint nntp_newgroups(gint sock) +{ + return NN_SUCCESS; +} + +gint nntp_newnews(gint sock) +{ + return NN_SUCCESS; +} + +gint nntp_mode(gint sock, gboolean stream) +{ + gint ok; + + nntp_gen_send(sock, "MODE %s", stream ? "STREAM" : "READER"); + ok = nntp_ok(sock, NULL); + + return ok; +} + +gint nntp_ok(gint sock, gchar *argbuf) +{ + gint ok; + gchar buf[NNTPBUFSIZE]; + + if ((ok = nntp_gen_recv(sock, buf, sizeof(buf))) == NN_SUCCESS) { + if (strlen(buf) < 4) + return NN_ERROR; + + if ((buf[0] == '1' || buf[0] == '2' || buf[0] == '3') && + buf[3] == ' ') { + if (argbuf) + strcpy(argbuf, buf); + + return NN_SUCCESS; + } else + return NN_ERROR; + } + + return ok; +} + +static void nntp_gen_send(gint sock, const gchar *format, ...) +{ + gchar buf[NNTPBUFSIZE]; + va_list args; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + if (verbose) + log_print("NNTP> %s\n", buf); + + strcat(buf, "\r\n"); + sock_write(sock, buf, strlen(buf)); +} + +static gint nntp_gen_recv(gint sock, gchar *buf, gint size) +{ + if (sock_read(sock, buf, size) == -1) + return NN_SOCKET; + + strretchomp(buf); + + if (verbose) + log_print("NNTP< %s\n", buf); + + return NN_SUCCESS; +} diff --git a/src/nntp.h b/src/nntp.h new file mode 100644 index 000000000..891ba4469 --- /dev/null +++ b/src/nntp.h @@ -0,0 +1,49 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __NNTP_H__ +#define __NNTP_H__ + +#define NN_SUCCESS 0 +#define NN_SOCKET 2 +#define NN_AUTHFAIL 3 +#define NN_PROTOCOL 4 +#define NN_SYNTAX 5 +#define NN_IOERR 6 +#define NN_ERROR 7 + +#define NNTPBUFSIZE 8192 + +gint nntp_open(const gchar *server, gushort port, gchar *buf); +gint nntp_group(gint sock, const gchar *group, + gint *num, gint *first, gint *last); +gint nntp_get_article(gint sock, const gchar *cmd, gint num, gchar **msgid); +gint nntp_article(gint sock, gint num, gchar **msgid); +gint nntp_body(gint sock, gint num, gchar **msgid); +gint nntp_head(gint sock, gint num, gchar **msgid); +gint nntp_stat(gint sock, gint num, gchar **msgid); +gint nntp_next(gint sock, gint *num, gchar **msgid); +gint nntp_xover(gint sock, gint first, gint last); +gint nntp_post(gint sock, FILE *fp); +gint nntp_newgroups(gint sock); +gint nntp_newnews(gint sock); +gint nntp_mode(gint sock, gboolean stream); +gint nntp_ok(gint sock, gchar *argbuf); + +#endif /* __NNTP_H__ */ diff --git a/src/passphrase.c b/src/passphrase.c new file mode 100644 index 000000000..40aea6385 --- /dev/null +++ b/src/passphrase.c @@ -0,0 +1,243 @@ +/* passphrase.c - GTK+ based passphrase callback + * Copyright (C) 2001 Werner Koch (dd9jn) + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <string.h> +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gdk/gdkx.h> /* GDK_DISPLAY() */ +#include <gtk/gtkmain.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtktable.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkfilesel.h> +#include <gtk/gtksignal.h> + +#include "intl.h" +#include "passphrase.h" + + +static int grab_all = 0; + +static gboolean pass_ack; + +static void passphrase_ok_cb(GtkWidget *widget, gpointer data); +static void passphrase_cancel_cb(GtkWidget *widget, gpointer data); +static void passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data); +static GtkWidget *create_description (const gchar *desc); + +void +gpgmegtk_set_passphrase_grab (gint yes) +{ + grab_all = yes; +} + +gchar * +gpgmegtk_passphrase_mbox (const gchar *desc) +{ + gchar *the_passphrase = NULL; + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *pass_label; + GtkWidget *confirm_box; + GtkWidget *window; + GtkWidget *pass_entry; + GtkWidget *ok_button; + GtkWidget *cancel_button; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_window_set_title(GTK_WINDOW(window), _("Passphrase")); + gtk_widget_set_usize(window, 450, -1); + gtk_container_set_border_width(GTK_CONTAINER(window), 4); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(passphrase_cancel_cb), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(passphrase_key_pressed), NULL); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(window), vbox); + + if (desc) { + GtkWidget *label = create_description (desc); + gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 0); + } + + table = gtk_table_new(2, 2, FALSE); + gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); + gtk_container_set_border_width(GTK_CONTAINER(table), 8); + gtk_table_set_row_spacings(GTK_TABLE(table), 12); + gtk_table_set_col_spacings(GTK_TABLE(table), 8); + + + pass_label = gtk_label_new(""); + gtk_table_attach (GTK_TABLE(table), pass_label, 0, 1, 0, 1, + GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0); + gtk_misc_set_alignment (GTK_MISC (pass_label), 1, 0.5); + + pass_entry = gtk_entry_new(); + gtk_table_attach (GTK_TABLE(table), pass_entry, 1, 2, 0, 1, + GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0); + gtk_entry_set_visibility (GTK_ENTRY(pass_entry), FALSE); + gtk_widget_grab_focus (pass_entry); + + + confirm_box = gtk_hbutton_box_new (); + gtk_button_box_set_layout (GTK_BUTTON_BOX(confirm_box), GTK_BUTTONBOX_END); + gtk_button_box_set_spacing (GTK_BUTTON_BOX(confirm_box), 5); + + ok_button = gtk_button_new_with_label (_("OK")); + GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT); + gtk_box_pack_start (GTK_BOX(confirm_box), ok_button, TRUE, TRUE, 0); + + cancel_button = gtk_button_new_with_label (_("Cancel")); + GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT); + gtk_box_pack_start(GTK_BOX(confirm_box), cancel_button, TRUE, TRUE, 0); + + gtk_box_pack_end(GTK_BOX(vbox), confirm_box, FALSE, FALSE, 0); + gtk_widget_grab_default (ok_button); + + gtk_signal_connect(GTK_OBJECT(ok_button), "clicked", + GTK_SIGNAL_FUNC(passphrase_ok_cb), NULL); + gtk_signal_connect(GTK_OBJECT(pass_entry), "activate", + GTK_SIGNAL_FUNC(passphrase_ok_cb), NULL); + gtk_signal_connect(GTK_OBJECT(cancel_button), "clicked", + GTK_SIGNAL_FUNC(passphrase_cancel_cb), NULL); + + if (grab_all) + gtk_object_set (GTK_OBJECT(window), "type", GTK_WINDOW_POPUP, NULL); + gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); + if (grab_all) + gtk_window_set_policy (GTK_WINDOW(window), FALSE, FALSE, TRUE); + + gtk_widget_show_all(window); + + if (grab_all) { + XGrabServer(GDK_DISPLAY()); + if ( gdk_pointer_grab ( window->window, TRUE, 0, + NULL, NULL, GDK_CURRENT_TIME)) { + XUngrabServer ( GDK_DISPLAY() ); + g_message ("OOPS: Could not grab mouse\n"); + gtk_widget_destroy (window); + return NULL; + } + if ( gdk_keyboard_grab( window->window, FALSE, GDK_CURRENT_TIME )) { + gdk_pointer_ungrab (GDK_CURRENT_TIME); + XUngrabServer ( GDK_DISPLAY() ); + g_message ("OOPS: Could not grab keyboard\n"); + gtk_widget_destroy (window); + return NULL; + } + } + + gtk_main(); + + if (grab_all) { + XUngrabServer (GDK_DISPLAY()); + gdk_pointer_ungrab (GDK_CURRENT_TIME); + gdk_keyboard_ungrab (GDK_CURRENT_TIME); + gdk_flush(); + } + + if (pass_ack) { + the_passphrase = gtk_entry_get_text(GTK_ENTRY(pass_entry)); + if (the_passphrase) /* Hmmm: Do we really need this? */ + the_passphrase = g_strdup (the_passphrase); + } + gtk_widget_destroy (window); + + return the_passphrase; +} + + +static void +passphrase_ok_cb(GtkWidget *widget, gpointer data) +{ + pass_ack = TRUE; + gtk_main_quit(); +} + +static void +passphrase_cancel_cb(GtkWidget *widget, gpointer data) +{ + pass_ack = FALSE; + gtk_main_quit(); +} + + +static void +passphrase_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) + passphrase_cancel_cb(NULL, NULL); +} + +static gint +linelen (const gchar *s) +{ + gint i; + + for (i = 0; *s && *s != '\n'; s++, i++) + ; + + return i; +} + +static GtkWidget * +create_description (const gchar *desc) +{ + const gchar *cmd=NULL, *uid=NULL, *info=NULL; + gchar *buf; + GtkWidget *label; + + cmd = desc; + uid = strchr (cmd, '\n'); + if (uid) { + info = strchr (++uid, '\n'); + if (info ) + info++; + } + + if (!uid) + uid = _("[no user id]"); + if (!info) + info = ""; + + buf = g_strdup_printf (_("%sPlease enter the passphrase for:\n\n" + " %.*s \n" + "(%.*s)\n"), + !strncmp (cmd, "TRY_AGAIN", 9 ) ? + _("Bad passphrase! Try again...\n\n") : "", + linelen (uid), uid, linelen (info), info); + + label = gtk_label_new (buf); + g_free (buf); + + return label; +} diff --git a/src/passphrase.h b/src/passphrase.h new file mode 100644 index 000000000..f0b733efa --- /dev/null +++ b/src/passphrase.h @@ -0,0 +1,27 @@ +/* passphrase.h - GTK+ based passphrase callback + * Copyright (C) 2001 Werner Koch (dd9jn) + * + * 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. + */ + +#ifndef GPGMEGTK_PASSPHRASE_H +#define GPGMEGTK_PASSPHRASE_H + +#include <glib.h> + +void gpgmegtk_set_passphrase_grab (gint yesno); +gchar *gpgmegtk_passphrase_mbox (const gchar *desc); + +#endif /*GPGMEGTK_PASSPHRASE_H*/ diff --git a/src/pixmaps/clip.xpm b/src/pixmaps/clip.xpm new file mode 100644 index 000000000..c425d2037 --- /dev/null +++ b/src/pixmaps/clip.xpm @@ -0,0 +1,17 @@ +/* XPM */ +static char * clip_xpm[] = { +"6 12 2 1", +" c None", +". c #000000", +" ... ", +" . .", +" . .", +".. ..", +".. ..", +".. ..", +".. ..", +". .. .", +". .", +". .", +" .... ", +" "}; diff --git a/src/pixmaps/deleted.xpm b/src/pixmaps/deleted.xpm new file mode 100644 index 000000000..988364b88 --- /dev/null +++ b/src/pixmaps/deleted.xpm @@ -0,0 +1,15 @@ +/* XPM */ +static char * deleted_xpm[] = { +"10 10 2 1", +" c None", +". c #999999", +" ", +" . .. ", +" .. ... ", +" .... ", +" .. ", +" .... ", +" ..... ", +" .. ... ", +" . . ", +" "}; diff --git a/src/pixmaps/dir-close.xpm b/src/pixmaps/dir-close.xpm new file mode 100644 index 000000000..d766258c7 --- /dev/null +++ b/src/pixmaps/dir-close.xpm @@ -0,0 +1,47 @@ +/* XPM */ +static char * DIRECTORY_CLOSE_XPM[] = { +"16 16 28 1", +" c None", +". c #000000", +"+ c #B6BB9A", +"@ c #9A9D82", +"# c #9DA285", +"$ c #858871", +"% c #E8EADF", +"& c #DDDFC8", +"* c #ECEDE2", +"= c #C4C6B3", +"- c #D2D3CA", +"; c #D6DABF", +"> c #C0C4A7", +", c #CDD2AD", +"' c #B8BC9D", +") c #B2B798", +"! c #A3A78C", +"~ c #868972", +"{ c #E3E5D4", +"] c #7A7B68", +"^ c #6E6F60", +"/ c #A6AB8E", +"( c #94987F", +"_ c #B1B596", +": c #94967D", +"< c #626556", +"[ c #D2D7B6", +"} c #53554A", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&%*=-;>.", +" .;+,+,+,')!+~.", +" .{,+,+,))!+!].", +" .;+,+,)+!+!!^.", +" .{,+,)+!+!/(^.", +" .;+,_+!+!!(:<.", +" .{,_+!+!!::~<.", +" .[]~]:]~]^<<}.", +" ............ ", +" ", +" "}; diff --git a/src/pixmaps/dir-open.xpm b/src/pixmaps/dir-open.xpm new file mode 100644 index 000000000..41f8341fa --- /dev/null +++ b/src/pixmaps/dir-open.xpm @@ -0,0 +1,53 @@ +/* XPM */ +static char * DIRECTORY_OPEN_XPM[] = { +"16 16 34 1", +" c None", +". c #000000", +"+ c #B6BB9A", +"@ c #9A9D82", +"# c #9DA285", +"$ c #858871", +"% c #A9AC97", +"& c #90937A", +"* c #A1A588", +"= c #8D9178", +"- c #81846F", +"; c #696B5A", +"> c #595B4C", +", c #313229", +"' c #868972", +") c #DBDEC5", +"! c #DFE2CD", +"~ c #CED3B2", +"{ c #505144", +"] c #606152", +"^ c #E3E5D4", +"/ c #C7CDA4", +"( c #A5AA85", +"_ c #C3C99E", +": c #55574A", +"< c #D6D8C9", +"[ c #787C61", +"} c #353535", +"| c #A0A487", +"1 c #4D4F44", +"2 c #D7DBC0", +"3 c #686B54", +"4 c #B7BAA3", +"5 c #8A8F70", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&*=-&-;.", +" ...........>,'.", +".)!~!~!~!~!~.{].", +".^/(_(_(_(_(.{:.", +" .<_(_(_(_(_[.:.", +" }!|_(_(_(_(_.1.", +" }2(_(_(_(_(3..", +" .4(5(5(5(5(5..", +" ............ ", +" ", +" "}; diff --git a/src/pixmaps/folder.xpm b/src/pixmaps/folder.xpm new file mode 100644 index 000000000..962e47d63 --- /dev/null +++ b/src/pixmaps/folder.xpm @@ -0,0 +1,80 @@ +/* XPM */ +static char * folder_xpm[] = { +"16 16 61 1", +" c None", +". c #42423F", +"+ c #74746A", +"@ c #949484", +"# c #4C4C44", +"$ c #AAAA98", +"% c #E3E3CC", +"& c #818175", +"* c #88887E", +"= c #BABAAA", +"- c #DFDFCC", +"; c #B9B9AA", +"> c #88887A", +", c #727166", +"' c #5F5D55", +") c #67655C", +"! c #4F4D46", +"~ c #5F5F55", +"{ c #DDDDC7", +"] c #D1D1BD", +"^ c #ADAD9F", +"/ c #88877E", +"( c #73726B", +"_ c #6E6C64", +": c #838175", +"< c #9B988A", +"[ c #5D5B52", +"} c #9C9C8F", +"| c #FCFCF9", +"1 c #7F7F7A", +"2 c #626057", +"3 c #717165", +"4 c #D8D8D2", +"5 c #82817C", +"6 c #3F3F38", +"7 c #C1C1B6", +"8 c #807F7A", +"9 c #57554D", +"0 c #9D9D92", +"a c #797873", +"b c #999688", +"c c #979486", +"d c #868376", +"e c #363530", +"f c #68685D", +"g c #605F5B", +"h c #8E8B7E", +"i c #939083", +"j c #8C897C", +"k c #6D6A60", +"l c #42413B", +"m c #0A0908", +"n c #000000", +"o c #585850", +"p c #7C796E", +"q c #7B796D", +"r c #403F39", +"s c #171614", +"t c #272623", +"u c #45433D", +"v c #161513", +" ", +" ", +" ", +" .+@ ", +" #$%&*=-;>,')! ", +" ~{]^/(_:<<<<[ ", +" }|1<<<<<<<<2 ", +" 345<<<<<<<<[ ", +" 678<<<<<<<<9 ", +" 0ab<<<<<cde ", +" fgh<<ijklmnn ", +" opq)rsnnnn ", +" ntuvnnnn ", +" nnn ", +" ", +" "}; diff --git a/src/pixmaps/forwarded.xpm b/src/pixmaps/forwarded.xpm new file mode 100644 index 000000000..a3cabada9 --- /dev/null +++ b/src/pixmaps/forwarded.xpm @@ -0,0 +1,23 @@ +/* XPM */ +static char * forwarded_xpm[] = { +"10 10 10 1", +" c None", +". c #000000", +"+ c #B39C82", +"@ c #BCA488", +"# c #867561", +"$ c #8F7D68", +"% c #98856E", +"& c #A18D75", +"* c #AA947B", +"= c #C5AC8F", +" ", +" .. ", +" .+. ", +"......+@. ", +".#$%&*+@=.", +".#$%&*+@=.", +"......+@. ", +" .+. ", +" .. ", +" "}; diff --git a/src/pixmaps/group.xpm b/src/pixmaps/group.xpm new file mode 100644 index 000000000..3f035cbf7 --- /dev/null +++ b/src/pixmaps/group.xpm @@ -0,0 +1,47 @@ +/* XPM */ +static char * group_xpm[] = { +"16 16 28 1", +" c None", +". c #000000", +"+ c #75BB9A", +"@ c #569D82", +"# c #59A285", +"$ c #3F8871", +"% c #B8EADF", +"& c #A6DFC8", +"* c #BFEDE2", +"= c #85C6B3", +"- c #97D3CA", +"; c #9CDABF", +"> c #81C4A7", +", c #91D2AD", +"' c #77BC9D", +") c #70B798", +"! c #60A78C", +"~ c #418972", +"{ c #AFE5D4", +"] c #347B68", +"^ c #276F60", +"/ c #63AB8E", +"( c #4F987F", +"_ c #6FB596", +": c #4F967D", +"< c #1B6556", +"[ c #97D7B6", +"} c #0B554A", +" ", +" ", +" .... ", +" .+@+@. ", +" .#$#$#$...... ", +" .%&*&*&%*=-;>.", +" .;+,+,+,')!+~.", +" .{,+,+,))!+!].", +" .;+,+,)+!+!!^.", +" .{,+,)+!+!/(^.", +" .;+,_+!+!!(:<.", +" .{,_+!+!!::~<.", +" .[]~]:]~]^<<}.", +" ............ ", +" ", +" "}; diff --git a/src/pixmaps/inbox.xpm b/src/pixmaps/inbox.xpm new file mode 100644 index 000000000..321776e44 --- /dev/null +++ b/src/pixmaps/inbox.xpm @@ -0,0 +1,25 @@ +/* XPM */ +static char * inbox_xpm[] = { +"16 16 6 1", +" c None", +". c #020204", +"+ c #A9A9AA", +"@ c #F3F3F1", +"# c #636364", +"$ c #920A0C", +" $ ", +" $$$ . ", +" $$$ ..+. ", +" $$$+$+@. ", +" ..$$$$#@@. ", +"..+++$$$+#@@. ", +".@.+$$$$@@#@@. ", +".@@.++@@@@@#@@. ", +".@@@.++@@@@@#@+.", +" .@@@.+++@@@@#@.", +" .@@@.++@@@@+#.", +" .@@@.++@++++.", +" .@@+#++++.. ", +" .@@.++.. ", +" .@... ", +" .. "}; diff --git a/src/pixmaps/linewrap.xpm b/src/pixmaps/linewrap.xpm new file mode 100644 index 000000000..bce4af2b6 --- /dev/null +++ b/src/pixmaps/linewrap.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static char * linewrap_xpm[] = { +"24 24 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" ", +" ", +" ", +" ............ . ", +" . . ", +" ............ .... ", +" . ", +" ............ ", +" ", +" ..... ", +" ", +" ............ . ", +" . . ", +" ............ .... ", +" . ", +" ..... ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/mark.xpm b/src/pixmaps/mark.xpm new file mode 100644 index 000000000..cc4baa86a --- /dev/null +++ b/src/pixmaps/mark.xpm @@ -0,0 +1,15 @@ +/* XPM */ +static char * mark_xpm[] = { +"10 10 2 1", +" c None", +". c #000000", +" ", +" . ", +" .. ", +" ... ", +" ... ", +". ... ", +".. ... ", +"..... ", +" ... ", +" . "}; diff --git a/src/pixmaps/new.xpm b/src/pixmaps/new.xpm new file mode 100644 index 000000000..1f260907b --- /dev/null +++ b/src/pixmaps/new.xpm @@ -0,0 +1,76 @@ +/* XPM */ +static char * new_xpm[] = { +"13 10 63 1", +" c None", +". c #360000", +"+ c #430000", +"@ c #370000", +"# c #FF0000", +"$ c #FFC7C4", +"% c #FFC7C5", +"& c #FFC7C3", +"* c #FFC6C1", +"= c #FFC6C2", +"- c #FFC6C3", +"; c #FFC5C1", +"> c #BA0000", +", c #FFC6C0", +"' c #FFC1B7", +") c #FFC2BA", +"! c #FFC4BE", +"~ c #FF7163", +"{ c #FFAC9F", +"] c #FFC7C0", +"^ c #FFC5BB", +"/ c #FFC4B7", +"( c #FFC5BC", +"_ c #FFC4BA", +": c #FFADA2", +"< c #FF5846", +"[ c #FFC7C6", +"} c #FFC6BF", +"| c #FFC7C2", +"1 c #FFC6BB", +"2 c #FFB7A9", +"3 c #FFAEA1", +"4 c #3B0000", +"5 c #FFC0B8", +"6 c #FFB8A7", +"7 c #FFC6B9", +"8 c #FFC3B7", +"9 c #FFBFB4", +"0 c #FF6A56", +"a c #FFC6BE", +"b c #FFC5B7", +"c c #FFC4B5", +"d c #FFBFAD", +"e c #FF8973", +"f c #FF4C36", +"g c #FFC2B9", +"h c #FFC5BA", +"i c #FFBCAA", +"j c #FFC2B4", +"k c #FFC0B3", +"l c #FF684E", +"m c #C70000", +"n c #FFAA9E", +"o c #FF503D", +"p c #FF4F39", +"q c #FF3B21", +"r c #FF6E54", +"s c #FF684B", +"t c #FF9078", +"u c #FF7E66", +"v c #FF543B", +"w c #FF8675", +"x c #8E0000", +" .+...@..... ", +".#$%&*=$$-;>.", +".-#*,%'*)!#~.", +"@={#]^/(_#:<.", +".[=}#|1]#23:.", +"45&6##7##890.", +".$'#ab#cd#ef@", +".-#g^hijklmn.", +".#opqrstuvwx.", +" ...@......@ "}; diff --git a/src/pixmaps/outbox.xpm b/src/pixmaps/outbox.xpm new file mode 100644 index 000000000..70944f13c --- /dev/null +++ b/src/pixmaps/outbox.xpm @@ -0,0 +1,27 @@ +/* XPM */ +static char * outbox_xpm[] = { +"16 16 8 1", +" c None", +". c #020204", +"+ c #99999B", +"@ c #E5E5E3", +"# c #024A6C", +"$ c #626263", +"% c #FDFDFB", +"& c #B4B4B4", +" ", +" . ####", +" ..+. ###", +" ..+++%. ####", +" ..++++$%%### #", +"..++++$$&$### ", +".%.+$$&@@###%. ", +".%%.+&@@@@#$%%. ", +".%%%.&&@@@@@$%+.", +" .%%%.&&@@@@@$@.", +" .%%%.&&@@@@&$.", +" .%%%.&@@&&&+.", +" .%%+$&&&+.. ", +" .%@.&+.. ", +" .%... ", +" .. "}; diff --git a/src/pixmaps/regular.xpm b/src/pixmaps/regular.xpm new file mode 100644 index 000000000..08f31f0db --- /dev/null +++ b/src/pixmaps/regular.xpm @@ -0,0 +1,93 @@ +/* XPM */ +static char * regular_xpm[] = { +"16 16 74 1", +" c None", +". c #6A6A6A", +"+ c #747474", +"@ c #565656", +"# c #727271", +"$ c #ABABAB", +"% c #B6B6B5", +"& c #B2B2B1", +"* c #4F4F4F", +"= c #CFCFCF", +"- c #7A7A7A", +"; c #AAAAAA", +"> c #AFAFAF", +", c #AEAEAE", +"' c #ADADAC", +") c #6C6C6C", +"! c #575757", +"~ c #6B6B6B", +"{ c #7D7D7D", +"] c #A1A1A0", +"^ c #ADADAD", +"/ c #ACACAB", +"( c #595959", +"_ c #A1A1A1", +": c #A2A2A2", +"< c #B3B3B3", +"[ c #BABABA", +"} c #B8B8B7", +"| c #B9B9B8", +"1 c #797978", +"2 c #4A4A4A", +"3 c #C9C9C9", +"4 c #C3C3C3", +"5 c #CCCCCC", +"6 c #CBCBCA", +"7 c #C7C7C7", +"8 c #C4C4C4", +"9 c #BFBFBE", +"0 c #444443", +"a c #E2E2E1", +"b c #E0E0E0", +"c c #DDDDDD", +"d c #DCDCDC", +"e c #DADAD9", +"f c #D4D4D4", +"g c #CACACA", +"h c #989897", +"i c #B2B2B2", +"j c #F0F0F0", +"k c #EAEAEA", +"l c #E7E7E7", +"m c #E4E4E4", +"n c #DEDEDE", +"o c #D8D8D8", +"p c #D2D2D1", +"q c #B0B0B0", +"r c #3D3D3D", +"s c #8F8F8F", +"t c #FCFCFC", +"u c #F7F7F7", +"v c #F1F1F1", +"w c #ECECEB", +"x c #E5E5E5", +"y c #BEBEBE", +"z c #030303", +"A c #3F3F3F", +"B c #FFFFFF", +"C c #FEFEFE", +"D c #F4F4F4", +"E c #A8A8A8", +"F c #474747", +"G c #000000", +"H c #898989", +"I c #191919", +" ", +" ", +" ", +" .+ ", +" @#$%&$ ", +" *=-;>,') ", +" !~{],>^/ ", +" (_:<[[}|1 ", +" 2343567890 ", +" abcdef=gh ", +" ijklmnopqr ", +" stuvwxy(z ", +" ABCDEFGGG ", +" H+IGG ", +" ", +" "}; diff --git a/src/pixmaps/replied.xpm b/src/pixmaps/replied.xpm new file mode 100644 index 000000000..e16ab028e --- /dev/null +++ b/src/pixmaps/replied.xpm @@ -0,0 +1,24 @@ +/* XPM */ +static char * replied_xpm[] = { +"10 10 11 1", +" c None", +". c #000000", +"+ c #E0D8B0", +"@ c #B39C82", +"# c #BCA488", +"$ c #C5AC8F", +"% c #AA947B", +"& c #A18D75", +"* c #98856E", +"= c #8F7D68", +"- c #867561", +" . ", +" .. .+. ", +" .@..+++.", +" .#@......", +".$#@%&*=-.", +".$#@%&*=. ", +" .#@.... ", +" .@. ", +" .. ", +" "}; diff --git a/src/pixmaps/stock_close.xpm b/src/pixmaps/stock_close.xpm new file mode 100644 index 000000000..88c28568e --- /dev/null +++ b/src/pixmaps/stock_close.xpm @@ -0,0 +1,29 @@ +/* XPM */ +static char * stock_close_xpm[] = { +"24 24 2 1", +" c None", +". c #000000", +" ", +" ", +" ", +" ", +" ", +" ", +" . .. ", +" .. .... ", +" .. ... ", +" ..... ", +" ... ", +" .... ", +" ...... ", +" .. .... ", +" .. .... ", +" . .. ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/stock_down_arrow.xpm b/src/pixmaps/stock_down_arrow.xpm new file mode 100644 index 000000000..e6adb7db5 --- /dev/null +++ b/src/pixmaps/stock_down_arrow.xpm @@ -0,0 +1,100 @@ +/* XPM */ +static char * stock_down_arrow_xpm[] = { +"24 24 73 1", +" c None", +". c #000000", +"+ c #607C53", +"@ c #688559", +"# c #729063", +"$ c #739364", +"% c #739264", +"& c #BEC2BB", +"* c #BEC2BA", +"= c #BFC3BB", +"- c #BDC1B8", +"; c #BBBFB7", +"> c #B9BEB5", +", c #718E62", +"' c #89A67C", +") c #8BAB7E", +"! c #90AE83", +"~ c #8FAE81", +"{ c #E7E7E7", +"] c #EAE9E9", +"^ c #ECEBEB", +"/ c #E5E4E3", +"( c #D9D9D7", +"_ c #69875B", +": c #8AA67F", +"< c #8DAD7F", +"[ c #8AAC7A", +"} c #8AAD7A", +"| c #F4F0F4", +"1 c #F5F1F5", +"2 c #F2EFF2", +"3 c #EFECEF", +"4 c #E2E1E1", +"5 c #7A956D", +"6 c #8EAA81", +"7 c #8BAD7B", +"8 c #8BAE7B", +"9 c #F6F2F6", +"0 c #F1EDF0", +"a c #ECEAEB", +"b c #859F76", +"c c #90AE81", +"d c #91B182", +"e c #F3EFF2", +"f c #EFECEE", +"g c #E4E3E3", +"h c #759267", +"i c #92AE85", +"j c #95B487", +"k c #F3EFF3", +"l c #F0EEF0", +"m c #EBEAEA", +"n c #010101", +"o c #678458", +"p c #91AA85", +"q c #99B48C", +"r c #F0ECF0", +"s c #EEECEE", +"t c #E3E2E2", +"u c #8CA480", +"v c #9DB591", +"w c #EAE9EA", +"x c #E9E8E8", +"y c #030303", +"z c #6A875B", +"A c #97B08D", +"B c #E2E0E0", +"C c #92AB87", +"D c #DCDDDA", +"E c #060606", +"F c #94A989", +"G c #D6D9D5", +"H c #1D1D1D", +" ", +" ", +" ", +" ", +" ", +" .............. ", +" .+@#$%%&*=-;>. ", +" .,')!~{]^/(. ", +" ._:<[}|1234. ", +" .56789|0a. ", +" .@bcd9efg. ", +" .hijklmn ", +" .opqrst. ", +" .uvwxy ", +" .zAtB. ", +" .CD. ", +" EFGH ", +" .. ", +" .. ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/stock_exec.xpm b/src/pixmaps/stock_exec.xpm new file mode 100644 index 000000000..777b17d6c --- /dev/null +++ b/src/pixmaps/stock_exec.xpm @@ -0,0 +1,107 @@ +/* XPM */ +static char * stock_exec_xpm[] = { +"24 24 80 1", +" c None", +". c #000000", +"+ c #B2A97E", +"@ c #B6AD81", +"# c #7A7356", +"$ c #B0A77C", +"% c #B5AC80", +"& c #BAB184", +"* c #BBB284", +"= c #B6AD80", +"- c #ADA57B", +"; c #B7AE81", +"> c #BDB486", +", c #837C5C", +"' c #B4AC80", +") c #7C7557", +"! c #C0B687", +"~ c #BEB586", +"{ c #B1A87D", +"] c #B9B082", +"^ c #C0B788", +"/ c #AFA67B", +"( c #AFA77C", +"_ c #BAB183", +": c #BBB285", +"< c #BCB385", +"[ c #C4BB8B", +"} c #C6BC8C", +"| c #C7BD8D", +"1 c #C7BE8D", +"2 c #C8BF8E", +"3 c #C8BE8D", +"4 c #C5BC8B", +"5 c #C1B788", +"6 c #B9B083", +"7 c #CDC391", +"8 c #D0C693", +"9 c #D1C794", +"0 c #D3C995", +"a c #CDC491", +"b c #C2B889", +"c c #CAC18F", +"d c #D5CB97", +"e c #D6CC97", +"f c #D6CC98", +"g c #D7CD98", +"h c #CEC491", +"i c #C2B98A", +"j c #CBC18F", +"k c #C1B889", +"l c #8A8261", +"m c #D4CA96", +"n c #C0B787", +"o c #80785A", +"p c #B9B183", +"q c #827C5B", +"r c #CFC592", +"s c #C7BD8C", +"t c #C3BA8A", +"u c #CAC08F", +"v c #D0C793", +"w c #7C7657", +"x c #D2C894", +"y c #D2C995", +"z c #CCC290", +"A c #C4BA8A", +"B c #D1C793", +"C c #CEC592", +"D c #C5BC8C", +"E c #CFC693", +"F c #C1B888", +"G c #BEB486", +"H c #C8BF8D", +"I c #C9C08F", +"J c #C9BF8E", +"K c #C5BB8B", +"L c #B2A97D", +"M c #C2B989", +"N c #BFB687", +"O c #B3AA7E", +" ", +" ", +" ", +" .... ", +" .+.@#. ", +" .$%&*=-. ", +" ..;>,$.. ", +" .-')!~@. ... ", +" ..{]~^.. ./({. . ", +" .#._#._..&:<..@. ", +" . ..>[}|1232456. ", +" .2789009a2. ", +" .bc9defge0h.. ", +" .]ij9ekl1gm83n. ", +" .*ic9dopqgmrs~. ", +" .<tu8mvwuxyzA*. ", +" ..3ax0rBxC3.. ", +" .DuhE8rz3F. ", +" .Gt}HIJ1K^*L. ", +" .~..MbN..O. ", +" . .*_;. . ", +" ... ", +" ", +" "}; diff --git a/src/pixmaps/stock_mail.xpm b/src/pixmaps/stock_mail.xpm new file mode 100644 index 000000000..0e27ce4b7 --- /dev/null +++ b/src/pixmaps/stock_mail.xpm @@ -0,0 +1,143 @@ +/* XPM */ +static char * stock_mail_xpm[] = { +"24 24 116 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #A9A9A6", +"M c #626260", +"N c #ECEBE4", +"O c #EBEAE3", +"P c #E9E7E0", +"Q c #E8E6DF", +"R c #E7E5DD", +"S c #777671", +"T c #93918C", +"U c #BEBDB8", +"V c #989793", +"W c #ECEAE4", +"X c #E8E6DE", +"Y c #E6E4DB", +"Z c #E4E3DA", +"` c #75746F", +" . c #91908A", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #CCCBC4", +"=. c #A3A29D", +"-. c #B6B5B2", +";. c #BCBCB7", +">. c #CDCCC6", +",. c #959490", +"'. c #ECEBE5", +"). c #61615E", +"!. c #E9E8E0", +"~. c #CECDC7", +"{. c #797875", +"]. c #969590", +"^. c #CFCEC8", +"/. c #AEADA8", +"(. c #585754", +"_. c #7B7A76", +" ", +" ", +" ", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . ", +" . A * B ( ; C D E u F G H I J K . ", +" . L / ( _ : M t N O l P Q R S T . ", +" . # _ g U V W 0 l P X R Y Z ` .. ", +" . ; g ..+.@.G x y #.$.%.&.*.=.. . ", +" . -.t ;.F G x y #.K >.,.. . . ", +" . '.).G !.Q ~.H . . . ", +" . {.].^./.. . . ", +" . (._.. . ", +" . . ", +" ", +" ", +" "}; diff --git a/src/pixmaps/stock_mail_attach.xpm b/src/pixmaps/stock_mail_attach.xpm new file mode 100644 index 000000000..dc14e6d33 --- /dev/null +++ b/src/pixmaps/stock_mail_attach.xpm @@ -0,0 +1,134 @@ +/* XPM */ +static char * stock_mail_attach_xpm[] = { +"24 24 107 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F6F6F3", +"{ c #F5F5F2", +"] c #F2F1ED", +"^ c #F1F0EC", +"/ c #F0EFEA", +"( c #EFEEE9", +"_ c #4F4F4D", +": c #BDBCB8", +"< c #A7A6A3", +"[ c #C6C6C4", +"} c #7C7C7B", +"| c #525251", +"1 c #F5F4F1", +"2 c #F4F3F0", +"3 c #999894", +"4 c #62625F", +"5 c #BCBCB6", +"6 c #EBE9E3", +"7 c #838381", +"8 c #D7D6D4", +"9 c #A8A8A6", +"0 c #7E7D7C", +"a c #DAD9D5", +"b c #EFEEE8", +"c c #EEEDE7", +"d c #4F4E4C", +"e c #BCBBB6", +"f c #EBE9E2", +"g c #EAE8E1", +"h c #F6F5F2", +"i c #B5B4B1", +"j c #9B9A97", +"k c #92918E", +"l c #EEEDE8", +"m c #EDECE6", +"n c #4E4E4C", +"o c #797976", +"p c #797874", +"q c #E9E8E1", +"r c #E8E7DF", +"s c #B4B3AF", +"t c #D0D0CD", +"u c #BEBDB9", +"v c #7A7A77", +"w c #979691", +"x c #EAE9E2", +"y c #959590", +"z c #787773", +"A c #B8B7B0", +"B c #E6E4DC", +"C c #A9A9A6", +"D c #626260", +"E c #ECEBE4", +"F c #EBEAE3", +"G c #E9E7E0", +"H c #E8E6DF", +"I c #E7E5DD", +"J c #777671", +"K c #93918C", +"L c #BEBDB8", +"M c #989793", +"N c #ECEAE4", +"O c #E8E6DE", +"P c #E6E4DB", +"Q c #E4E3DA", +"R c #75746F", +"S c #91908A", +"T c #EEECE7", +"U c #62615F", +"V c #EBEAE4", +"W c #E7E6DE", +"X c #E6E5DC", +"Y c #E5E4DB", +"Z c #E4E2DA", +"` c #CCCBC4", +" . c #A3A29D", +".. c #B6B5B2", +"+. c #BCBCB7", +"@. c #CDCCC6", +"#. c #959490", +"$. c #ECEBE5", +"%. c #61615E", +"&. c #E9E8E0", +"*. c #CECDC7", +"=. c #797875", +"-. c #969590", +";. c #CFCEC8", +">. c #AEADA8", +",. c #585754", +"'. c #7B7A76", +" ", +" . . . . ", +" . . . ", +" . . . . ", +" . . . . ", +" . . . . . . . . ", +" . . . . . . . + @ # $ . ", +" . . . . . % . & * = - ; > , . ", +" . ' ) ! . ~ { . * ] ^ / ( _ : < . ", +" . [ } | . 1 2 . ] # / ( 3 4 5 6 . ", +" . 7 8 9 . 0 a . # / b c d e f g . ", +" . h 1 . i j . k l m n o p q r s . ", +" . t * . ^ ; . u v n w x y z A B . ", +" . C ] ^ . . D m E F g G H I J K . ", +" . # / b L M N 6 g G O I P Q R S . ", +" . ; b T U V x q r W X Y Z ` .. . ", +" . ..m +.w x q r W B @.#.. . . ", +" . $.%.x &.H *.y . . . ", +" . =.-.;.>.. . . ", +" . ,.'.. . ", +" . . ", +" ", +" ", +" "}; diff --git a/src/pixmaps/stock_mail_compose.xpm b/src/pixmaps/stock_mail_compose.xpm new file mode 100644 index 000000000..77da55df5 --- /dev/null +++ b/src/pixmaps/stock_mail_compose.xpm @@ -0,0 +1,144 @@ +/* XPM */ +static char * stock_mail_compose_xpm[] = { +"24 24 117 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #D8BE6A", +"M c #A9A9A6", +"N c #626260", +"O c #ECEBE4", +"P c #EBEAE3", +"Q c #E9E7E0", +"R c #E8E6DF", +"S c #E7E5DD", +"T c #777671", +"U c #93918C", +"V c #8E7D45", +"W c #BEBDB8", +"X c #989793", +"Y c #ECEAE4", +"Z c #E8E6DE", +"` c #E6E4DB", +" . c #E4E3DA", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #B6B5B2", +"=. c #BCBCB7", +"-. c #CDCCC6", +";. c #959490", +">. c #ECEBE5", +",. c #61615E", +"'. c #E9E8E0", +"). c #CECDC7", +"!. c #797875", +"~. c #969590", +"{. c #CFCEC8", +"]. c #AEADA8", +"^. c #585754", +"/. c #7B7A76", +"(. c #AD8E30", +"_. c #756020", +":. c #060605", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . . ", +" . A * B ( ; C D E u F G H I J K . . L . ", +" . M / ( _ : N t O P l Q R S T U . L V . ", +" . # _ g W X Y 0 l Q Z S ` .. L V . ", +" . ; g ..+.@.G x y #.$.%.&.. L V . ", +" . *.t =.F G x y #.K -.;.. L V . ", +" . >.,.G '.R ).H . . . L V . ", +" . !.~.{.].. . . . L V . ", +" . ^./.. . . L V . ", +" . . . L V . ", +" (._.. . ", +" :.. ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/stock_mail_forward.xpm b/src/pixmaps/stock_mail_forward.xpm new file mode 100644 index 000000000..5d12c8f70 --- /dev/null +++ b/src/pixmaps/stock_mail_forward.xpm @@ -0,0 +1,153 @@ +/* XPM */ +static char * stock_mail_forward_xpm[] = { +"24 24 126 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #A9A9A6", +"M c #626260", +"N c #ECEBE4", +"O c #EBEAE3", +"P c #E9E7E0", +"Q c #E8E6DF", +"R c #E7E5DD", +"S c #777671", +"T c #93918C", +"U c #BEBDB8", +"V c #989793", +"W c #ECEAE4", +"X c #E8E6DE", +"Y c #E6E4DB", +"Z c #E4E3DA", +"` c #75746F", +" . c #91908A", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #CCCBC4", +"=. c #A3A29D", +"-. c #B6B5B2", +";. c #BCBCB7", +">. c #CDCCC6", +",. c #959490", +"'. c #ECEBE5", +"). c #61615E", +"!. c #E9E8E0", +"~. c #CECDC7", +"{. c #797875", +"]. c #969590", +"^. c #CFCEC8", +"/. c #AEADA8", +"(. c #585754", +"_. c #7B7A76", +":. c #B39C82", +"<. c #BCA488", +"[. c #746554", +"}. c #7D6D5B", +"|. c #867561", +"1. c #8F7D68", +"2. c #98856E", +"3. c #A18D75", +"4. c #AA947B", +"5. c #C5AC8F", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . ", +" . A * B ( ; C D E u F G H I J K . ", +" . L / ( _ : M t N O l P Q R S T . ", +" . # _ g U V W 0 l P X R Y Z ` .. ", +" . ; g ..+.@.G x y #.$.%.&.*.=.. . ", +" . -.t ;.F G x y #.K >.,.. . . ", +" . '.).G !.Q ~.H . . . ", +" . {.].^./.. . . ", +" . (._.. . . . ", +" . . . :.. ", +" . . . . . . . . :.<.. ", +" . [.}.|.1.2.3.4.:.<.5.. ", +" . [.}.|.1.2.3.4.:.<.5.. ", +" . . . . . . . . :.<.. ", +" . :.. ", +" . . "}; diff --git a/src/pixmaps/stock_mail_receive.xpm b/src/pixmaps/stock_mail_receive.xpm new file mode 100644 index 000000000..5ad326ebc --- /dev/null +++ b/src/pixmaps/stock_mail_receive.xpm @@ -0,0 +1,175 @@ +/* XPM */ +static char * stock_mail_receive_xpm[] = { +"24 24 148 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #A9A9A6", +"M c #626260", +"N c #ECEBE4", +"O c #EBEAE3", +"P c #E9E7E0", +"Q c #E8E6DF", +"R c #E7E5DD", +"S c #777671", +"T c #93918C", +"U c #BEBDB8", +"V c #989793", +"W c #ECEAE4", +"X c #E8E6DE", +"Y c #E6E4DB", +"Z c #E4E3DA", +"` c #75746F", +" . c #91908A", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #CCCBC4", +"=. c #A3A29D", +"-. c #B6B5B2", +";. c #BCBCB7", +">. c #CDCCC6", +",. c #959490", +"'. c #ECEBE5", +"). c #61615E", +"!. c #E9E8E0", +"~. c #CECDC7", +"{. c #7C6D5A", +"]. c #797875", +"^. c #969590", +"/. c #CFCEC8", +"(. c #AEADA8", +"_. c #8A7A65", +":. c #8F7D68", +"<. c #93816B", +"[. c #585754", +"}. c #7B7A76", +"|. c #9D8A72", +"1. c #A18E76", +"2. c #A69179", +"3. c #AB977D", +"4. c #B09A80", +"5. c #B49E83", +"6. c #B8A286", +"7. c #BDA689", +"8. c #BEA78A", +"9. c #C2AB8E", +"0. c #C7AE91", +"a. c #CBB294", +"b. c #CFB697", +"c. c #8F7E68", +"d. c #CCB395", +"e. c #D1B798", +"f. c #D5BB9B", +"g. c #D9BF9E", +"h. c #DEC3A1", +"i. c #E2C6A5", +"j. c #E6CAA8", +"k. c #A79379", +"l. c #897963", +"m. c #E8CBA9", +"n. c #ECCFAC", +"o. c #F0D3AF", +"p. c #93826B", +"q. c #D7BC9C", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . ", +" . A * B ( ; C D E u F G H I J K . ", +" . L / ( _ : M t N O l P Q R S T . ", +" . # _ g U V W 0 l P X R Y Z ` .. ", +" . ; g ..+.@.G x y #.$.%.&.*.=.. . ", +" . -.t ;.F G x y #.K >.,.. . . ", +" . '.).G !.Q ~.H . . . . {.. ", +" . ].^./.(.. . . . _.:.<.. ", +" . [.}.. . . |.1.2.. ", +" . . . 3.4.5.6.7.. ", +" . . . 8.9.0.a.b.. . . ", +" . c.d.e.f.g.h.i.j.k.. ", +" . . l.m.n.o.p.. . ", +" . . q.. . ", +" . ", +" "}; diff --git a/src/pixmaps/stock_mail_receive_all.xpm b/src/pixmaps/stock_mail_receive_all.xpm new file mode 100644 index 000000000..c74d97bc4 --- /dev/null +++ b/src/pixmaps/stock_mail_receive_all.xpm @@ -0,0 +1,181 @@ +/* XPM */ +static char * stock_mail_receive_all_xpm[] = { +"24 24 154 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #A9A9A6", +"M c #626260", +"N c #ECEBE4", +"O c #EBEAE3", +"P c #E9E7E0", +"Q c #E8E6DF", +"R c #E7E5DD", +"S c #777671", +"T c #93918C", +"U c #BEBDB8", +"V c #989793", +"W c #ECEAE4", +"X c #E8E6DE", +"Y c #E6E4DB", +"Z c #E4E3DA", +"` c #75746F", +" . c #91908A", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #CCCBC4", +"=. c #A3A29D", +"-. c #B6B5B2", +";. c #0C0C0B", +">. c #090909", +",. c #070707", +"'. c #CDCCC6", +"). c #959490", +"!. c #0C0B0B", +"~. c #71685B", +"{. c #0B0B0B", +"]. c #E9E8E0", +"^. c #CECDC7", +"/. c #7C6D5A", +"(. c #897965", +"_. c #8F7E6A", +":. c #96846F", +"<. c #403F3D", +"[. c #8A7A65", +"}. c #8F7D68", +"|. c #93816B", +"1. c #998770", +"2. c #9F8C76", +"3. c #9D8972", +"4. c #9D8A72", +"5. c #A18E76", +"6. c #A69179", +"7. c #AB977D", +"8. c #A79279", +"9. c #AA957C", +"0. c #B8A286", +"a. c #BDA689", +"b. c #B09A80", +"c. c #B49E83", +"d. c #BEA78A", +"e. c #C2AB8E", +"f. c #C7AE91", +"g. c #CBB294", +"h. c #CFB697", +"i. c #8F7E68", +"j. c #CCB395", +"k. c #D1B798", +"l. c #D5BB9B", +"m. c #D9BF9E", +"n. c #DEC3A1", +"o. c #E2C6A5", +"p. c #E6CAA8", +"q. c #A79379", +"r. c #897963", +"s. c #E8CBA9", +"t. c #ECCFAC", +"u. c #F0D3AF", +"v. c #93826B", +"w. c #D7BC9C", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . ", +" . A * B ( ; C D E u F G H I J K . ", +" . L / ( _ : M t N O l P Q R S T . ", +" . # _ g U V W 0 l P X R Y Z ` .. ", +" . ; g ..+.@.G x y #.$.%.&.*.=.. . ", +" . -.;.>.,.G x y #.K '.).. . . ", +" . !.~.{.].Q ^.H . . . . /.. ", +" . (._.:.<.. . . . [.}.|.. ", +" . 1.2.3.. . 4.5.6.. ", +" . 7.8.9.0.a.. . 7.b.c.0.a.. ", +" . . . d.e.f.g.h.. . . . . d.e.f.g.h.. . . ", +" . i.j.k.l.m.n.o.p.q.. i.j.k.l.m.n.o.p.q.. ", +" . . r.s.t.u.v.. . . . r.s.t.u.v.. . ", +" . . w.. . . . w.. . ", +" . . ", +" "}; diff --git a/src/pixmaps/stock_mail_reply.xpm b/src/pixmaps/stock_mail_reply.xpm new file mode 100644 index 000000000..94905b816 --- /dev/null +++ b/src/pixmaps/stock_mail_reply.xpm @@ -0,0 +1,154 @@ +/* XPM */ +static char * stock_mail_reply_xpm[] = { +"24 24 127 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #A9A9A6", +"M c #626260", +"N c #ECEBE4", +"O c #EBEAE3", +"P c #E9E7E0", +"Q c #E8E6DF", +"R c #E7E5DD", +"S c #777671", +"T c #93918C", +"U c #BEBDB8", +"V c #989793", +"W c #ECEAE4", +"X c #E8E6DE", +"Y c #E6E4DB", +"Z c #E4E3DA", +"` c #75746F", +" . c #91908A", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #CCCBC4", +"=. c #A3A29D", +"-. c #B6B5B2", +";. c #BCBCB7", +">. c #CDCCC6", +",. c #959490", +"'. c #ECEBE5", +"). c #61615E", +"!. c #E9E8E0", +"~. c #CECDC7", +"{. c #797875", +"]. c #969590", +"^. c #CFCEC8", +"/. c #AEADA8", +"(. c #E0D8B0", +"_. c #585754", +":. c #7B7A76", +"<. c #B39C82", +"[. c #BCA488", +"}. c #C5AC8F", +"|. c #AA947B", +"1. c #A18D75", +"2. c #98856E", +"3. c #8F7D68", +"4. c #867561", +"5. c #7D6D5B", +"6. c #746554", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . ", +" . A * B ( ; C D E u F G H I J K . ", +" . L / ( _ : M t N O l P Q R S T . ", +" . # _ g U V W 0 l P X R Y Z ` .. ", +" . ; g ..+.@.G x y #.$.%.&.*.=.. . ", +" . -.t ;.F G x y #.K >.,.. . . ", +" . '.).G !.Q ~.H . . . . ", +" . {.].^./.. . . . (.. ", +" . _.:.. . . . . (.(.(.. ", +" . . . <.. . (.(.(.. ", +" . [.<.. . . . . . . . ", +" . }.[.<.|.1.2.3.4.5.6.. ", +" . }.[.<.|.1.2.3.4.5.. ", +" . [.<.. . . . . . ", +" . <.. ", +" . . "}; diff --git a/src/pixmaps/stock_mail_reply_to_all.xpm b/src/pixmaps/stock_mail_reply_to_all.xpm new file mode 100644 index 000000000..6086a8606 --- /dev/null +++ b/src/pixmaps/stock_mail_reply_to_all.xpm @@ -0,0 +1,126 @@ +/* XPM */ +static char * stock_mail_reply_to_all_xpm[] = { +"24 24 99 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #E0D8B0", +"b c #838381", +"c c #D7D6D4", +"d c #A8A8A6", +"e c #515150", +"f c #7E7D7C", +"g c #DAD9D5", +"h c #EFEEE8", +"i c #EEEDE7", +"j c #EBE9E2", +"k c #F6F5F2", +"l c #F4F3EF", +"m c #B5B4B1", +"n c #9B9A97", +"o c #646361", +"p c #92918E", +"q c #EEEDE8", +"r c #EDECE6", +"s c #B39C82", +"t c #E9E8E1", +"u c #E8E7DF", +"v c #D0D0CD", +"w c #F2F2ED", +"x c #BFBEBA", +"y c #BEBDB9", +"z c #7A7A77", +"A c #BCA488", +"B c #A9A9A6", +"C c #626260", +"D c #C5AC8F", +"E c #AA947B", +"F c #A18D75", +"G c #98856E", +"H c #8F7D68", +"I c #867561", +"J c #7D6D5B", +"K c #746554", +"L c #BEBDB8", +"M c #989793", +"N c #ECEAE4", +"O c #EEECE7", +"P c #62615F", +"Q c #EBEAE4", +"R c #EAE9E2", +"S c #B6B5B2", +"T c #BCBCB7", +"U c #979691", +"V c #E7E6DE", +"W c #ECEBE5", +"X c #61615E", +"Y c #E9E8E0", +"Z c #E8E6DF", +"` c #CECDC7", +" . c #959590", +".. c #797875", +"+. c #969590", +"@. c #CFCEC8", +"#. c #AEADA8", +"$. c #585754", +"%. c #7B7A76", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . a . ", +" . b c d e f g / # _ h i . . j . a a a . ", +" . k 4 l m n o p q r . s . t u . a a a . ", +" . v * w ( ; x y z . A s . . . . . . . . ", +" . B / ( _ : C r . D A s E F G H I J K . ", +" . # _ h L M N . D A s E F G H I J . ", +" . ; h O P Q R t . A s . . . . . . ", +" . S r T U R t u V . s . . . . ", +" . W X R Y Z ` .. . . . ", +" . ..+.@.#.. . . . a . ", +" . $.%.. . . . . a a a . ", +" . . . s . . a a a . ", +" . A s . . . . . . . . ", +" . D A s E F G H I J K . ", +" . D A s E F G H I J . ", +" . A s . . . . . . ", +" . s . ", +" . . "}; diff --git a/src/pixmaps/stock_mail_send.xpm b/src/pixmaps/stock_mail_send.xpm new file mode 100644 index 000000000..f53bfa8e3 --- /dev/null +++ b/src/pixmaps/stock_mail_send.xpm @@ -0,0 +1,162 @@ +/* XPM */ +static char * stock_mail_send_xpm[] = { +"24 24 135 2", +" c None", +". c #000000", +"+ c #7B7B78", +"@ c #C7C7C3", +"# c #F1F0EB", +"$ c #BFBFBC", +"% c #5F5E5E", +"& c #E3E3DF", +"* c #F3F3EF", +"= c #F2F2EE", +"- c #F1F1EC", +"; c #F0EFEB", +"> c #D2D2CD", +", c #969592", +"' c #616060", +") c #B5B5B4", +"! c #F8F8F6", +"~ c #F7F7F5", +"{ c #F6F6F3", +"] c #F5F5F2", +"^ c #F4F4F0", +"/ c #F2F1ED", +"( c #F1F0EC", +"_ c #F0EFEA", +": c #EFEEE9", +"< c #4F4F4D", +"[ c #BDBCB8", +"} c #A7A6A3", +"| c #C6C6C4", +"1 c #7C7C7B", +"2 c #525251", +"3 c #DBDBD9", +"4 c #F5F4F1", +"5 c #F4F3F0", +"6 c #F3F2EE", +"7 c #999894", +"8 c #62625F", +"9 c #BCBCB6", +"0 c #EBE9E3", +"a c #838381", +"b c #D7D6D4", +"c c #A8A8A6", +"d c #515150", +"e c #7E7D7C", +"f c #DAD9D5", +"g c #EFEEE8", +"h c #EEEDE7", +"i c #4F4E4C", +"j c #BCBBB6", +"k c #EBE9E2", +"l c #EAE8E1", +"m c #F6F5F2", +"n c #F4F3EF", +"o c #B5B4B1", +"p c #9B9A97", +"q c #646361", +"r c #92918E", +"s c #EEEDE8", +"t c #EDECE6", +"u c #4E4E4C", +"v c #797976", +"w c #797874", +"x c #E9E8E1", +"y c #E8E7DF", +"z c #B4B3AF", +"A c #D0D0CD", +"B c #F2F2ED", +"C c #BFBEBA", +"D c #BEBDB9", +"E c #7A7A77", +"F c #979691", +"G c #EAE9E2", +"H c #959590", +"I c #787773", +"J c #B8B7B0", +"K c #E6E4DC", +"L c #A9A9A6", +"M c #626260", +"N c #ECEBE4", +"O c #EBEAE3", +"P c #E9E7E0", +"Q c #E8E6DF", +"R c #E7E5DD", +"S c #777671", +"T c #93918C", +"U c #BEBDB8", +"V c #989793", +"W c #ECEAE4", +"X c #E8E6DE", +"Y c #E6E4DB", +"Z c #E4E3DA", +"` c #75746F", +" . c #91908A", +".. c #EEECE7", +"+. c #62615F", +"@. c #EBEAE4", +"#. c #E7E6DE", +"$. c #E6E5DC", +"%. c #E5E4DB", +"&. c #E4E2DA", +"*. c #CCCBC4", +"=. c #A3A29D", +"-. c #B6B5B2", +";. c #BCBCB7", +">. c #CDCCC6", +",. c #959490", +"'. c #ECEBE5", +"). c #61615E", +"!. c #E9E8E0", +"~. c #CECDC7", +"{. c #797875", +"]. c #969590", +"^. c #CFCEC8", +"/. c #AEADA8", +"(. c #282828", +"_. c #6D675E", +":. c #786F64", +"<. c #585754", +"[. c #7B7A76", +"}. c #736A5B", +"|. c #908570", +"1. c #928875", +"2. c #665C4E", +"3. c #8C816F", +"4. c #9B907F", +"5. c #0F0E0B", +"6. c #AB9A87", +"7. c #A8967F", +"8. c #998873", +"9. c #B6A38A", +"0. c #8C7C69", +"a. c #C8B298", +"b. c #B7A38A", +"c. c #DAC2A5", +"d. c #B49E84", +" ", +" ", +" . . . . ", +" . . . . . + @ # $ . ", +" . . . . . % $ & * = - ; > , . ", +" . ' ) ! ~ { ] ^ * / ( _ : < [ } . ", +" . | 1 2 3 4 5 6 / # _ : 7 8 9 0 . ", +" . a b c d e f / # _ g h i j k l . ", +" . m 4 n o p q r s t u v w x y z . ", +" . A * B ( ; C D E u F G H I J K . ", +" . L / ( _ : M t N O l P Q R S T . ", +" . # _ g U V W 0 l P X R Y Z ` .. ", +" . ; g ..+.@.G x y #.$.%.&.*.=.. . ", +" . -.t ;.F G x y #.K >.,.. . . ", +" . '.).G !.Q ~.H . . . . . ", +" . {.].^./.. . . (._.:.. ", +" . <.[.. . . }.|.1.2.. ", +" . . . . . 3.4.. 5.. ", +" . 6.7.. ", +" . 8.9.9.0.. ", +" . a.a.a.a.. ", +" . b.c.c.c.c.d.. ", +" . . . . . . . . ", +" "}; diff --git a/src/pixmaps/stock_paste.xpm b/src/pixmaps/stock_paste.xpm new file mode 100644 index 000000000..81072cf8b --- /dev/null +++ b/src/pixmaps/stock_paste.xpm @@ -0,0 +1,132 @@ +/* XPM */ +static char * stock_paste_xpm[] = { +"24 24 105 2", +" c None", +". c #000000", +"+ c #CFCDBE", +"@ c #CFCCBD", +"# c #CFCBBC", +"$ c #D0CFBE", +"% c #CFCEBE", +"& c #CECABB", +"* c #D1CFBE", +"= c #7E7E74", +"- c #2F2F2B", +"; c #595855", +"> c #A09F9C", +", c #CCC9BB", +"' c #595956", +") c #DDDDDA", +"! c #ACABA5", +"~ c #7E7C72", +"{ c #3E3C38", +"] c #CDC9BB", +"^ c #CCC9BA", +"/ c #4D4D4B", +"( c #7E7C73", +"_ c #CDCABB", +": c #CBC9BA", +"< c #CAC8B9", +"[ c #73736E", +"} c #4D4C46", +"| c #A4A195", +"1 c #CAC7B8", +"2 c #CFCDBD", +"3 c #CFCCBC", +"4 c #CFCBBB", +"5 c #CAC9B9", +"6 c #CAC8B8", +"7 c #C9C6B8", +"8 c #D1D1BC", +"9 c #919182", +"0 c #CBC9B9", +"a c #272727", +"b c #AEAEA8", +"c c #B7B7A5", +"d c #D4D4BE", +"e c #D8D8C2", +"f c #EAEAE2", +"g c #707070", +"h c #B3B3AC", +"i c #D7D7C1", +"j c #DBDBC4", +"k c #ACAC9B", +"l c #DDDDD9", +"m c #42423A", +"n c #A5A595", +"o c #DADAC3", +"p c #DEDEC7", +"q c #E2E2CA", +"r c #C9C7B8", +"s c #C9C5B6", +"t c #616156", +"u c #A5A594", +"v c #D9D9C3", +"w c #DDDDC6", +"x c #E1E1C9", +"y c #E4E4CD", +"z c #B4B4A1", +"A c #C7C5B5", +"B c #C5C1B1", +"C c #C0BEAB", +"D c #BBBBA7", +"E c #DCDCC5", +"F c #E0E0C9", +"G c #E3E3CC", +"H c #E7E7CF", +"I c #EBEBD3", +"J c #A3A391", +"K c #C3C0AF", +"L c #C3BFAE", +"M c #C2BEAE", +"N c #C1BDAC", +"O c #BAB8A5", +"P c #929284", +"Q c #DFDFC8", +"R c #E2E2CB", +"S c #E6E6CF", +"T c #EAEAD2", +"U c #EEEED5", +"V c #F2F2D9", +"W c #C0BBAA", +"X c #BCB9A6", +"Y c #B8B4A1", +"Z c #B7B3A0", +"` c #E5E5CE", +" . c #E9E9D1", +".. c #EDEDD5", +"+. c #F1F1D8", +"@. c #F5F5DC", +"#. c #A7A796", +"$. c #B9B5A1", +"%. c #B8B4A0", +"&. c #AEAE9C", +"*. c #E8E8D0", +"=. c #ECECD4", +"-. c #F0F0D7", +";. c #A6A696", +">. c #9F9F8F", +" ", +" ", +" ", +" . . . ", +" . . + @ # . . ", +" . . $ % @ # & . . . . . . ", +" . . * $ = - ; > & , . . . . . . ", +" . * * * ' ) ! ~ { ] ^ . . ", +" . * * $ / ! ( { _ , : < . ", +" . $ % [ } | _ , : < 1 . . . ", +" . % 2 3 4 & ] : 5 6 7 . . 8 9 . ", +" . @ # & _ ^ 0 6 . a b c d e . ", +" . # & _ , : < 1 . f g h i j k . ", +" . & , : 5 1 7 . l m n o p q . ", +" . ] ^ 5 6 r s . t u v w x y z . ", +" . : 1 A B C . D e E F G H I J . ", +" . K L M N O . P j Q R S T U V . ", +" . W X Y Z . . p q ` ...+.@.#.. ", +" . $.%.. . . &.y *.=.-.;.. . ", +" . . . H I J . . ", +" . >.. . ", +" . ", +" ", +" "}; diff --git a/src/pixmaps/stock_preferences.xpm b/src/pixmaps/stock_preferences.xpm new file mode 100644 index 000000000..d68760dcf --- /dev/null +++ b/src/pixmaps/stock_preferences.xpm @@ -0,0 +1,80 @@ +/* XPM */ +static char * stock_preferences_xpm[] = { +"24 24 53 1", +" c None", +". c #000000", +"+ c #E5E5E5", +"@ c #CECECE", +"# c #CDCDCD", +"$ c #DCCB94", +"% c #DCDCDC", +"& c #C7C7C7", +"* c #8E7D45", +"= c #CFCFCF", +"- c #C1C1C1", +"; c #AB5959", +"> c #D9D9D9", +", c #878787", +"' c #DBDBDB", +") c #D4D4D4", +"! c #A84F4F", +"~ c #A7A7A7", +"{ c #9B9B9B", +"] c #F5F5F5", +"^ c #F3F3F3", +"/ c #A65757", +"( c #6E6E6E", +"_ c #DACACA", +": c #AC5757", +"< c #C48B8B", +"[ c #AA6C6C", +"} c #E9DDDD", +"| c #A65353", +"1 c #C6C6C6", +"2 c #D4C38D", +"3 c #E4E4E4", +"4 c #D6D6D0", +"5 c #C0C0BB", +"6 c #828279", +"7 c #AD8E30", +"8 c #756020", +"9 c #C5C5BF", +"0 c #A7A79A", +"a c #818174", +"b c #DFE1E1", +"c c #D6E1E0", +"d c #060605", +"e c #A3A395", +"f c #C8C8C8", +"g c #8B8B7D", +"h c #7E7E71", +"i c #B2B9B6", +"j c #D9D9D2", +"k c #D9D9D3", +"l c #DADAD4", +"m c #DADAD9", +"n c #DADADA", +" ", +" ", +" ", +" .. ", +" ..+@. . ", +" ..#+++. .$. ", +" ...%+++++&. .$*. ", +" ..#++++=+-++. .$*. ", +" .%++++;+>+=,+'.$*. ", +" .)++++!~+{,++.$*. ", +" .++]^/+(+++.$*. ", +" .%_:<[++++.$*.>. ", +" .+}|/+++.$*.=+1. ", +" .)+++++.2*.>3456. ", +" .+++]78..90000a. ", +" .%+bcd.ee0000f. ", +" .+0ghijkl+m.. ", +" .)+++++++f. ", +" .++++++.. ", +" .%+++f. ", +" .+n.. ", +" .. ", +" ", +" "}; diff --git a/src/pixmaps/stock_properties.xpm b/src/pixmaps/stock_properties.xpm new file mode 100644 index 000000000..c13d7ae8b --- /dev/null +++ b/src/pixmaps/stock_properties.xpm @@ -0,0 +1,140 @@ +/* XPM */ +static char * stock_properties_xpm[] = { +"24 24 113 2", +" c None", +". c #000000", +"+ c #ADAD9C", +"@ c #959585", +"# c #DCDCC5", +"$ c #DFDFC8", +"% c #242424", +"& c #A7A796", +"* c #D7D7C1", +"= c #D9D9C3", +"- c #DCDCC4", +"; c #DDDDC7", +"> c #E1E1CA", +", c #D8BE6A", +"' c #A6A694", +") c #D6D6BF", +"! c #D8D8C2", +"~ c #DBDBC4", +"{ c #A2A291", +"] c #E3E3CB", +"^ c #B2B29F", +"/ c #8E7D45", +"( c #7C7C7C", +"_ c #646464", +": c #D5D5BD", +"< c #D5D5BF", +"[ c #D7D7C0", +"} c #9E9E8D", +"| c #ABAB98", +"1 c #E1E1C9", +"2 c #E5E5CD", +"3 c #E9E9D1", +"4 c #343434", +"5 c #E7E7E7", +"6 c #373736", +"7 c #B8B8A6", +"8 c #D3D3BC", +"9 c #909081", +"0 c #9F9F8E", +"a c #DDDDC5", +"b c #E0E0C8", +"c c #A2A292", +"d c #ECECD4", +"e c #EEEED5", +"f c #ECECEC", +"g c #EDEDED", +"h c #3D3D37", +"i c #8A8A7A", +"j c #E6E6CE", +"k c #9A9A8A", +"l c #EAEAD2", +"m c #EEEEE5", +"n c #3C3C3C", +"o c #8F8F80", +"p c #D0D0B9", +"q c #999988", +"r c #ECECD3", +"s c #EFEFD6", +"t c #EEEEE6", +"u c #505050", +"v c #929282", +"w c #D1D1B9", +"x c #969686", +"y c #E7E7CF", +"z c #EBEBD2", +"A c #F5F5DC", +"B c #D2D2BC", +"C c #E9E9D0", +"D c #EDEDD4", +"E c #E3E3DC", +"F c #797973", +"G c #D8D8C1", +"H c #919182", +"I c #949484", +"J c #EAEAD1", +"K c #D9D9CC", +"L c #BFBFB0", +"M c #ACACA5", +"N c #9F9F93", +"O c #98988F", +"P c #E4E4CC", +"Q c #AD8E30", +"R c #756020", +"S c #C4C4B0", +"T c #9D9D8D", +"U c #818174", +"V c #DFDFC7", +"W c #E2E2CA", +"X c #060605", +"Y c #9B9B8B", +"Z c #9C9C8C", +"` c #BEBEAE", +" . c #8B8B7D", +".. c #7E7E71", +"+. c #C0C0AC", +"@. c #C2C2AE", +"#. c #C3C3AF", +"$. c #DADAC3", +"%. c #4E4E4E", +"&. c #E8E8D0", +"*. c #A0A090", +"=. c #F2F2D9", +"-. c #F3F3DA", +";. c #F4F4DB", +">. c #828274", +",. c #EBEBD3", +"'. c #F1F1D8", +"). c #F0F0D7", +"!. c #A5A594", +"~. c #BBBBA8", +"{. c #CDCDB8", +"]. c #4D4D45", +"^. c #A6A696", +" ", +" ", +" . ", +" . . + . ", +" . . @ # $ % . ", +" . . & * = - ; > . . , . ", +" . . ' ) * * ! ~ { ] ^ . . , / . ", +" . ( _ ) : < [ } | 1 2 3 4 . , / . ", +" . 5 6 7 8 9 0 a b 2 c d e . , / . ", +" . f g h i < ~ b j k l e . , / . ", +" . m m n o p b q q r s . , / . ", +" . t u v w - x y z e . , / . A . ", +" . . x B ~ x ] C D . , / . A A E . ", +" . F G H I > y J . , / . A K L M N . ", +" . O ~ # $ P y Q R . . S T T T T U . ", +" . V b W 2 3 X . Y Z T T T T . . ", +" . ` 2 2 T ...+.@.#.S A $.. ", +" %.&.*.l D s =.-.;.=.>.. ", +" . ,.d D s '.=.=.$.. ", +" . s ).'.=.3 !.. ", +" . ~.=.-.{.].. ", +" . -.^.. ", +" . . ", +" "}; diff --git a/src/pixmaps/stock_search.xpm b/src/pixmaps/stock_search.xpm new file mode 100644 index 000000000..645eff5ce --- /dev/null +++ b/src/pixmaps/stock_search.xpm @@ -0,0 +1,155 @@ +/* XPM */ +static char * stock_search_xpm[] = { +"24 24 128 2", +" c None", +". c #000000", +"+ c #ADAD9C", +"@ c #959585", +"# c #DCDCC5", +"$ c #DFDFC8", +"% c #242424", +"& c #A7A796", +"* c #D7D7C1", +"= c #D9D9C3", +"- c #DCDCC4", +"; c #DDDDC7", +"> c #E1E1CA", +", c #A6A694", +"' c #D6D6BF", +") c #D8D8C2", +"! c #DBDBC4", +"~ c #DFDFC7", +"{ c #E3E3CB", +"] c #B2B29F", +"^ c #7C7C7C", +"/ c #646464", +"( c #D5D5BD", +"_ c #D5D5BF", +": c #D7D7C0", +"< c #DADAC3", +"[ c #DEDEC6", +"} c #E1E1C9", +"| c #E5E5CD", +"1 c #E9E9D1", +"2 c #343434", +"3 c #E7E7E7", +"4 c #373736", +"5 c #B8B8A6", +"6 c #D3D3BC", +"7 c #D9D9C2", +"8 c #DDDDC5", +"9 c #E0E0C8", +"0 c #E8E8D0", +"a c #ECECD4", +"b c #EEEED5", +"c c #ECECEC", +"d c #EDEDED", +"e c #3D3D37", +"f c #CECEB7", +"g c #E6E6CE", +"h c #EAEAD2", +"i c #F1F1D8", +"j c #A5A594", +"k c #EEEEE5", +"l c #3C3C3C", +"m c #8F8F80", +"n c #D0D0B9", +"o c #B4B4A0", +"p c #46463E", +"q c #090908", +"r c #4A4A42", +"s c #C1C1AD", +"t c #F2F2D9", +"u c #F3F3DA", +"v c #EEEEE6", +"w c #505050", +"x c #929282", +"y c #D1D1B9", +"z c #B0B09D", +"A c #33332D", +"B c #9D9D8D", +"C c #CFCFB9", +"D c #C4C4AF", +"E c #8D8D7F", +"F c #34342F", +"G c #C3C3AF", +"H c #F4F4DB", +"I c #F5F5DC", +"J c #969686", +"K c #D2D2BC", +"L c #45453E", +"M c #9C9C8C", +"N c #E2E2D0", +"O c #EDEDE5", +"P c #C0C0AC", +"Q c #828274", +"R c #4B4B43", +"S c #BEBEAB", +"T c #797973", +"U c #D8D8C1", +"V c #DDDDC6", +"W c #080807", +"X c #FBFBFA", +"Y c #C3C3AE", +"Z c #B5B5A2", +"` c #A6A695", +" . c #959586", +".. c #98988F", +"+. c #080808", +"@. c #CACAB5", +"#. c #DDDDD0", +"$. c #B7B7A4", +"%. c #AAAA98", +"&. c #9B9B8B", +"*. c #8C8C7D", +"=. c #818174", +"-. c #E2E2CA", +";. c #46463F", +">. c #929283", +",. c #BABAA7", +"'. c #ADAD9B", +"). c #9F9F8E", +"!. c #909081", +"~. c #727266", +"{. c #4B4B44", +"]. c #BEBEAE", +"^. c #33332E", +"/. c #878779", +"(. c #A0A090", +"_. c #737367", +":. c #4E4E4E", +"<. c #BEBEAA", +"[. c #404040", +"}. c #6F6F6F", +"|. c #EBEBD3", +"1. c #EDEDD4", +"2. c #EFEFD6", +"3. c #F0F0D7", +"4. c #BBBBA8", +"5. c #CDCDB8", +"6. c #4D4D45", +"7. c #A6A696", +" ", +" ", +" . ", +" . . + . ", +" . . @ # $ % ", +" . . & * = - ; > . ", +" . . , ' * * ) ! ~ { ] . ", +" . ^ / ' ( _ : < [ } | 1 2 ", +" . 3 4 5 6 * 7 8 9 | 0 a b . ", +" . c d e f _ ! 9 g 0 h b i j . ", +" . k k l m n o p q q r s t u . ", +" . v w x y z A B C D E F G H I . ", +" . . J K ! L M N O P ] Q R I I S . ", +" . T U 7 V W _ X Y Z ` .q I I I ) . ", +" . ..! # $ +.@.#.$.%.&.*.q I I I =.. ", +" . ~ 9 -.;.>.,.'.).!.~.{.I I . . ", +" . ].| | ,.^./.(.>._.. . < . ", +" :.0 1 h <.r q q [.}.. . ", +" . |.a 1.2.i t t < . . . . ", +" . 2.3.i t 1 j . . . . ", +" . 4.t u 5.6.. . . . ", +" . u 7.. . . ", +" . . ", +" "}; diff --git a/src/pixmaps/stock_trash.xpm b/src/pixmaps/stock_trash.xpm new file mode 100644 index 000000000..11c9ebcc4 --- /dev/null +++ b/src/pixmaps/stock_trash.xpm @@ -0,0 +1,112 @@ +/* XPM */ +static char * stock_trash_xpm[] = { +"24 24 85 1", +" c None", +". c #000000", +"+ c #252525", +"@ c #A8BA9E", +"# c #B4C1AB", +"$ c #E1E7DD", +"% c #838A7D", +"& c #909F86", +"* c #484E43", +"= c #A0AD94", +"- c #9EAB91", +"; c #B6C4AD", +"> c #BFCCB7", +", c #A7B69B", +"' c #BEC9B5", +") c #656F5E", +"! c #2B2E28", +"~ c #353931", +"{ c #242622", +"] c #9BAA8F", +"^ c #9AA78E", +"/ c #98A58C", +"( c #96A58D", +"_ c #D7DED2", +": c #A4B398", +"< c #A2B196", +"[ c #A0B095", +"} c #97A38A", +"| c #7C9674", +"1 c #B0C0AB", +"2 c #CED6C8", +"3 c #DAE1D6", +"4 c #BBC4B1", +"5 c #5B6B57", +"6 c #637354", +"7 c #748C6B", +"8 c #94AA8D", +"9 c #8FA58A", +"0 c #6F8668", +"a c #667961", +"b c #5D6E58", +"c c #4D5A4B", +"d c #485245", +"e c #738B6E", +"f c #687B63", +"g c #5E6F5A", +"h c #576452", +"i c #495345", +"j c #4F5B4B", +"k c #3F453D", +"l c #687D63", +"m c #B9C6B4", +"n c #65785F", +"o c #9BAE97", +"p c #525F4F", +"q c #728A6D", +"r c #4F5C4C", +"s c #6E8468", +"t c #4D5849", +"u c #9BAD96", +"v c #6E8368", +"w c #080808", +"x c #6E8367", +"y c #B7C6B4", +"z c #9AAD96", +"A c #525F4E", +"B c #4D5848", +"C c #687A63", +"D c #B7C5B4", +"E c #6D8367", +"F c #4C5848", +"G c #809A78", +"H c #A0B29A", +"I c #60725C", +"J c #728A6B", +"K c #4F5B4C", +"L c #586853", +"M c #677A61", +"N c #7D9775", +"O c #7A9472", +"P c #788F71", +"Q c #748D6E", +"R c #6F8568", +"S c #6D8267", +"T c #697D64", +" ", +" ", +" ", +" ", +" ........ ", +" +.@#$%&*=-.. ", +" .;>,')!~{-]^/. ", +" .(_':<[=-]^/}. ", +" .|1234=-]^/|5. ", +" .67899||0abcd. ", +" .+effghijk+. ", +" .l++++++++f. ", +" .lmnopqrstf. ", +" .lmnupqrvtf.www ", +" .lmnupqrxtf.wwww ", +" .lynzAqrxBC.wwww ", +" .lDnzAqrEFC.wwww ", +" .GHnzIJKELM.www ", +" .NOPQJRST.ww ", +" ........w ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/stock_up_arrow.xpm b/src/pixmaps/stock_up_arrow.xpm new file mode 100644 index 000000000..bb5c3195e --- /dev/null +++ b/src/pixmaps/stock_up_arrow.xpm @@ -0,0 +1,100 @@ +/* XPM */ +static char * stock_up_arrow_xpm[] = { +"24 24 73 1", +" c None", +". c #000000", +"+ c #1D1D1D", +"@ c #D6D9D5", +"# c #94A989", +"$ c #060606", +"% c #DCDDDA", +"& c #92AB87", +"* c #E2E0E0", +"= c #E3E2E2", +"- c #97B08D", +"; c #6A875B", +"> c #030303", +", c #E9E8E8", +"' c #EAE9EA", +") c #9DB591", +"! c #8CA480", +"~ c #EEECEE", +"{ c #F0ECF0", +"] c #99B48C", +"^ c #91AA85", +"/ c #678458", +"( c #010101", +"_ c #EBEAEA", +": c #F0EEF0", +"< c #F3EFF3", +"[ c #95B487", +"} c #92AE85", +"| c #759267", +"1 c #E4E3E3", +"2 c #EFECEE", +"3 c #F3EFF2", +"4 c #F6F2F6", +"5 c #91B182", +"6 c #90AE81", +"7 c #859F76", +"8 c #688559", +"9 c #ECEAEB", +"0 c #F1EDF0", +"a c #F4F0F4", +"b c #8BAE7B", +"c c #8BAD7B", +"d c #8EAA81", +"e c #7A956D", +"f c #E2E1E1", +"g c #EFECEF", +"h c #F2EFF2", +"i c #F5F1F5", +"j c #8AAD7A", +"k c #8AAC7A", +"l c #8DAD7F", +"m c #8AA67F", +"n c #69875B", +"o c #D9D9D7", +"p c #E5E4E3", +"q c #ECEBEB", +"r c #EAE9E9", +"s c #E7E7E7", +"t c #8FAE81", +"u c #90AE83", +"v c #8BAB7E", +"w c #89A67C", +"x c #718E62", +"y c #B9BEB5", +"z c #BBBFB7", +"A c #BDC1B8", +"B c #BFC3BB", +"C c #BEC2BA", +"D c #BEC2BB", +"E c #739264", +"F c #739364", +"G c #729063", +"H c #607C53", +" ", +" ", +" ", +" ", +" ", +" .. ", +" .. ", +" +@#$ ", +" .%&. ", +" .*=-;. ", +" >,')!. ", +" .=~{]^/. ", +" (_:<[}|. ", +" .12345678. ", +" .90a4bcde. ", +" .fghiajklmn. ", +" .opqrstuvwx. ", +" .yzABCDEEFG8H. ", +" .............. ", +" ", +" ", +" ", +" ", +" "}; diff --git a/src/pixmaps/sylpheed-logo.xpm b/src/pixmaps/sylpheed-logo.xpm new file mode 100644 index 000000000..d727c3921 --- /dev/null +++ b/src/pixmaps/sylpheed-logo.xpm @@ -0,0 +1,53 @@ +/* XPM */ +static char * sylpheed_logo_xpm[] = { +"128 40 10 1", +" c None", +". c #969696", +"+ c #808080", +"@ c #404040", +"# c #565656", +"$ c #ABABAB", +"% c #000000", +"& c #161616", +"* c #2B2B2B", +"= c #6B6B6B", +" .+@@@#++$ $ ", +" $#%%%%%%%%%%%&@@@@@&$ ", +" #%%*@@@@%%%%%%%%%&@+ ", +" $&@. ..", +" *+ + += +%$", +" =# $@* $=%= $#*%@ ", +" @ .*%%+ .&%%& $%%. ", +" @ $%& %%= +%* ", +" + =%= .%& @%+ ", +" + ++@++ *%$ *%= %& ", +" # =#+.+#%&= .%# .%& =%= ", +" #$ $+ $&%@ *%. *%= *% ", +" # $ $&%# .%* $%%$ .%# ", +" $# .$ =%%. *%. #%# *%$ ", +" ==++==$ $%%@ $%* $%%$ .%# ", +" %%% $$ $ #%= .+. #%@ +. +. $+$*%. ", +" %%% #%@ =%# $%& $*@ =&%%%+ $%%. $=&%# .=@@&%= .=@@&%= +#=. .%* ", +" %%% .@%%. &%. #%= +&%@ $&%@@&%@ #%* $##.&%= +$ $&%= +$ $&%= $#*. *%. ", +" +%%% $..%* =%* $%& .+ @%+$*= @%@ $%%.=#$ $%% $# +%% $# +%% +&+ .%* ", +" ++++$ =%%@ *%. &%. #%= %&$#$ %%= #%&#$ #%# $*$ %% $*$ %% #&$ *%= ", +" =%%%%%%*= *%%+ .%* =%* $%%$ +%#= .%%$ &%@ %%$ *= =%# *= =%# @%$ +%& ", +" @%&=+++#*%&= .%%& *%. &%+ #%# @%@$ #%@ =%* =%# =% =*#$ =% =*#$ +%= $&%= ", +"+%&$ +@&. *%%+ =%* =%& &%$ %%. $%%$ &%. &%$ ** .=#. ** .=#. $%* @%& ", +"+%$ $## #%%# &%+ &%= =%# +%@ *%+ =%* #%# %@ $$ %@ $$ #%= #&%# ", +".@ +# +%%@ =%& $&%& &%. *%$ @%+ &%. $%%$ %& %& $%%$ #+%%$ ", +" #$ $# @%%+ &%= .#&%= =%* $%# @%+ =%* @%@ %%. %%. =%% @+*%# $ ", +" #$ #%%*$ +%& +=.%& &%.$= #%. $**$ &%. .%%.$+ #%& +$ #%& +$ @%%$ =&+$%%$+. ", +" =#$ .#&%@= +%* +@+ *%= +%%@# $%* $#*. +%* @%%@+ $&%&+$.==$ $&%&+$.==$ #%%*@%&$ +%%*$ ", +" +##@+@@@&@@=$ + $#%&#$ .%& +%&+ .+@%##@=. @%. @%*$ $@%%%*. $@%%%*. $&%%*= +%# ", +" + *%= + +%*+$ ", +" . .%& .%= ", +" *%= *& ", +" .%& .%= ", +" .#@*@#=%%# *& ", +" .*%=$ .%&$+$ .%# ", +" .%&$ &%. &%$ ", +" *%. @%+ =%# ", +" %% @&+ &%$ ", +" @%+ =&#$ =%* ", +" +=@=+ $%%. "}; diff --git a/src/pixmaps/tb_address_book.xpm b/src/pixmaps/tb_address_book.xpm new file mode 100644 index 000000000..289be56f6 --- /dev/null +++ b/src/pixmaps/tb_address_book.xpm @@ -0,0 +1,56 @@ +/* XPM */ +static char * tb_address_book_xpm[] = { +"24 24 29 1", +" c None", +". c #000000", +"+ c #4B6772", +"@ c #70929F", +"# c #668B99", +"$ c #5E808D", +"% c #B6B6B5", +"& c #52707B", +"* c #23393F", +"= c #A6A7A4", +"- c #888D82", +"; c #577782", +"> c #5B7D8A", +", c #9E6769", +"' c #3C4035", +") c #54594B", +"! c #4E6A75", +"~ c #91948E", +"{ c #AE8182", +"] c #E1D5D2", +"^ c #F1F0EC", +"/ c #AAAAA7", +"( c #636361", +"_ c #C2C2C0", +": c #14090A", +"< c #85A3AE", +"[ c #CCCDC4", +"} c #7697A3", +"| c #999D91", +" ", +" ", +" ", +" ", +" .......... ", +" .+@#$$$$$$. ", +" .@#$$$$$$.% ", +" .&@$$*$$$$.% ", +" .@#$**$$$.%% ", +" .@#$*$*$$$.%=. ", +" .&@$****$$.%%-. ", +" .@#*$$$*$$.%=. ", +" .;@$$$$$*$.%%-. ", +" .>#$$$$$$$.%=. ", +" .,...')!$$.%%~. ", +" .{]^^^/(...%=. ", +" .,]^^^^^^^_%~. ", +" :..<[^^^^_=. ", +" ...}[^|-. ", +" ...$. ", +" .. ", +" ", +" ", +" "}; diff --git a/src/pixmaps/trash.xpm b/src/pixmaps/trash.xpm new file mode 100644 index 000000000..1f735d5b7 --- /dev/null +++ b/src/pixmaps/trash.xpm @@ -0,0 +1,32 @@ +/* XPM */ +static char *trash_xpm[] = { +/* columns rows colors chars-per-pixel */ +"16 16 10 1", +" c None", +". c Black", +"X c #242622", +"o c #b4c1ab", +"O c #98a58c", +"+ c #4a5846", +"@ c #353931", +"# c #7c8672", +"$ c #dae1d6", +"% c #637354", +/* pixels */ +" ", +" ...... ", +" X.ooO+OO.. ", +".Oooo@XOOO#. ", +".#o$$OOOO#%. ", +".%#OO##%%++. ", +" .X#%%++@X. ", +" .%XXXXXX%. ", +" .%o+O+#+%.... ", +" .%o+O+#+%..... ", +" .%o+O+#+%..... ", +" .#o+O+#+%.... ", +" .###%#%... ", +" ....... ", +" ", +" " +}; diff --git a/src/pixmaps/unread.xpm b/src/pixmaps/unread.xpm new file mode 100644 index 000000000..b1c2f7688 --- /dev/null +++ b/src/pixmaps/unread.xpm @@ -0,0 +1,59 @@ +/* XPM */ +static char * unread_xpm[] = { +"13 10 46 1", +" c None", +". c #000036", +"+ c #000040", +"@ c #0000FF", +"# c #C6C7FF", +"$ c #C7C7FF", +"% c #C6C6FF", +"& c #C7C6FF", +"* c #C6C5FF", +"= c #0000AF", +"- c #C3C1FF", +"; c #C3C2FF", +"> c #C6C4FF", +", c #7371FF", +"' c #AEACFF", +") c #C7C5FF", +"! c #B1ADFF", +"~ c #5E58FF", +"{ c #0000DA", +"] c #BBB7FF", +"^ c #B2AEFF", +"/ c #000038", +"( c #C3C0FF", +"_ c #BBB8FF", +": c #0000E3", +"< c #0000F9", +"[ c #C6C3FF", +"} c #C3BFFF", +"| c #766AFF", +"1 c #C7C4FF", +"2 c #9289FF", +"3 c #5A4CFF", +"4 c #C0BCFF", +"5 c #C6C2FF", +"6 c #7368FF", +"7 c #0000AD", +"8 c #AEAAFF", +"9 c #5250FF", +"0 c #524FFF", +"a c #413BFF", +"b c #766EFF", +"c c #9890FF", +"d c #857EFF", +"e c #5D54FF", +"f c #8C86FF", +"g c #00007E", +" .+......... ", +".@#$$%&$$%*=.", +".%@&&$-&;>@,.", +".%'@$*>)>@!~.", +".$&&@$&${]^!.", +"/($_@:&<@[}|.", +".$-@&)@1}@23.", +".&@;*)45(678.", +".@90ab6cdefg.", +" ........... "}; diff --git a/src/pop.c b/src/pop.c new file mode 100644 index 000000000..1d5116e6c --- /dev/null +++ b/src/pop.c @@ -0,0 +1,446 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <ctype.h> +#include <unistd.h> + +#include "intl.h" +#include "pop.h" +#include "socket.h" +#include "md5ify.h" +#include "prefs_account.h" +#include "utils.h" +#include "inc.h" +#include "recv.h" + +static gint pop3_ok(gint sock, gchar *argbuf); +static void pop3_gen_send(gint sock, const gchar *format, ...); +static gint pop3_gen_recv(gint sock, gchar *buf, gint size); + +gint pop3_greeting_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + gchar buf[POPBUFSIZE]; + + if (pop3_ok(sock, buf) == PS_SUCCESS) { + if (state->ac_prefs->protocol == A_APOP) { + state->greeting = g_strdup(buf); + return POP3_GETAUTH_APOP_SEND; + } else + return POP3_GETAUTH_USER_SEND; + } else + return -1; +} + +gint pop3_getauth_user_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + g_return_val_if_fail(state->user != NULL, -1); + + inc_progress_update(state, POP3_GETAUTH_USER_SEND); + + pop3_gen_send(sock, "USER %s", state->user); + + return POP3_GETAUTH_USER_RECV; +} + +gint pop3_getauth_user_recv(gint sock, gpointer data) +{ + if (pop3_ok(sock, NULL) == PS_SUCCESS) + return POP3_GETAUTH_PASS_SEND; + else + return -1; +} + +gint pop3_getauth_pass_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + g_return_val_if_fail(state->pass != NULL, -1); + + pop3_gen_send(sock, "PASS %s", state->pass); + + return POP3_GETAUTH_PASS_RECV; +} + +gint pop3_getauth_pass_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + if (pop3_ok(sock, NULL) == PS_SUCCESS) + return POP3_GETRANGE_STAT_SEND; + else { + log_warning(_("error occurred on authorization\n")); + state->error_val = PS_AUTHFAIL; + return -1; + } +} + +gint pop3_getauth_apop_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + gchar *start, *end; + gchar *apop_str, *md5sum; + + g_return_val_if_fail(state->user != NULL, -1); + g_return_val_if_fail(state->pass != NULL, -1); + + inc_progress_update(state, POP3_GETAUTH_APOP_SEND); + + if ((start = strchr(state->greeting, '<')) == NULL) { + log_warning(_("Required APOP timestamp not found " + "in greeting\n")); + return -1; + } + + if ((end = strchr(start, '>')) == NULL || end == start + 1) { + log_warning(_("Timestamp syntax error in greeting\n")); + return -1; + } + + *(end + 1) = '\0'; + + apop_str = g_strconcat(start, state->pass, NULL); + md5sum = MD5Digest(apop_str); + g_free(apop_str); + + pop3_gen_send(sock, "APOP %s %s", state->user, md5sum); + + return POP3_GETAUTH_APOP_RECV; +} + +gint pop3_getauth_apop_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + if (pop3_ok(sock, NULL) == PS_SUCCESS) + return POP3_GETRANGE_STAT_SEND; + else { + log_warning(_("error occurred on authorization\n")); + state->error_val = PS_AUTHFAIL; + return -1; + } +} + +gint pop3_getrange_stat_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + inc_progress_update(state, POP3_GETRANGE_STAT_SEND); + + pop3_gen_send(sock, "STAT"); + + return POP3_GETRANGE_STAT_RECV; +} + +gint pop3_getrange_stat_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + gchar buf[POPBUFSIZE + 1]; + gint ok; + + if ((ok = pop3_ok(sock, buf)) == PS_SUCCESS) { + if (sscanf(buf, "%d %d", &state->count, &state->bytes) != 2) { + log_warning(_("POP3 protocol error\n")); + return -1; + } else { + if (state->count == 0) + return POP3_LOGOUT_SEND; + else { + state->cur_msg = 1; + state->new = state->count; + if (state->ac_prefs->rmmail || + state->ac_prefs->getall) + return POP3_RETR_SEND; + else + return POP3_GETRANGE_UIDL_SEND; + } + } + } else if (ok == PS_PROTOCOL) + return POP3_LOGOUT_SEND; + else + return -1; +} + +gint pop3_getrange_last_send(gint sock, gpointer data) +{ + pop3_gen_send(sock, "LAST"); + + return POP3_GETRANGE_LAST_RECV; +} + +gint pop3_getrange_last_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + gchar buf[POPBUFSIZE + 1]; + + if (pop3_ok(sock, buf) == PS_SUCCESS) { + gint last; + + if (sscanf(buf, "%d", &last) == 0) { + log_warning(_("POP3 protocol error\n")); + return -1; + } else { + if (state->count == last) + return POP3_LOGOUT_SEND; + else { + state->new = state->count - last; + state->cur_msg = last + 1; + return POP3_RETR_SEND; + } + } + } else + return POP3_RETR_SEND; +} + +gint pop3_getrange_uidl_send(gint sock, gpointer data) +{ + pop3_gen_send(sock, "UIDL"); + + return POP3_GETRANGE_UIDL_RECV; +} + +gint pop3_getrange_uidl_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + gboolean nb; + gboolean new = FALSE; + gchar buf[POPBUFSIZE]; + gchar id[IDLEN + 1]; + + if (pop3_ok(sock, NULL) != PS_SUCCESS) return POP3_GETRANGE_LAST_SEND; + + if (!state->id_table) new = TRUE; + + nb = sock_is_nonblocking_mode(sock); + if (nb && (sock_set_nonblocking_mode(sock, FALSE) < 0)) return -1; + + while (sock_read(sock, buf, sizeof(buf)) >= 0) { + gint num; + + if (buf[0] == '.') break; + if (sscanf(buf, "%d %" Xstr(IDLEN) "s", &num, id) != 2) + continue; + + if (new == FALSE && + g_hash_table_lookup(state->id_table, id) == NULL) { + state->new = state->count - num + 1; + state->cur_msg = num; + new = TRUE; + } + + if (new == TRUE) + state->new_id_list = g_slist_append + (state->new_id_list, g_strdup(id)); + else + state->id_list = g_slist_append + (state->id_list, g_strdup(id)); + } + + if (nb && (sock_set_nonblocking_mode(sock, TRUE) < 0)) return -1; + + if (new == TRUE) + return POP3_RETR_SEND; + else + return POP3_LOGOUT_SEND; +} + +gint pop3_retr_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + inc_progress_update(state, POP3_RETR_SEND); + + pop3_gen_send(sock, "RETR %d", state->cur_msg); + + return POP3_RETR_RECV; +} + +gint pop3_retr_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + const gchar *file; + gint ok, drop_ok; + + if ((ok = pop3_ok(sock, NULL)) == PS_SUCCESS) { + if (recv_write_to_file(sock, (file = get_tmp_file())) < 0) { + state->inc_state = INC_NOSPACE; + return -1; + } + if ((drop_ok = inc_drop_message(file, state)) < 0) { + state->inc_state = INC_ERROR; + return -1; + } + if (drop_ok == 0 && state->ac_prefs->rmmail) + return POP3_DELETE_SEND; + + if (state->new_id_list) { + state->id_list = g_slist_append + (state->id_list, state->new_id_list->data); + state->new_id_list = + g_slist_remove(state->new_id_list, + state->new_id_list->data); + } + + if (state->cur_msg < state->count) { + state->cur_msg++; + return POP3_RETR_SEND; + } else + return POP3_LOGOUT_SEND; + } else if (ok == PS_PROTOCOL) + return POP3_LOGOUT_SEND; + else + return -1; +} + +gint pop3_delete_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + //inc_progress_update(state, POP3_DELETE_SEND); + + pop3_gen_send(sock, "DELE %d", state->cur_msg); + + return POP3_DELETE_RECV; +} + +gint pop3_delete_recv(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + gint ok; + + if ((ok = pop3_ok(sock, NULL)) == PS_SUCCESS) { + if (state->cur_msg < state->count) { + state->cur_msg++; + return POP3_RETR_SEND; + } else + return POP3_LOGOUT_SEND; + } else if (ok == PS_PROTOCOL) + return POP3_LOGOUT_SEND; + else + return -1; +} + +gint pop3_logout_send(gint sock, gpointer data) +{ + Pop3State *state = (Pop3State *)data; + + inc_progress_update(state, POP3_LOGOUT_SEND); + + pop3_gen_send(sock, "QUIT"); + + return POP3_LOGOUT_RECV; +} + +gint pop3_logout_recv(gint sock, gpointer data) +{ + if (pop3_ok(sock, NULL) == PS_SUCCESS) + return -1; + else + return -1; +} + +static gint pop3_ok(gint sock, gchar *argbuf) +{ + gint ok; + gchar buf[POPBUFSIZE + 1]; + gchar *bufp; + + if ((ok = pop3_gen_recv(sock, buf, sizeof(buf))) == PS_SUCCESS) { + bufp = buf; + if (*bufp == '+' || *bufp == '-') + bufp++; + else + return PS_PROTOCOL; + + while (isalpha(*bufp)) + bufp++; + + if (*bufp) + *(bufp++) = '\0'; + + if (!strcmp(buf, "+OK")) + ok = PS_SUCCESS; + else if (!strncmp(buf, "-ERR", 4)) { + if (strstr(bufp, "lock") || + strstr(bufp, "Lock") || + strstr(bufp, "LOCK") || + strstr(bufp, "wait")) + ok = PS_LOCKBUSY; + else + ok = PS_PROTOCOL; + + if (*bufp) + fprintf(stderr, "POP3: %s\n", bufp); + } else + ok = PS_PROTOCOL; + + if (argbuf) + strcpy(argbuf, bufp); + } + + return ok; +} + +static void pop3_gen_send(gint sock, const gchar *format, ...) +{ + gchar buf[POPBUFSIZE + 1]; + va_list args; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf) - 2, format, args); + va_end(args); + + if (!strncasecmp(buf, "PASS ", 5)) + log_print("POP3> PASS ********\n"); + else + log_print("POP3> %s\n", buf); + + strcat(buf, "\r\n"); + sock_write(sock, buf, strlen(buf)); +} + +static gint pop3_gen_recv(gint sock, gchar *buf, gint size) +{ + gboolean nb; + + nb = sock_is_nonblocking_mode(sock); + + if (nb && (sock_set_nonblocking_mode(sock, FALSE) < 0)) + return PS_SOCKET; + if (sock_read(sock, buf, size) < 0) { + return PS_SOCKET; + } else { + strretchomp(buf); + log_print("POP3< %s\n", buf); + if (nb && (sock_set_nonblocking_mode(sock, TRUE) < 0)) + return PS_SOCKET; + + return PS_SUCCESS; + } +} diff --git a/src/pop.h b/src/pop.h new file mode 100644 index 000000000..840b9a91b --- /dev/null +++ b/src/pop.h @@ -0,0 +1,94 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __POP_H__ +#define __POP_H__ + +#include <glib.h> + +typedef enum { + POP3_GREETING_RECV, + POP3_GETAUTH_USER_SEND, + POP3_GETAUTH_USER_RECV, + POP3_GETAUTH_PASS_SEND, + POP3_GETAUTH_PASS_RECV, + POP3_GETAUTH_APOP_SEND, + POP3_GETAUTH_APOP_RECV, + POP3_GETRANGE_STAT_SEND, + POP3_GETRANGE_STAT_RECV, + POP3_GETRANGE_LAST_SEND, + POP3_GETRANGE_LAST_RECV, + POP3_GETRANGE_UIDL_SEND, + POP3_GETRANGE_UIDL_RECV, + POP3_RETR_SEND, + POP3_RETR_RECV, + POP3_DELETE_SEND, + POP3_DELETE_RECV, + POP3_LOGOUT_SEND, + POP3_LOGOUT_RECV, + + N_POP3_PHASE +} Pop3Phase; + +#define POPBUFSIZE 512 +#define IDLEN 128 + +/* exit code values */ +#define PS_SUCCESS 0 /* successful receipt of messages */ +#define PS_NOMAIL 1 /* no mail available */ +#define PS_SOCKET 2 /* socket I/O woes */ +#define PS_AUTHFAIL 3 /* user authorization failed */ +#define PS_PROTOCOL 4 /* protocol violation */ +#define PS_SYNTAX 5 /* command-line syntax error */ +#define PS_IOERR 6 /* bad permissions on rc file */ +#define PS_ERROR 7 /* protocol error */ +#define PS_EXCLUDE 8 /* client-side exclusion error */ +#define PS_LOCKBUSY 9 /* server responded lock busy */ +#define PS_SMTP 10 /* SMTP error */ +#define PS_DNS 11 /* fatal DNS error */ +#define PS_BSMTP 12 /* output batch could not be opened */ +#define PS_MAXFETCH 13 /* poll ended by fetch limit */ +/* leave space for more codes */ +#define PS_UNDEFINED 23 /* something I hadn't thought of */ +#define PS_TRANSIENT 24 /* transient failure (internal use) */ +#define PS_REFUSED 25 /* mail refused (internal use) */ +#define PS_RETAINED 26 /* message retained (internal use) */ +#define PS_TRUNCATED 27 /* headers incomplete (internal use) */ + +gint pop3_greeting_recv (gint sock, gpointer data); +gint pop3_getauth_user_send (gint sock, gpointer data); +gint pop3_getauth_user_recv (gint sock, gpointer data); +gint pop3_getauth_pass_send (gint sock, gpointer data); +gint pop3_getauth_pass_recv (gint sock, gpointer data); +gint pop3_getauth_apop_send (gint sock, gpointer data); +gint pop3_getauth_apop_recv (gint sock, gpointer data); +gint pop3_getrange_stat_send (gint sock, gpointer data); +gint pop3_getrange_stat_recv (gint sock, gpointer data); +gint pop3_getrange_last_send (gint sock, gpointer data); +gint pop3_getrange_last_recv (gint sock, gpointer data); +gint pop3_getrange_uidl_send (gint sock, gpointer data); +gint pop3_getrange_uidl_recv (gint sock, gpointer data); +gint pop3_retr_send (gint sock, gpointer data); +gint pop3_retr_recv (gint sock, gpointer data); +gint pop3_delete_send (gint sock, gpointer data); +gint pop3_delete_recv (gint sock, gpointer data); +gint pop3_logout_send (gint sock, gpointer data); +gint pop3_logout_recv (gint sock, gpointer data); + +#endif /* __POP_H__ */ diff --git a/src/prefs.c b/src/prefs.c new file mode 100644 index 000000000..3ebd5346f --- /dev/null +++ b/src/prefs.c @@ -0,0 +1,770 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <gtk/gtk.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <errno.h> + +#include "intl.h" +#include "main.h" +#include "prefs.h" +#include "utils.h" +#include "gtkutils.h" + +typedef enum +{ + DUMMY_PARAM +} DummyEnum; + +#define PREFSBUFSIZE 1024 + +void prefs_read_config(PrefParam *param, const gchar *label, + const gchar *rcfile) +{ + FILE *fp; + gchar buf[PREFSBUFSIZE]; + gchar *rcpath; + gchar *block_label; + + g_return_if_fail(param != NULL); + g_return_if_fail(label != NULL); + g_return_if_fail(rcfile != NULL); + + debug_print(_("Reading configuration...\n")); + + prefs_set_default(param); + + rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL); + if ((fp = fopen(rcpath, "r")) == NULL) { + if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); + g_free(rcpath); + return; + } + g_free(rcpath); + + block_label = g_strdup_printf("[%s]", label); + + /* search aiming block */ + while (fgets(buf, sizeof(buf), fp) != NULL) { + gint val; + + val = strncmp(buf, block_label, strlen(block_label)); + if (val == 0) { + debug_print(_("Found %s\n"), block_label); + break; + } + } + g_free(block_label); + + while (fgets(buf, sizeof(buf), fp) != NULL) { + strretchomp(buf); + /* reached next block */ + if (buf[0] == '[') break; + + prefs_config_parse_one_line(param, buf); + } + + debug_print(_("Finished reading configuration.\n")); + fclose(fp); +} + +void prefs_config_parse_one_line(PrefParam *param, const gchar *buf) +{ + gint i; + gint name_len; + const gchar *value; + + for (i = 0; param[i].name != NULL; i++) { + name_len = strlen(param[i].name); + if (strncasecmp(buf, param[i].name, name_len)) + continue; + if (buf[name_len] != '=') + continue; + value = buf + name_len + 1; + debug_print("%s = %s\n", param[i].name, value); + + switch (param[i].type) { + case P_STRING: + g_free(*((gchar **)param[i].data)); + *((gchar **)param[i].data) = + *value ? g_strdup(value) : NULL; + break; + case P_INT: + *((gint *)param[i].data) = + (gint)atoi(value); + break; + case P_BOOL: + *((gboolean *)param[i].data) = + (*value == '0' || *value == '\0') + ? FALSE : TRUE; + break; + case P_ENUM: + *((DummyEnum *)param[i].data) = + (DummyEnum)atoi(value); + break; + case P_USHORT: + *((gushort *)param[i].data) = + (gushort)atoi(value); + break; + default: + } + } +} + +#define TRY(func) \ +if (!(func)) \ +{ \ + g_warning(_("failed to write configuration to file\n")); \ + if (orig_fp) fclose(orig_fp); \ + prefs_write_close_revert(pfile); \ + g_free(rcpath); \ + g_free(block_label); \ + return; \ +} \ + +void prefs_save_config(PrefParam *param, const gchar *label, + const gchar *rcfile) +{ + FILE *orig_fp; + PrefFile *pfile; + gchar *rcpath; + gchar buf[PREFSBUFSIZE]; + gchar *block_label = NULL; + gboolean block_matched = FALSE; + + g_return_if_fail(param != NULL); + g_return_if_fail(label != NULL); + g_return_if_fail(rcfile != NULL); + + rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, rcfile, NULL); + if ((orig_fp = fopen(rcpath, "r")) == NULL) { + if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); + } + + if ((pfile = prefs_write_open(rcpath)) == NULL) { + g_warning(_("failed to write configuration to file\n")); + if (orig_fp) fclose(orig_fp); + g_free(rcpath); + return; + } + + block_label = g_strdup_printf("[%s]", label); + + /* search aiming block */ + if (orig_fp) { + while (fgets(buf, sizeof(buf), orig_fp) != NULL) { + gint val; + + val = strncmp(buf, block_label, strlen(block_label)); + if (val == 0) { + debug_print(_("Found %s\n"), block_label); + block_matched = TRUE; + break; + } else + TRY(fputs(buf, pfile->fp) != EOF); + } + } + + TRY(fprintf(pfile->fp, "%s\n", block_label) > 0); + g_free(block_label); + block_label = NULL; + + /* write all param data to file */ + TRY(prefs_write_param(param, pfile->fp) == 0); + + if (block_matched) { + while (fgets(buf, sizeof(buf), orig_fp) != NULL) { + /* next block */ + if (buf[0] == '[') { + TRY(fputc('\n', pfile->fp) != EOF && + fputs(buf, pfile->fp) != EOF); + break; + } + } + while (fgets(buf, sizeof(buf), orig_fp) != NULL) + TRY(fputs(buf, pfile->fp) != EOF); + } + + if (orig_fp) fclose(orig_fp); + if (prefs_write_close(pfile) < 0) + g_warning(_("failed to write configuration to file\n")); + g_free(rcpath); + + debug_print(_("Configuration is saved.\n")); +} + +gint prefs_write_param(PrefParam *param, FILE *fp) +{ + gint i; + gchar buf[PREFSBUFSIZE]; + + for (i = 0; param[i].name != NULL; i++) { + switch (param[i].type) { + case P_STRING: + g_snprintf(buf, sizeof(buf), "%s=%s\n", param[i].name, + *((gchar **)param[i].data) ? + *((gchar **)param[i].data) : ""); + break; + case P_INT: + g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name, + *((gint *)param[i].data)); + break; + case P_BOOL: + g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name, + *((gboolean *)param[i].data)); + break; + case P_ENUM: + g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name, + *((DummyEnum *)param[i].data)); + break; + case P_USHORT: + g_snprintf(buf, sizeof(buf), "%s=%d\n", param[i].name, + *((gushort *)param[i].data)); + break; + default: + buf[0] = '\0'; + } + + if (buf[0] != '\0') { + if (fputs(buf, fp) == EOF) { + perror("fputs"); + return -1; + } + } + } + + return 0; +} + +PrefFile *prefs_write_open(const gchar *path) +{ + PrefFile *pfile; + gchar *tmppath; + FILE *fp; + + g_return_val_if_fail(path != NULL, NULL); + + tmppath = g_strconcat(path, ".tmp", NULL); + if ((fp = fopen(tmppath, "w")) == NULL) { + FILE_OP_ERROR(tmppath, "fopen"); + g_free(tmppath); + return NULL; + } + + if (change_file_mode_rw(fp, tmppath) < 0) + FILE_OP_ERROR(tmppath, "chmod"); + + g_free(tmppath); + + pfile = g_new(PrefFile, 1); + pfile->fp = fp; + pfile->path = g_strdup(path); + + return pfile; +} + +gint prefs_write_close(PrefFile *pfile) +{ + FILE *fp; + gchar *path; + gchar *tmppath; + gchar *bakpath = NULL; + + g_return_val_if_fail(pfile != NULL, -1); + + fp = pfile->fp; + path = pfile->path; + g_free(pfile); + + tmppath = g_strconcat(path, ".tmp", NULL); + if (fclose(fp) == EOF) { + FILE_OP_ERROR(tmppath, "fclose"); + unlink(tmppath); + g_free(path); + g_free(tmppath); + return -1; + } + + if (is_file_exist(path)) { + bakpath = g_strconcat(path, ".bak", NULL); + if (rename(path, bakpath) < 0) { + FILE_OP_ERROR(path, "rename"); + unlink(tmppath); + g_free(path); + g_free(tmppath); + g_free(bakpath); + return -1; + } + } + + if (rename(tmppath, path) < 0) { + FILE_OP_ERROR(tmppath, "rename"); + unlink(tmppath); + g_free(path); + g_free(tmppath); + g_free(bakpath); + return -1; + } + + g_free(path); + g_free(tmppath); + g_free(bakpath); + return 0; +} + +gint prefs_write_close_revert(PrefFile *pfile) +{ + gchar *tmppath; + + g_return_val_if_fail(pfile != NULL, -1); + + tmppath = g_strconcat(pfile->path, ".tmp", NULL); + fclose(pfile->fp); + if (unlink(tmppath) < 0) FILE_OP_ERROR(tmppath, "unlink"); + g_free(tmppath); + g_free(pfile->path); + g_free(pfile); + + return 0; +} + +void prefs_set_default(PrefParam *param) +{ + gint i; + + g_return_if_fail(param != NULL); + + for (i = 0; param[i].name != NULL; i++) { + if (!param[i].data) continue; + + switch (param[i].type) { + case P_STRING: + if (param[i].defval != NULL) { + if (!strncasecmp(param[i].defval, "ENV_", 4)) + *((gchar **)param[i].data) = + g_strdup(g_getenv(param[i].defval + 4)); + else if (param[i].defval[0] == '~') + *((gchar **)param[i].data) = + g_strconcat(g_get_home_dir(), + param[i].defval + 1, + NULL); + else if (param[i].defval[0] != '\0') + *((gchar **)param[i].data) = + g_strdup(param[i].defval); + else + *((gchar **)param[i].data) = NULL; + } else + *((gchar **)param[i].data) = NULL; + break; + case P_INT: + if (param[i].defval != NULL) + *((gint *)param[i].data) = + (gint)atoi(param[i].defval); + else + *((gint *)param[i].data) = 0; + break; + case P_BOOL: + if (param[i].defval != NULL) { + if (!strcasecmp(param[i].defval, "TRUE")) + *((gboolean *)param[i].data) = TRUE; + else + *((gboolean *)param[i].data) = + atoi(param[i].defval) ? TRUE : FALSE; + } else + *((gboolean *)param[i].data) = FALSE; + break; + case P_ENUM: + if (param[i].defval != NULL) + *((DummyEnum*)param[i].data) = + (DummyEnum)atoi(param[i].defval); + else + *((DummyEnum *)param[i].data) = 0; + break; + case P_USHORT: + if (param[i].defval != NULL) + *((gushort *)param[i].data) = + (gushort)atoi(param[i].defval); + else + *((gushort *)param[i].data) = 0; + break; + default: + } + } +} + +void prefs_free(PrefParam *param) +{ + gint i; + + g_return_if_fail(param != NULL); + + for (i = 0; param[i].name != NULL; i++) { + if (!param[i].data) continue; + + switch (param[i].type) { + case P_STRING: + g_free(*((gchar **)param[i].data)); + break; + default: + } + } +} + +void prefs_dialog_create(PrefsDialog *dialog) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *notebook; + + GtkWidget *confirm_area; + GtkWidget *ok_btn; + GtkWidget *cancel_btn; + GtkWidget *apply_btn; + + g_return_if_fail(dialog != NULL); + + window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_container_set_border_width (GTK_CONTAINER (window), 8); + gtk_window_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal (GTK_WINDOW (window), TRUE); + gtk_window_set_policy (GTK_WINDOW(window), FALSE, TRUE, FALSE); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show(vbox); + gtk_container_add (GTK_CONTAINER (window), vbox); + + notebook = gtk_notebook_new (); + gtk_widget_show(notebook); + gtk_box_pack_start (GTK_BOX (vbox), notebook, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (notebook), 2); + /* GTK_WIDGET_UNSET_FLAGS (notebook, GTK_CAN_FOCUS); */ + gtk_notebook_set_scrollable (GTK_NOTEBOOK (notebook), TRUE); + + gtkut_button_set_create(&confirm_area, + &ok_btn, _("OK"), + &cancel_btn, _("Cancel"), + &apply_btn, _("Apply")); + gtk_widget_show(confirm_area); + gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_btn); + + dialog->window = window; + dialog->notebook = notebook; + dialog->ok_btn = ok_btn; + dialog->cancel_btn = cancel_btn; + dialog->apply_btn = apply_btn; +} + +void prefs_button_toggled(GtkToggleButton *toggle_btn, GtkWidget *widget) +{ + gboolean is_active; + + is_active = gtk_toggle_button_get_active(toggle_btn); + gtk_widget_set_sensitive(widget, is_active); +} + +void prefs_set_dialog(PrefParam *param) +{ + gint i; + + for (i = 0; param[i].name != NULL; i++) { + if (param[i].widget_set_func) + param[i].widget_set_func(¶m[i]); + } +} + +void prefs_set_data_from_dialog(PrefParam *param) +{ + gint i; + + for (i = 0; param[i].name != NULL; i++) { + if (param[i].data_set_func) + param[i].data_set_func(¶m[i]); + } +} + +void prefs_set_dialog_to_default(PrefParam *param) +{ + gint i; + PrefParam tmpparam; + gchar *str_data = NULL; + gint int_data; + gushort ushort_data; + gboolean bool_data; + DummyEnum enum_data; + + for (i = 0; param[i].name != NULL; i++) { + if (!param[i].widget_set_func) continue; + + tmpparam = param[i]; + + switch (tmpparam.type) { + case P_STRING: + if (tmpparam.defval) { + if (!strncasecmp(tmpparam.defval, "ENV_", 4)) { + str_data = g_strdup(g_getenv(param[i].defval + 4)); + tmpparam.data = &str_data; + break; + } else if (tmpparam.defval[0] == '~') { + str_data = + g_strconcat(g_get_home_dir(), + param[i].defval + 1, + NULL); + tmpparam.data = &str_data; + break; + } + } + tmpparam.data = &tmpparam.defval; + break; + case P_INT: + if (tmpparam.defval) + int_data = atoi(tmpparam.defval); + else + int_data = 0; + tmpparam.data = &int_data; + break; + case P_USHORT: + if (tmpparam.defval) + ushort_data = atoi(tmpparam.defval); + else + ushort_data = 0; + tmpparam.data = &ushort_data; + break; + case P_BOOL: + if (tmpparam.defval) { + if (!strcasecmp(tmpparam.defval, "TRUE")) + bool_data = TRUE; + else + bool_data = atoi(tmpparam.defval) + ? TRUE : FALSE; + } else + bool_data = FALSE; + tmpparam.data = &bool_data; + break; + case P_ENUM: + if (tmpparam.defval) + enum_data = (DummyEnum)atoi(tmpparam.defval); + else + enum_data = 0; + tmpparam.data = &enum_data; + break; + case P_OTHER: + } + tmpparam.widget_set_func(&tmpparam); + g_free(str_data); + str_data = NULL; + } +} + +void prefs_set_data_from_entry(PrefParam *pparam) +{ + gchar **str, *entry_str; + + g_return_if_fail(*pparam->widget != NULL); + + entry_str = gtk_entry_get_text(GTK_ENTRY(*pparam->widget)); + + switch (pparam->type) { + case P_STRING: + str = (gchar **)pparam->data; + g_free(*str); + *str = entry_str[0] ? g_strdup(entry_str) : NULL; + break; + case P_USHORT: + *((gushort *)pparam->data) = atoi(entry_str); + break; + case P_INT: + *((gint *)pparam->data) = atoi(entry_str); + break; + default: + g_warning("Invalid PrefType for GtkEntry widget: %d\n", + pparam->type); + } +} + +void prefs_set_entry(PrefParam *pparam) +{ + gchar **str; + + g_return_if_fail(*pparam->widget != NULL); + + switch (pparam->type) { + case P_STRING: + str = (gchar **)pparam->data; + gtk_entry_set_text(GTK_ENTRY(*pparam->widget), + *str ? *str : ""); + break; + case P_INT: + gtk_entry_set_text(GTK_ENTRY(*pparam->widget), + itos(*((gint *)pparam->data))); + break; + case P_USHORT: + gtk_entry_set_text(GTK_ENTRY(*pparam->widget), + itos(*((gushort *)pparam->data))); + break; + default: + g_warning("Invalid PrefType for GtkEntry widget: %d\n", + pparam->type); + } +} + +void prefs_set_data_from_text(PrefParam *pparam) +{ + gchar **str; + gchar *text, *tp; + gchar *tmp, *tmpp; + + g_return_if_fail(*pparam->widget != NULL); + + switch (pparam->type) { + case P_STRING: + str = (gchar **)pparam->data; + g_free(*str); + tp = text = gtk_editable_get_chars + (GTK_EDITABLE(*pparam->widget), 0, -1); + if (text[0] == '\0') { + *str = NULL; + g_free(text); + break; + } + + Xalloca(tmpp = tmp, strlen(text) * 2 + 1, + { *str = NULL; break; }); + while (*tp) { + if (*tp == '\n') { + *tmpp++ = '\\'; + *tmpp++ = 'n'; + tp++; + } else + *tmpp++ = *tp++; + } + *tmpp = '\0'; + *str = g_strdup(tmp); + g_free(text); + break; + default: + g_warning("Invalid PrefType for GtkText widget: %d\n", + pparam->type); + } +} + +void prefs_set_text(PrefParam *pparam) +{ + gchar *buf, *sp, *bufp; + gchar **str; + GtkText *text; + + g_return_if_fail(*pparam->widget != NULL); + + switch (pparam->type) { + case P_STRING: + str = (gchar **)pparam->data; + if (*str) { + bufp = buf = alloca(strlen(*str) + 1); + if (!buf) buf = ""; + else { + sp = *str; + while (*sp) { + if (*sp == '\\' && *(sp + 1) == 'n') { + *bufp++ = '\n'; + sp += 2; + } else + *bufp++ = *sp++; + } + *bufp = '\0'; + } + } else + buf = ""; + + text = GTK_TEXT(*pparam->widget); + gtk_text_set_point(text, 0); + gtk_text_forward_delete(text, gtk_text_get_length(text)); + gtk_text_set_point(text, 0); + gtk_text_insert(text, NULL, NULL, NULL, buf, -1); + break; + default: + g_warning("Invalid PrefType for GtkText widget: %d\n", + pparam->type); + } +} + +void prefs_set_data_from_toggle(PrefParam *pparam) +{ + g_return_if_fail(pparam->type == P_BOOL); + g_return_if_fail(*pparam->widget != NULL); + + *((gboolean *)pparam->data) = + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(*pparam->widget)); +} + +void prefs_set_toggle(PrefParam *pparam) +{ + g_return_if_fail(pparam->type == P_BOOL); + g_return_if_fail(*pparam->widget != NULL); + + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(*pparam->widget), + *((gboolean *)pparam->data)); +} + +void prefs_set_data_from_spinbtn(PrefParam *pparam) +{ + g_return_if_fail(*pparam->widget != NULL); + + switch (pparam->type) { + case P_INT: + *((gint *)pparam->data) = + gtk_spin_button_get_value_as_int + (GTK_SPIN_BUTTON(*pparam->widget)); + break; + case P_USHORT: + *((gushort *)pparam->data) = + (gushort)gtk_spin_button_get_value_as_int + (GTK_SPIN_BUTTON(*pparam->widget)); + break; + default: + g_warning("Invalid PrefType for GtkSpinButton widget: %d\n", + pparam->type); + } +} + +void prefs_set_spinbtn(PrefParam *pparam) +{ + g_return_if_fail(*pparam->widget != NULL); + + switch (pparam->type) { + case P_INT: + gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pparam->widget), + (gfloat)*((gint *)pparam->data)); + break; + case P_USHORT: + gtk_spin_button_set_value(GTK_SPIN_BUTTON(*pparam->widget), + (gfloat)*((gushort *)pparam->data)); + break; + default: + g_warning("Invalid PrefType for GtkSpinButton widget: %d\n", + pparam->type); + } +} diff --git a/src/prefs.h b/src/prefs.h new file mode 100644 index 000000000..e01b386e7 --- /dev/null +++ b/src/prefs.h @@ -0,0 +1,147 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PREFS_H__ +#define __PREFS_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtksignal.h> +#include <gtk/gtklabel.h> +#include <gtk/gtknotebook.h> +#include <gtk/gtkcheckbutton.h> +#include <gtk/gtkbox.h> +#include <stdio.h> + +typedef struct _PrefParam PrefParam; +typedef struct _PrefFile PrefFile; +typedef struct _PrefsDialog PrefsDialog; + +#include "account.h" + +typedef enum +{ + P_STRING, + P_INT, + P_BOOL, + P_ENUM, + P_USHORT, + P_OTHER +} PrefType; + +typedef void (*DataSetFunc) (PrefParam *pparam); +typedef void (*WidgetSetFunc) (PrefParam *pparam); + +struct _PrefParam { + gchar *name; + gchar *defval; + gpointer data; + PrefType type; + GtkWidget **widget; + DataSetFunc data_set_func; + WidgetSetFunc widget_set_func; +}; + +struct _PrefFile { + FILE *fp; + gchar *path; +}; + +struct _PrefsDialog +{ + GtkWidget *window; + GtkWidget *notebook; + + GtkWidget *ok_btn; + GtkWidget *cancel_btn; + GtkWidget *apply_btn; +}; + +#define SET_NOTEBOOK_LABEL(notebook, str, page_num) \ +{ \ + GtkWidget *label; \ + \ + label = gtk_label_new (str); \ + gtk_widget_show (label); \ + gtk_notebook_set_tab_label \ + (GTK_NOTEBOOK (notebook), \ + gtk_notebook_get_nth_page \ + (GTK_NOTEBOOK (notebook), page_num), \ + label); \ +} + +#define PACK_CHECK_BUTTON(box, chkbtn, label) \ +{ \ + chkbtn = gtk_check_button_new_with_label(label); \ + gtk_widget_show(chkbtn); \ + gtk_box_pack_start(GTK_BOX(box), chkbtn, FALSE, TRUE, 0); \ +} + +#define PACK_FRAME(box, frame, label) \ +{ \ + frame = gtk_frame_new(label); \ + gtk_widget_show(frame); \ + gtk_box_pack_start(GTK_BOX(box), frame, FALSE, TRUE, 0); \ + gtk_frame_set_label_align(GTK_FRAME(frame), 0.01, 0.5); \ +} + +#define SET_TOGGLE_SENSITIVITY(togglewid, targetwid) \ +{ \ + gtk_widget_set_sensitive(targetwid, FALSE); \ + gtk_signal_connect(GTK_OBJECT(togglewid), "toggled", \ + GTK_SIGNAL_FUNC(prefs_button_toggled), targetwid); \ +} + +void prefs_read_config (PrefParam *param, + const gchar *label, + const gchar *rcfile); +void prefs_config_parse_one_line(PrefParam *param, + const gchar *buf); +void prefs_save_config (PrefParam *param, + const gchar *label, + const gchar *rcfile); +gint prefs_write_param (PrefParam *param, + FILE *fp); + +PrefFile *prefs_write_open (const gchar *path); +gint prefs_write_close (PrefFile *pfile); +gint prefs_write_close_revert (PrefFile *pfile); + +void prefs_set_default (PrefParam *param); +void prefs_free (PrefParam *param); + +void prefs_dialog_create (PrefsDialog *dialog); + +void prefs_button_toggled (GtkToggleButton *toggle_btn, + GtkWidget *widget); + +void prefs_set_dialog (PrefParam *param); +void prefs_set_data_from_dialog (PrefParam *param); +void prefs_set_dialog_to_default(PrefParam *param); + +void prefs_set_data_from_entry (PrefParam *pparam); +void prefs_set_entry (PrefParam *pparam); +void prefs_set_data_from_text (PrefParam *pparam); +void prefs_set_text (PrefParam *pparam); +void prefs_set_data_from_toggle (PrefParam *pparam); +void prefs_set_toggle (PrefParam *pparam); +void prefs_set_data_from_spinbtn(PrefParam *pparam); +void prefs_set_spinbtn (PrefParam *pparam); + +#endif /* __PREFS_H__ */ diff --git a/src/prefs_account.c b/src/prefs_account.c new file mode 100644 index 000000000..c91b9f75e --- /dev/null +++ b/src/prefs_account.c @@ -0,0 +1,1164 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> +#include <stdio.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <string.h> +#include <stdlib.h> +#include <ctype.h> + +#include "intl.h" +#include "main.h" +#include "prefs.h" +#include "prefs_account.h" +#include "account.h" +#include "mainwindow.h" +#include "manage_window.h" +#include "menu.h" +#include "gtkutils.h" +#include "utils.h" +#include "alertpanel.h" + +static gboolean cancelled; + +static PrefsAccount tmp_ac_prefs; + +static PrefsDialog dialog; + +static struct Basic { + GtkWidget *acname_entry; + GtkWidget *default_chkbtn; + + GtkWidget *name_entry; + GtkWidget *addr_entry; + GtkWidget *org_entry; + + GtkWidget *serv_frame; + GtkWidget *serv_table; + GtkWidget *protocol_optmenu; + GtkWidget *inbox_label; + GtkWidget *inbox_entry; + GtkWidget *recvserv_label; + GtkWidget *smtpserv_label; + GtkWidget *nntpserv_label; + GtkWidget *recvserv_entry; + GtkWidget *smtpserv_entry; + GtkWidget *nntpserv_entry; + GtkWidget *uid_label; + GtkWidget *pass_label; + GtkWidget *uid_entry; + GtkWidget *pass_entry; +} basic; + +static struct Receive { + GtkWidget *pop3_frame; + GtkWidget *rmmail_chkbtn; + GtkWidget *getall_chkbtn; + GtkWidget *recvatgetall_chkbtn; + GtkWidget *filter_on_recv_chkbtn; +} receive; + +static struct Send { + GtkWidget *date_chkbtn; + GtkWidget *msgid_chkbtn; + + GtkWidget *customhdr_chkbtn; + + GtkWidget *autocc_chkbtn; + GtkWidget *autocc_entry; + GtkWidget *autobcc_chkbtn; + GtkWidget *autobcc_entry; + GtkWidget *autoreplyto_chkbtn; + GtkWidget *autoreplyto_entry; + + GtkWidget *smtp_auth_chkbtn; + GtkWidget *pop_bfr_smtp_chkbtn; +} send; + +static struct Compose { + GtkWidget *sigpath_entry; +} compose; + +static struct Advanced { + GtkWidget *smtpport_chkbtn; + GtkWidget *smtpport_entry; + GtkWidget *popport_chkbtn; + GtkWidget *popport_entry; + GtkWidget *domain_chkbtn; + GtkWidget *domain_entry; +} advanced; + +static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam); +static void prefs_account_protocol_set_optmenu (PrefParam *pparam); +static void prefs_account_protocol_activated (GtkMenuItem *menuitem); + +static PrefParam param[] = { + /* Basic */ + {"account_name", NULL, &tmp_ac_prefs.account_name, P_STRING, + &basic.acname_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"is_default", "FALSE", &tmp_ac_prefs.is_default, P_BOOL, + &basic.default_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"name", NULL, &tmp_ac_prefs.name, P_STRING, + &basic.name_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"address", NULL, &tmp_ac_prefs.address, P_STRING, + &basic.addr_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"organization", NULL, &tmp_ac_prefs.organization, P_STRING, + &basic.org_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"protocol", NULL, &tmp_ac_prefs.protocol, P_ENUM, + &basic.protocol_optmenu, + prefs_account_protocol_set_data_from_optmenu, + prefs_account_protocol_set_optmenu}, + + {"receive_server", NULL, &tmp_ac_prefs.recv_server, P_STRING, + &basic.recvserv_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"smtp_server", NULL, &tmp_ac_prefs.smtp_server, P_STRING, + &basic.smtpserv_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"nntp_server", NULL, &tmp_ac_prefs.nntp_server, P_STRING, + &basic.nntpserv_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"use_nntp_auth", "FALSE", &tmp_ac_prefs.use_nntp_auth, P_BOOL, + NULL, NULL, NULL}, + + {"user_id", "ENV_USER", &tmp_ac_prefs.userid, P_STRING, + &basic.uid_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"password", NULL, &tmp_ac_prefs.passwd, P_STRING, + &basic.pass_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {"inbox", "inbox", &tmp_ac_prefs.inbox, P_STRING, + &basic.inbox_entry, prefs_set_data_from_entry, prefs_set_entry}, + + /* Receive */ + {"remove_mail", "TRUE", &tmp_ac_prefs.rmmail, P_BOOL, + &receive.rmmail_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"get_all_mail", "FALSE", &tmp_ac_prefs.getall, P_BOOL, + &receive.getall_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"receive_at_get_all", "TRUE", &tmp_ac_prefs.recv_at_getall, P_BOOL, + &receive.recvatgetall_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"filter_on_receive", "TRUE", &tmp_ac_prefs.filter_on_recv, P_BOOL, + &receive.filter_on_recv_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + /* Send */ + {"add_date", "TRUE", &tmp_ac_prefs.add_date, P_BOOL, + &send.date_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"generate_msgid", "TRUE", &tmp_ac_prefs.gen_msgid, P_BOOL, + &send.msgid_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"add_custom_header", "FALSE", &tmp_ac_prefs.add_customhdr, P_BOOL, + &send.customhdr_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"set_autocc", "FALSE", &tmp_ac_prefs.set_autocc, P_BOOL, + &send.autocc_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"auto_cc", NULL, &tmp_ac_prefs.auto_cc, P_STRING, + &send.autocc_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + {"set_autobcc", "FALSE", &tmp_ac_prefs.set_autobcc, P_BOOL, + &send.autobcc_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"auto_bcc", NULL, &tmp_ac_prefs.auto_bcc, P_STRING, + &send.autobcc_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + {"set_autoreplyto", "FALSE", &tmp_ac_prefs.set_autoreplyto, P_BOOL, + &send.autoreplyto_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"auto_replyto", NULL, &tmp_ac_prefs.auto_replyto, P_STRING, + &send.autoreplyto_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + {"use_smtp_auth", "FALSE", &tmp_ac_prefs.use_smtp_auth, P_BOOL, + &send.smtp_auth_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"pop_before_smtp", "FALSE", &tmp_ac_prefs.pop_before_smtp, P_BOOL, + &send.pop_bfr_smtp_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + /* Compose */ + {"signature_path", "~/"DEFAULT_SIGNATURE, &tmp_ac_prefs.sig_path, P_STRING, + &compose.sigpath_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + /* Advanced */ + {"set_smtpport", "FALSE", &tmp_ac_prefs.set_smtpport, P_BOOL, + &advanced.smtpport_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"smtp_port", "25", &tmp_ac_prefs.smtpport, P_USHORT, + &advanced.smtpport_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + {"set_popport", "FALSE", &tmp_ac_prefs.set_popport, P_BOOL, + &advanced.popport_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"pop_port", "110", &tmp_ac_prefs.popport, P_USHORT, + &advanced.popport_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + {"set_domain", "FALSE", &tmp_ac_prefs.set_domain, P_BOOL, + &advanced.domain_chkbtn, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"domain", NULL, &tmp_ac_prefs.domain, P_STRING, + &advanced.domain_entry, + prefs_set_data_from_entry, prefs_set_entry}, + + {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} +}; + +static void prefs_account_create (void); +static void prefs_account_basic_create (void); +static void prefs_account_receive_create (void); +static void prefs_account_send_create (void); +static void prefs_account_compose_create (void); +static void prefs_account_advanced_create (void); + +static void prefs_account_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static void prefs_account_ok (void); +static gint prefs_account_apply (void); +static void prefs_account_cancel (void); + +#define VSPACING 12 +#define VSPACING_NARROW 4 +#define BOX_BORDER 16 +#define DEFAULT_ENTRY_WIDTH 80 + +void prefs_account_read_config(PrefsAccount *ac_prefs, const gchar *label) +{ + const gchar *p = label; + gint id; + + g_return_if_fail(ac_prefs != NULL); + g_return_if_fail(label != NULL); + + memset(&tmp_ac_prefs, 0, sizeof(PrefsAccount)); + prefs_read_config(param, label, ACCOUNT_RC); + *ac_prefs = tmp_ac_prefs; + while (*p && !isdigit(*p)) p++; + id = atoi(p); + if (id < 0) g_warning("wrong account id: %d\n", id); + ac_prefs->account_id = id; +} + +void prefs_account_save_config(PrefsAccount *ac_prefs) +{ + gchar *buf; + + g_return_if_fail(ac_prefs != NULL); + + tmp_ac_prefs = *ac_prefs; + buf = g_strdup_printf("Account: %d", ac_prefs->account_id); + prefs_save_config(param, buf, ACCOUNT_RC); +} + +void prefs_account_save_config_all(GList *account_list) +{ + GList *cur; + gchar *rcpath; + PrefFile *pfile; + + if (!account_list) return; + + rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, ACCOUNT_RC, NULL); + if ((pfile = prefs_write_open(rcpath)) == NULL) { + g_free(rcpath); + return; + } + g_free(rcpath); + + for (cur = account_list; cur != NULL; cur = cur->next) { + tmp_ac_prefs = *(PrefsAccount *)cur->data; + if (fprintf(pfile->fp, "[Account: %d]\n", + tmp_ac_prefs.account_id) <= 0 || + prefs_write_param(param, pfile->fp) < 0) { + g_warning(_("failed to write configuration to file\n")); + prefs_write_close_revert(pfile); + return; + } + if (cur->next) { + if (fputc('\n', pfile->fp) == EOF) { + FILE_OP_ERROR(rcpath, "fputc"); + prefs_write_close_revert(pfile); + return; + } + } + } + + if (prefs_write_close(pfile) < 0) + g_warning(_("failed to write configuration to file\n")); +} + +void prefs_account_free(PrefsAccount *ac_prefs) +{ + if (!ac_prefs) return; + + tmp_ac_prefs = *ac_prefs; + prefs_free(param); +} + +static gint prefs_account_get_new_id(void) +{ + GList *ac_list; + PrefsAccount *ac; + static gint last_id = 0; + + for (ac_list = account_get_list(); ac_list != NULL; + ac_list = ac_list->next) { + ac = (PrefsAccount *)ac_list->data; + if (last_id < ac->account_id) + last_id = ac->account_id; + } + + return last_id + 1; +} + +PrefsAccount *prefs_account_open(PrefsAccount *ac_prefs) +{ + gboolean new_account = FALSE; + + debug_print(_("Opening account preferences window...\n")); + + cancelled = FALSE; + + if (!ac_prefs) { + ac_prefs = g_new0(PrefsAccount, 1); + ac_prefs->account_id = prefs_account_get_new_id(); + new_account = TRUE; + } + + if (!dialog.window) { + prefs_account_create(); + } + + manage_window_set_transient(GTK_WINDOW(dialog.window)); + gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0); + gtk_widget_grab_focus(dialog.ok_btn); + + tmp_ac_prefs = *ac_prefs; + + if (new_account) { + PrefsAccount *def_ac; + gchar *buf; + + prefs_set_dialog_to_default(param); + buf = g_strdup_printf(_("Account%d"), ac_prefs->account_id); + gtk_entry_set_text(GTK_ENTRY(basic.acname_entry), buf); + g_free(buf); + def_ac = account_get_default(); + if (def_ac) { + gtk_entry_set_text(GTK_ENTRY(basic.name_entry), + def_ac->name ? def_ac->name : ""); + gtk_entry_set_text(GTK_ENTRY(basic.addr_entry), + def_ac->address ? def_ac->address : ""); + gtk_entry_set_text(GTK_ENTRY(basic.org_entry), + def_ac->organization ? def_ac->organization : ""); + } + gtk_window_set_title(GTK_WINDOW(dialog.window), + _("Preferences for new account")); + gtk_widget_hide(dialog.apply_btn); + } else { + prefs_set_dialog(param); + gtk_window_set_title(GTK_WINDOW(dialog.window), + _("Preferences for each account")); + gtk_widget_show(dialog.apply_btn); + } + + gtk_widget_show(dialog.window); + gtk_main(); + gtk_widget_hide(dialog.window); + + if (cancelled && new_account) { + g_free(ac_prefs); + return NULL; + } else { + *ac_prefs = tmp_ac_prefs; + return ac_prefs; + } +} + +static void prefs_account_create(void) +{ + gint page = 0; + + debug_print(_("Creating account preferences window...\n")); + + /* create dialog */ + prefs_dialog_create(&dialog); + gtk_signal_connect(GTK_OBJECT(dialog.window), "delete_event", + GTK_SIGNAL_FUNC(prefs_account_cancel), NULL); + gtk_signal_connect(GTK_OBJECT(dialog.window), "key_press_event", + GTK_SIGNAL_FUNC(prefs_account_key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(dialog.window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(dialog.window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + gtk_signal_connect(GTK_OBJECT(dialog.ok_btn), "clicked", + GTK_SIGNAL_FUNC(prefs_account_ok), NULL); + gtk_signal_connect(GTK_OBJECT(dialog.apply_btn), "clicked", + GTK_SIGNAL_FUNC(prefs_account_apply), NULL); + gtk_signal_connect(GTK_OBJECT(dialog.cancel_btn), "clicked", + GTK_SIGNAL_FUNC(prefs_account_cancel), NULL); + + prefs_account_basic_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Basic"), page++); + prefs_account_receive_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++); + prefs_account_send_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++); + prefs_account_compose_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++); + prefs_account_advanced_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Advanced"), page++); + + gtk_widget_show_all(dialog.window); +} + +#define SET_ACTIVATE(menuitem) \ +{ \ + gtk_signal_connect(GTK_OBJECT(menuitem), "activate", \ + GTK_SIGNAL_FUNC(prefs_account_protocol_activated), \ + NULL); \ +} + +static void prefs_account_basic_create(void) +{ + GtkWidget *vbox1; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *acname_entry; + GtkWidget *default_chkbtn; + GtkWidget *frame1; + GtkWidget *table1; + GtkWidget *name_entry; + GtkWidget *addr_entry; + GtkWidget *org_entry; + + GtkWidget *serv_frame; + GtkWidget *vbox2; + GtkWidget *optmenu; + GtkWidget *optmenu_menu; + GtkWidget *menuitem; + GtkWidget *inbox_label; + GtkWidget *inbox_entry; + GtkWidget *serv_table; + GtkWidget *recvserv_label; + GtkWidget *smtpserv_label; + GtkWidget *nntpserv_label; + GtkWidget *recvserv_entry; + GtkWidget *smtpserv_entry; + GtkWidget *nntpserv_entry; + GtkWidget *uid_label; + GtkWidget *pass_label; + GtkWidget *uid_entry; + GtkWidget *pass_entry; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), BOX_BORDER); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Name of this account")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + acname_entry = gtk_entry_new (); + gtk_widget_show (acname_entry); + gtk_widget_set_usize (acname_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_box_pack_start (GTK_BOX (hbox), acname_entry, TRUE, TRUE, 0); + + default_chkbtn = gtk_check_button_new_with_label (_("Usually used")); + gtk_widget_show (default_chkbtn); + gtk_box_pack_end (GTK_BOX (hbox), default_chkbtn, FALSE, FALSE, 0); + + PACK_FRAME (vbox1, frame1, _("Personal information")); + + table1 = gtk_table_new (3, 2, FALSE); + gtk_widget_show (table1); + gtk_container_add (GTK_CONTAINER (frame1), table1); + gtk_container_set_border_width (GTK_CONTAINER (table1), 8); + gtk_table_set_row_spacings (GTK_TABLE (table1), VSPACING_NARROW); + gtk_table_set_col_spacings (GTK_TABLE (table1), 8); + + label = gtk_label_new (_("Full name")); + gtk_widget_show (label); + gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); + + label = gtk_label_new (_("Mail address")); + gtk_widget_show (label); + gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 1, 2, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); + + label = gtk_label_new (_("Organization")); + gtk_widget_show (label); + gtk_table_attach (GTK_TABLE (table1), label, 0, 1, 2, 3, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (label), 1, 0.5); + + name_entry = gtk_entry_new (); + gtk_widget_show (name_entry); + gtk_table_attach (GTK_TABLE (table1), name_entry, 1, 2, 0, 1, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + addr_entry = gtk_entry_new (); + gtk_widget_show (addr_entry); + gtk_table_attach (GTK_TABLE (table1), addr_entry, 1, 2, 1, 2, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + org_entry = gtk_entry_new (); + gtk_widget_show (org_entry); + gtk_table_attach (GTK_TABLE (table1), org_entry, 1, 2, 2, 3, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + PACK_FRAME (vbox1, serv_frame, _("Server information")); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (serv_frame), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Protocol")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + optmenu = gtk_option_menu_new (); + gtk_widget_show (optmenu); + gtk_box_pack_start (GTK_BOX (hbox), optmenu, FALSE, FALSE, 0); + + optmenu_menu = gtk_menu_new (); + + MENUITEM_ADD (optmenu_menu, menuitem, _("POP3 (normal)"), A_POP3); + SET_ACTIVATE (menuitem); + MENUITEM_ADD (optmenu_menu, menuitem, _("POP3 (APOP auth)"), A_APOP); + SET_ACTIVATE (menuitem); + MENUITEM_ADD (optmenu_menu, menuitem, _("IMAP4"), A_IMAP4); + SET_ACTIVATE (menuitem); + MENUITEM_ADD (optmenu_menu, menuitem, _("News (NNTP)"), A_NNTP); + SET_ACTIVATE (menuitem); + MENUITEM_ADD (optmenu_menu, menuitem, _("None (local)"), A_LOCAL); + SET_ACTIVATE (menuitem); + + gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu); + + inbox_label = gtk_label_new (_("Inbox")); + gtk_widget_show (inbox_label); + gtk_box_pack_start (GTK_BOX (hbox), inbox_label, FALSE, FALSE, 0); + + inbox_entry = gtk_entry_new (); + gtk_widget_show (inbox_entry); + gtk_widget_set_usize (inbox_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_box_pack_start (GTK_BOX (hbox), inbox_entry, TRUE, TRUE, 0); + + serv_table = gtk_table_new (5, 4, FALSE); + gtk_widget_show (serv_table); + gtk_box_pack_start (GTK_BOX (vbox2), serv_table, FALSE, FALSE, 0); + gtk_table_set_row_spacings (GTK_TABLE (serv_table), VSPACING_NARROW); + gtk_table_set_col_spacings (GTK_TABLE (serv_table), 8); + + nntpserv_entry = gtk_entry_new (); + gtk_widget_show (nntpserv_entry); + gtk_table_attach (GTK_TABLE (serv_table), nntpserv_entry, 1, 4, 0, 1, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + gtk_table_set_row_spacing (GTK_TABLE (serv_table), 0, 0); + + recvserv_entry = gtk_entry_new (); + gtk_widget_show (recvserv_entry); + gtk_table_attach (GTK_TABLE (serv_table), recvserv_entry, 1, 4, 1, 2, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + smtpserv_entry = gtk_entry_new (); + gtk_widget_show (smtpserv_entry); + gtk_table_attach (GTK_TABLE (serv_table), smtpserv_entry, 1, 4, 2, 3, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + uid_entry = gtk_entry_new (); + gtk_widget_show (uid_entry); + gtk_widget_set_usize (uid_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_table_attach (GTK_TABLE (serv_table), uid_entry, 1, 2, 4, 5, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + pass_entry = gtk_entry_new (); + gtk_widget_show (pass_entry); + gtk_widget_set_usize (pass_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_table_attach (GTK_TABLE (serv_table), pass_entry, 3, 4, 4, 5, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + gtk_entry_set_visibility (GTK_ENTRY (pass_entry), FALSE); + + nntpserv_label = gtk_label_new (_("News server")); + gtk_widget_show (nntpserv_label); + gtk_table_attach (GTK_TABLE (serv_table), nntpserv_label, 0, 1, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (nntpserv_label), 1, 0.5); + + recvserv_label = gtk_label_new (_("Server for receiving")); + gtk_widget_show (recvserv_label); + gtk_table_attach (GTK_TABLE (serv_table), recvserv_label, 0, 1, 1, 2, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (recvserv_label), 1, 0.5); + + smtpserv_label = gtk_label_new (_("SMTP server (send)")); + gtk_widget_show (smtpserv_label); + gtk_table_attach (GTK_TABLE (serv_table), smtpserv_label, 0, 1, 2, 3, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (smtpserv_label), 1, 0.5); + gtk_table_set_row_spacing (GTK_TABLE (serv_table), 2, 0); + + uid_label = gtk_label_new (_("User ID")); + gtk_widget_show (uid_label); + gtk_table_attach (GTK_TABLE (serv_table), uid_label, 0, 1, 4, 5, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (uid_label), 1, 0.5); + + pass_label = gtk_label_new (_("Password")); + gtk_widget_show (pass_label); + gtk_table_attach (GTK_TABLE (serv_table), pass_label, 2, 3, 4, 5, + 0, 0, 0, 0); + + basic.acname_entry = acname_entry; + basic.default_chkbtn = default_chkbtn; + + basic.name_entry = name_entry; + basic.addr_entry = addr_entry; + basic.org_entry = org_entry; + + basic.serv_frame = serv_frame; + basic.serv_table = serv_table; + basic.protocol_optmenu = optmenu; + basic.inbox_label = inbox_label; + basic.inbox_entry = inbox_entry; + basic.recvserv_label = recvserv_label; + basic.recvserv_entry = recvserv_entry; + basic.smtpserv_label = smtpserv_label; + basic.smtpserv_entry = smtpserv_entry; + basic.nntpserv_label = nntpserv_label; + basic.nntpserv_entry = nntpserv_entry; + basic.uid_label = uid_label; + basic.pass_label = pass_label; + basic.uid_entry = uid_entry; + basic.pass_entry = pass_entry; +} + +static void prefs_account_receive_create(void) +{ + GtkWidget *vbox1; + GtkWidget *frame1; + GtkWidget *vbox2; + GtkWidget *rmmail_chkbtn; + GtkWidget *getall_chkbtn; + GtkWidget *recvatgetall_chkbtn; + GtkWidget *filter_on_recv_chkbtn; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), BOX_BORDER); + + PACK_FRAME (vbox1, frame1, _("POP3")); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame1), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + + PACK_CHECK_BUTTON (vbox2, rmmail_chkbtn, + _("Remove messages on server when received")); + PACK_CHECK_BUTTON (vbox2, getall_chkbtn, + _("Receive all messages on server")); + PACK_CHECK_BUTTON (vbox2, recvatgetall_chkbtn, + _("Receive at getting from all accounts")); + PACK_CHECK_BUTTON (vbox2, filter_on_recv_chkbtn, + _("Filter messages on receiving")); + + receive.pop3_frame = frame1; + receive.rmmail_chkbtn = rmmail_chkbtn; + receive.getall_chkbtn = getall_chkbtn; + receive.recvatgetall_chkbtn = recvatgetall_chkbtn; + receive.filter_on_recv_chkbtn = filter_on_recv_chkbtn; +} + +static void prefs_account_send_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *frame; + GtkWidget *date_chkbtn; + GtkWidget *msgid_chkbtn; + GtkWidget *hbox; + GtkWidget *customhdr_chkbtn; + GtkWidget *customhdr_edit_btn; + GtkWidget *frame2; + GtkWidget *table; + GtkWidget *autocc_chkbtn; + GtkWidget *autocc_entry; + GtkWidget *autobcc_chkbtn; + GtkWidget *autobcc_entry; + GtkWidget *autoreplyto_chkbtn; + GtkWidget *autoreplyto_entry; + GtkWidget *frame3; + GtkWidget *vbox3; + GtkWidget *smtp_auth_chkbtn; + GtkWidget *pop_bfr_smtp_chkbtn; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), BOX_BORDER); + + PACK_FRAME (vbox1, frame, _("Header")); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + + PACK_CHECK_BUTTON (vbox2, date_chkbtn, _("Add Date header field")); + PACK_CHECK_BUTTON (vbox2, msgid_chkbtn, _("Generate Message-ID")); + + hbox = gtk_hbox_new (FALSE, 12); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + gtk_widget_set_sensitive(hbox, FALSE); + + PACK_CHECK_BUTTON (hbox, customhdr_chkbtn, + _("Add user-defined header")); + + customhdr_edit_btn = gtk_button_new_with_label (_(" Edit... ")); + gtk_widget_show (customhdr_edit_btn); + gtk_box_pack_start (GTK_BOX (hbox), customhdr_edit_btn, + FALSE, FALSE, 0); + + SET_TOGGLE_SENSITIVITY (customhdr_chkbtn, customhdr_edit_btn); + + PACK_FRAME (vbox1, frame2, _("Automatically set following addresses")); + + table = gtk_table_new (3, 2, FALSE); + gtk_widget_show (table); + gtk_container_add (GTK_CONTAINER (frame2), table); + gtk_container_set_border_width (GTK_CONTAINER (table), 8); + gtk_table_set_row_spacings (GTK_TABLE (table), VSPACING_NARROW); + gtk_table_set_col_spacings (GTK_TABLE (table), 8); + + autocc_chkbtn = gtk_check_button_new_with_label (_("Cc")); + gtk_widget_show (autocc_chkbtn); + gtk_table_attach (GTK_TABLE (table), autocc_chkbtn, 0, 1, 0, 1, + GTK_FILL, 0, 0, 0); + + autocc_entry = gtk_entry_new (); + gtk_widget_show (autocc_entry); + gtk_table_attach (GTK_TABLE (table), autocc_entry, 1, 2, 0, 1, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + SET_TOGGLE_SENSITIVITY (autocc_chkbtn, autocc_entry); + + autobcc_chkbtn = gtk_check_button_new_with_label (_("Bcc")); + gtk_widget_show (autobcc_chkbtn); + gtk_table_attach (GTK_TABLE (table), autobcc_chkbtn, 0, 1, 1, 2, + GTK_FILL, 0, 0, 0); + + autobcc_entry = gtk_entry_new (); + gtk_widget_show (autobcc_entry); + gtk_table_attach (GTK_TABLE (table), autobcc_entry, 1, 2, 1, 2, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + SET_TOGGLE_SENSITIVITY (autobcc_chkbtn, autobcc_entry); + + autoreplyto_chkbtn = gtk_check_button_new_with_label (_("Reply-To")); + gtk_widget_show (autoreplyto_chkbtn); + gtk_table_attach (GTK_TABLE (table), autoreplyto_chkbtn, 0, 1, 2, 3, + GTK_FILL, 0, 0, 0); + + autoreplyto_entry = gtk_entry_new (); + gtk_widget_show (autoreplyto_entry); + gtk_table_attach (GTK_TABLE (table), autoreplyto_entry, 1, 2, 2, 3, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0); + + SET_TOGGLE_SENSITIVITY (autoreplyto_chkbtn, autoreplyto_entry); + + PACK_FRAME (vbox1, frame3, _("Authentication")); + + vbox3 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox3); + gtk_container_add (GTK_CONTAINER (frame3), vbox3); + gtk_container_set_border_width (GTK_CONTAINER (vbox3), 8); + + PACK_CHECK_BUTTON (vbox3, smtp_auth_chkbtn, + _("SMTP Authentication (SMTP AUTH)")); + PACK_CHECK_BUTTON (vbox3, pop_bfr_smtp_chkbtn, + _("Authenticate with POP3 before sending")); + gtk_widget_set_sensitive(pop_bfr_smtp_chkbtn, FALSE); + + send.date_chkbtn = date_chkbtn; + send.msgid_chkbtn = msgid_chkbtn; + send.customhdr_chkbtn = customhdr_chkbtn; + + send.autocc_chkbtn = autocc_chkbtn; + send.autocc_entry = autocc_entry; + send.autobcc_chkbtn = autobcc_chkbtn; + send.autobcc_entry = autobcc_entry; + send.autoreplyto_chkbtn = autoreplyto_chkbtn; + send.autoreplyto_entry = autoreplyto_entry; + + send.smtp_auth_chkbtn = smtp_auth_chkbtn; + send.pop_bfr_smtp_chkbtn = pop_bfr_smtp_chkbtn; +} + +static void prefs_account_compose_create(void) +{ + GtkWidget *vbox1; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *sigpath_entry; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), BOX_BORDER); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox1), hbox, FALSE, FALSE, 0); + + label = gtk_label_new (_("Signature file")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); + + sigpath_entry = gtk_entry_new (); + gtk_widget_show (sigpath_entry); + gtk_box_pack_start (GTK_BOX (hbox), sigpath_entry, TRUE, TRUE, 0); + + compose.sigpath_entry = sigpath_entry; +} + +static void prefs_account_advanced_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *hbox1; + GtkWidget *checkbtn_smtpport; + GtkWidget *entry_smtpport; + GtkWidget *hbox2; + GtkWidget *checkbtn_popport; + GtkWidget *entry_popport; + GtkWidget *hbox3; + GtkWidget *checkbtn_domain; + GtkWidget *entry_domain; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), BOX_BORDER); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (hbox1, checkbtn_smtpport, _("Specify SMTP port")); + + entry_smtpport = gtk_entry_new_with_max_length (5); + gtk_widget_show (entry_smtpport); + gtk_box_pack_start (GTK_BOX (hbox1), entry_smtpport, FALSE, FALSE, 0); + gtk_widget_set_usize (entry_smtpport, 64, -1); + SET_TOGGLE_SENSITIVITY(checkbtn_smtpport, entry_smtpport); + + hbox2 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox2); + gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (hbox2, checkbtn_popport, _("Specify POP3 port")); + + entry_popport = gtk_entry_new_with_max_length (5); + gtk_widget_show (entry_popport); + gtk_box_pack_start (GTK_BOX (hbox2), entry_popport, FALSE, FALSE, 0); + gtk_widget_set_usize (entry_popport, 64, -1); + SET_TOGGLE_SENSITIVITY(checkbtn_popport, entry_popport); + + hbox3 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox3); + gtk_box_pack_start (GTK_BOX (vbox2), hbox3, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (hbox3, checkbtn_domain, _("Specify domain name")); + + entry_domain = gtk_entry_new (); + gtk_widget_show (entry_domain); + gtk_box_pack_start (GTK_BOX (hbox3), entry_domain, TRUE, TRUE, 0); + SET_TOGGLE_SENSITIVITY(checkbtn_domain, entry_domain); + + advanced.smtpport_chkbtn = checkbtn_smtpport; + advanced.smtpport_entry = entry_smtpport; + advanced.popport_chkbtn = checkbtn_popport; + advanced.popport_entry = entry_popport; + advanced.domain_chkbtn = checkbtn_domain; + advanced.domain_entry = entry_domain; +} + +static void prefs_account_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) +{ + if (event && event->keyval == GDK_Escape) + prefs_account_cancel(); +} + +static void prefs_account_ok(void) +{ + if (prefs_account_apply() == 0) + gtk_main_quit(); +} + +static gint prefs_account_apply(void) +{ + RecvProtocol protocol; + GtkWidget *menu; + GtkWidget *menuitem; + + menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(basic.protocol_optmenu)); + menuitem = gtk_menu_get_active(GTK_MENU(menu)); + protocol = GPOINTER_TO_INT + (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + + if (*gtk_entry_get_text(GTK_ENTRY(basic.addr_entry)) == '\0') { + alertpanel_error(_("Mail address is not entered.")); + return -1; + } + if ((protocol == A_POP3 || protocol == A_APOP || protocol == A_LOCAL) && + *gtk_entry_get_text(GTK_ENTRY(basic.smtpserv_entry)) == '\0') { + alertpanel_error(_("SMTP server is not entered.")); + return -1; + } + if ((protocol == A_POP3 || protocol == A_APOP || protocol == A_LOCAL) && + *gtk_entry_get_text(GTK_ENTRY(basic.uid_entry)) == '\0') { + alertpanel_error(_("User ID is not entered.")); + return -1; + } + if ((protocol == A_POP3 || protocol == A_APOP) && + *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') { + alertpanel_error(_("POP3 server is not entered.")); + return -1; + } + if (protocol == A_IMAP4 && + *gtk_entry_get_text(GTK_ENTRY(basic.recvserv_entry)) == '\0') { + alertpanel_error(_("IMAP4 server is not entered.")); + return -1; + } + if (protocol == A_NNTP && + *gtk_entry_get_text(GTK_ENTRY(basic.nntpserv_entry)) == '\0') { + alertpanel_error(_("NNTP server is not entered.")); + return -1; + } + + prefs_set_data_from_dialog(param); + return 0; +} + +static void prefs_account_cancel(void) +{ + cancelled = TRUE; + gtk_main_quit(); +} + +static void prefs_account_protocol_set_data_from_optmenu(PrefParam *pparam) +{ + GtkWidget *menu; + GtkWidget *menuitem; + + menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); + menuitem = gtk_menu_get_active(GTK_MENU(menu)); + *((RecvProtocol *)pparam->data) = GPOINTER_TO_INT + (gtk_object_get_user_data(GTK_OBJECT(menuitem))); +} + +static void prefs_account_protocol_set_optmenu(PrefParam *pparam) +{ + RecvProtocol protocol; + GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget); + GtkWidget *menu; + GtkWidget *menuitem; + + protocol = *((RecvProtocol *)pparam->data); + + switch (protocol) { + case A_POP3: + gtk_option_menu_set_history(optmenu, 0); + break; + case A_APOP: + gtk_option_menu_set_history(optmenu, 1); + break; + case A_IMAP4: + gtk_option_menu_set_history(optmenu, 2); + break; + case A_NNTP: + gtk_option_menu_set_history(optmenu, 3); + break; + case A_LOCAL: + gtk_option_menu_set_history(optmenu, 4); + break; + default: + } + + menu = gtk_option_menu_get_menu(optmenu); + menuitem = gtk_menu_get_active(GTK_MENU(menu)); + gtk_menu_item_activate(GTK_MENU_ITEM(menuitem)); +} + +static void prefs_account_protocol_activated(GtkMenuItem *menuitem) +{ + RecvProtocol protocol; + + protocol = GPOINTER_TO_INT + (gtk_object_get_user_data(GTK_OBJECT(menuitem))); + + switch(protocol) { + case A_NNTP: + gtk_widget_set_sensitive(basic.inbox_label, FALSE); + gtk_widget_set_sensitive(basic.inbox_entry, FALSE); + gtk_widget_show(basic.nntpserv_label); + gtk_widget_show(basic.nntpserv_entry); + gtk_widget_hide(basic.recvserv_label); + gtk_widget_hide(basic.recvserv_entry); + gtk_widget_hide(basic.smtpserv_label); + gtk_widget_hide(basic.smtpserv_entry); + gtk_table_set_row_spacing (GTK_TABLE (basic.serv_table), 3, 0); + gtk_widget_set_sensitive(basic.uid_label, FALSE); + gtk_widget_set_sensitive(basic.pass_label, FALSE); + gtk_widget_set_sensitive(basic.uid_entry, FALSE); + gtk_widget_set_sensitive(basic.pass_entry, FALSE); + gtk_widget_set_sensitive(receive.pop3_frame, FALSE); + break; + case A_LOCAL: + gtk_widget_set_sensitive(basic.inbox_label, TRUE); + gtk_widget_set_sensitive(basic.inbox_entry, TRUE); + gtk_widget_hide(basic.nntpserv_label); + gtk_widget_hide(basic.nntpserv_entry); + gtk_widget_set_sensitive(basic.recvserv_label, FALSE); + gtk_widget_set_sensitive(basic.recvserv_entry, FALSE); + gtk_widget_show(basic.recvserv_label); + gtk_widget_show(basic.recvserv_entry); + gtk_widget_show(basic.smtpserv_label); + gtk_widget_show(basic.smtpserv_entry); + gtk_table_set_row_spacing + (GTK_TABLE (basic.serv_table), 3, VSPACING_NARROW); + gtk_widget_set_sensitive(basic.uid_label, FALSE); + gtk_widget_set_sensitive(basic.pass_label, FALSE); + gtk_widget_set_sensitive(basic.uid_entry, FALSE); + gtk_widget_set_sensitive(basic.pass_entry, FALSE); + gtk_widget_set_sensitive(receive.pop3_frame, FALSE); + break; + case A_IMAP4: + gtk_widget_set_sensitive(basic.inbox_label, TRUE); + gtk_widget_set_sensitive(basic.inbox_entry, TRUE); + gtk_widget_hide(basic.nntpserv_label); + gtk_widget_hide(basic.nntpserv_entry); + gtk_widget_set_sensitive(basic.recvserv_label, TRUE); + gtk_widget_set_sensitive(basic.recvserv_entry, TRUE); + gtk_widget_show(basic.recvserv_label); + gtk_widget_show(basic.recvserv_entry); + gtk_widget_show(basic.smtpserv_label); + gtk_widget_show(basic.smtpserv_entry); + gtk_table_set_row_spacing + (GTK_TABLE (basic.serv_table), 3, VSPACING_NARROW); + gtk_widget_set_sensitive(basic.uid_label, TRUE); + gtk_widget_set_sensitive(basic.pass_label, TRUE); + gtk_widget_set_sensitive(basic.uid_entry, TRUE); + gtk_widget_set_sensitive(basic.pass_entry, TRUE); + gtk_widget_set_sensitive(receive.pop3_frame, FALSE); + break; + default: + gtk_widget_set_sensitive(basic.inbox_label, TRUE); + gtk_widget_set_sensitive(basic.inbox_entry, TRUE); + gtk_widget_hide(basic.nntpserv_label); + gtk_widget_hide(basic.nntpserv_entry); + gtk_widget_set_sensitive(basic.recvserv_label, TRUE); + gtk_widget_set_sensitive(basic.recvserv_entry, TRUE); + gtk_widget_show(basic.recvserv_label); + gtk_widget_show(basic.recvserv_entry); + gtk_widget_show(basic.smtpserv_label); + gtk_widget_show(basic.smtpserv_entry); + gtk_table_set_row_spacing + (GTK_TABLE (basic.serv_table), 3, VSPACING_NARROW); + gtk_widget_set_sensitive(basic.uid_label, TRUE); + gtk_widget_set_sensitive(basic.pass_label, TRUE); + gtk_widget_set_sensitive(basic.uid_entry, TRUE); + gtk_widget_set_sensitive(basic.pass_entry, TRUE); + gtk_widget_set_sensitive(receive.pop3_frame, TRUE); + break; + } + + gtk_widget_queue_resize(basic.serv_frame); +} diff --git a/src/prefs_account.h b/src/prefs_account.h new file mode 100644 index 000000000..f8c6a0dd6 --- /dev/null +++ b/src/prefs_account.h @@ -0,0 +1,107 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PREFS_ACCOUNT_H__ +#define __PREFS_ACCOUNT_H__ + +#include <glib.h> + +typedef struct _PrefsAccount PrefsAccount; + +#include "folder.h" + +typedef enum { + A_POP3, + A_APOP, + A_RPOP, + A_IMAP4, + A_NNTP, + A_LOCAL +} RecvProtocol; + +struct _PrefsAccount +{ + gchar *account_name; + + /* Personal info */ + gchar *name; + gchar *address; + gchar *organization; + + /* Server info */ + RecvProtocol protocol; + gchar *inbox; + gchar *recv_server; + gchar *smtp_server; + gchar *nntp_server; + gboolean use_nntp_auth; + gchar *userid; + gchar *passwd; + + /* Temporarily preserved password */ + gchar *tmp_pass; + + /* Receive */ + gboolean rmmail; + gboolean getall; + gboolean recv_at_getall; + gboolean filter_on_recv; + + /* Send */ + gboolean add_date; + gboolean gen_msgid; + gboolean add_customhdr; + gboolean set_autocc; + gchar *auto_cc; + gboolean set_autobcc; + gchar *auto_bcc; + gboolean set_autoreplyto; + gchar *auto_replyto; + gboolean use_smtp_auth; + gboolean pop_before_smtp; + + /* Compose */ + gchar *sig_path; + + /* Advanced */ + gboolean set_smtpport; + gushort smtpport; + gboolean set_popport; + gushort popport; + gboolean set_nntpport; + gushort nntpport; + gboolean set_domain; + gchar *domain; + + /* Default or not */ + gboolean is_default; + /* Unique account ID */ + gint account_id; + + RemoteFolder *folder; +}; + +void prefs_account_read_config (PrefsAccount *ac_prefs, + const gchar *label); +void prefs_account_save_config (PrefsAccount *ac_prefs); +void prefs_account_save_config_all (GList *account_list); +void prefs_account_free (PrefsAccount *ac_prefs); +PrefsAccount *prefs_account_open (PrefsAccount *ac_prefs); + +#endif /* __PREFS_ACCOUNT_H__ */ diff --git a/src/prefs_common.c b/src/prefs_common.c new file mode 100644 index 000000000..1cb986552 --- /dev/null +++ b/src/prefs_common.c @@ -0,0 +1,2198 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> + +#include "intl.h" +#include "main.h" +#include "prefs.h" +#include "prefs_common.h" +#include "mainwindow.h" +#include "summaryview.h" +#include "messageview.h" +#include "manage_window.h" +#include "menu.h" +#include "codeconv.h" +#include "utils.h" +#include "gtkutils.h" +#include "alertpanel.h" +#include "folder.h" + +PrefsCommon prefs_common; + +static PrefsDialog dialog; + +static struct Receive { + GtkWidget *checkbtn_incext; + GtkWidget *entry_incext; + GtkWidget *button_incext; + + GtkWidget *checkbtn_local; + GtkWidget *checkbtn_filter_on_inc; + GtkWidget *entry_spool; + + GtkWidget *checkbtn_autochk; + GtkWidget *spinbtn_autochk; + GtkObject *spinbtn_autochk_adj; + + GtkWidget *checkbtn_chkonstartup; + + GtkWidget *spinbtn_maxarticle; + GtkObject *spinbtn_maxarticle_adj; +} receive; + +static struct Send { + GtkWidget *checkbtn_sendext; + GtkWidget *entry_sendext; + GtkWidget *button_sendext; + + GtkWidget *checkbtn_savemsg; + GtkWidget *checkbtn_queuemsg; + + GtkWidget *optmenu_charset; +} send; + +static struct Compose { + GtkWidget *checkbtn_quote; + GtkWidget *entry_quotemark; + GtkWidget *text_quotefmt; + GtkWidget *checkbtn_autosig; + GtkWidget *entry_sigsep; + + GtkWidget *spinbtn_linewrap; + GtkObject *spinbtn_linewrap_adj; + GtkWidget *checkbtn_wrapquote; + GtkWidget *checkbtn_wrapatsend; +} compose; + +static struct Display { + GtkWidget *entry_textfont; + GtkWidget *button_textfont; + + GtkWidget *chkbtn_folder_unread; + + GtkWidget *chkbtn_transhdr; + GtkWidget *chkbtn_swapfrom; + GtkWidget *chkbtn_hscrollbar; +} display; + +static struct Message { + GtkWidget *chkbtn_enablecol; + GtkWidget *button_edit_col; + GtkWidget *chkbtn_mbalnum; + GtkWidget *chkbtn_disphdrpane; + GtkWidget *chkbtn_disphdr; + GtkWidget *spinbtn_linespc; + GtkObject *spinbtn_linespc_adj; + GtkWidget *chkbtn_headspc; + + GtkWidget *chkbtn_smoothscroll; + GtkWidget *spinbtn_scrollstep; + GtkObject *spinbtn_scrollstep_adj; + GtkWidget *chkbtn_halfpage; +} message; + +#if USE_GPGME +static struct Privacy { + GtkWidget *checkbtn_default_encrypt; + GtkWidget *checkbtn_default_sign; + GtkWidget *checkbtn_auto_check_signatures; + GtkWidget *checkbtn_passphrase_grab; + GtkWidget *optmenu_default_signkey; +} privacy; +#endif + +static struct Interface { + GtkWidget *checkbtn_emacs; + GtkWidget *checkbtn_openunread; + GtkWidget *checkbtn_openinbox; + GtkWidget *checkbtn_immedexec; + GtkWidget *checkbtn_confonexit; + GtkWidget *checkbtn_cleanonexit; + GtkWidget *checkbtn_askonclean; +} interface; + +static struct Other { + GtkWidget *uri_combo; + GtkWidget *uri_entry; + GtkWidget *printcmd_entry; + GtkWidget *exteditor_combo; + GtkWidget *exteditor_entry; +} other; + +static struct MessageColorButtons { + GtkWidget *quote_level1_btn; + GtkWidget *quote_level2_btn; + GtkWidget *quote_level3_btn; + GtkWidget *uri_btn; +} color_buttons; + +static GtkWidget *quote_desc_win; +static GtkWidget *font_sel_win; +static GtkWidget *quote_color_win; +static GtkWidget *color_dialog; + +static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam); +static void prefs_common_charset_set_optmenu (PrefParam *pparam); +#if USE_GPGME +static void prefs_common_default_signkey_set_data_from_optmenu + (PrefParam *pparam); +static void prefs_common_default_signkey_set_optmenu (PrefParam *pparam); +#endif + +/* + parameter name, default value, pointer to the prefs variable, data type, + pointer to the widget pointer, + pointer to the function for data setting, + pointer to the function for widget setting + */ + +static PrefParam param[] = { + /* Receive */ + {"use_ext_inc", "FALSE", &prefs_common.use_extinc, P_BOOL, + &receive.checkbtn_incext, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"ext_inc_path", DEFAULT_INC_PATH, &prefs_common.extinc_path, P_STRING, + &receive.entry_incext, + prefs_set_data_from_entry, prefs_set_entry}, + + {"inc_local", "TRUE", &prefs_common.inc_local, P_BOOL, + &receive.checkbtn_local, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"filter_on_inc_local", "FALSE", &prefs_common.filter_on_inc, P_BOOL, + &receive.checkbtn_filter_on_inc, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"spool_path", DEFAULT_SPOOL_PATH, &prefs_common.spool_path, P_STRING, + &receive.entry_spool, + prefs_set_data_from_entry, prefs_set_entry}, + + {"autochk_newmail", "FALSE", &prefs_common.autochk_newmail, P_BOOL, + &receive.checkbtn_autochk, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"autochk_interval", "10", &prefs_common.autochk_itv, P_INT, + &receive.spinbtn_autochk, + prefs_set_data_from_spinbtn, prefs_set_spinbtn}, + {"check_on_startup", "FALSE", &prefs_common.chk_on_startup, P_BOOL, + &receive.checkbtn_chkonstartup, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"max_news_articles", "300", &prefs_common.max_articles, P_INT, + &receive.spinbtn_maxarticle, + prefs_set_data_from_spinbtn, prefs_set_spinbtn}, + + /* Send */ + {"use_ext_send", "FALSE", &prefs_common.use_extsend, P_BOOL, + &send.checkbtn_sendext, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"ext_send_path", NULL, &prefs_common.extsend_path, P_STRING, + &send.entry_sendext, prefs_set_data_from_entry, prefs_set_entry}, + {"save_message", "TRUE", &prefs_common.savemsg, P_BOOL, + &send.checkbtn_savemsg, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"queue_message", "FALSE", &prefs_common.queue_msg, P_BOOL, + &send.checkbtn_queuemsg, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"outgoing_charset", CS_AUTO, &prefs_common.outgoing_charset, P_STRING, + &send.optmenu_charset, + prefs_common_charset_set_data_from_optmenu, + prefs_common_charset_set_optmenu}, + + /* Compose */ + {"reply_with_quote", "TRUE", &prefs_common.reply_with_quote, P_BOOL, + &compose.checkbtn_quote, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"quote_mark", "> ", &prefs_common.quotemark, P_STRING, + &compose.entry_quotemark, prefs_set_data_from_entry, prefs_set_entry}, + {"quote_format", "On %d\\n%f wrote:\\n\\n", + &prefs_common.quotefmt, P_STRING, &compose.text_quotefmt, + prefs_set_data_from_text, prefs_set_text}, + + {"auto_signature", "TRUE", &prefs_common.auto_sig, P_BOOL, + &compose.checkbtn_autosig, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"signature_separator", "-- ", &prefs_common.sig_sep, P_STRING, + &compose.entry_sigsep, prefs_set_data_from_entry, prefs_set_entry}, + + {"linewrap_length", "74", &prefs_common.linewrap_len, P_INT, + &compose.spinbtn_linewrap, + prefs_set_data_from_spinbtn, prefs_set_spinbtn}, + {"linewrap_quotation", "FALSE", &prefs_common.linewrap_quote, P_BOOL, + &compose.checkbtn_wrapquote, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"linewrap_before_sending", "FALSE", + &prefs_common.linewrap_at_send, P_BOOL, + &compose.checkbtn_wrapatsend, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"show_ruler", "TRUE", &prefs_common.show_ruler, P_BOOL, + NULL, NULL, NULL}, + + /* Display */ + {"widget_font", NULL, &prefs_common.widgetfont, P_STRING, + NULL, NULL, NULL}, + {"message_font", "-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*", + &prefs_common.textfont, P_STRING, + &display.entry_textfont, + prefs_set_data_from_entry, prefs_set_entry}, + + {"display_folder_unread_num", "TRUE", + &prefs_common.display_folder_unread, P_BOOL, + &display.chkbtn_folder_unread, + prefs_set_data_from_toggle, prefs_set_toggle}, + + /* Display: Summary View */ + {"translate_header", "TRUE", &prefs_common.trans_hdr, P_BOOL, + &display.chkbtn_transhdr, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"enable_swap_from", "TRUE", &prefs_common.swap_from, P_BOOL, + &display.chkbtn_swapfrom, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"enable_hscrollbar", "TRUE", &prefs_common.enable_hscrollbar, P_BOOL, + &display.chkbtn_hscrollbar, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"enable_thread", "TRUE", &prefs_common.enable_thread, P_BOOL, + NULL, NULL, NULL}, + {"toolbar_style", "3", &prefs_common.toolbar_style, P_ENUM, + NULL, NULL, NULL}, + {"show_statusbar", "TRUE", &prefs_common.show_statusbar, P_BOOL, + NULL, NULL, NULL}, + + {"show_mark", "TRUE", &prefs_common.show_mark, P_BOOL, + NULL, NULL, NULL}, + {"show_unread", "TRUE", &prefs_common.show_unread, P_BOOL, + NULL, NULL, NULL}, + {"show_mime", "TRUE", &prefs_common.show_mime, P_BOOL, + NULL, NULL, NULL}, + {"show_number", "TRUE", &prefs_common.show_number, P_BOOL, + NULL, NULL, NULL}, + {"show_size", "FALSE", &prefs_common.show_size, P_BOOL, + NULL, NULL, NULL}, + {"show_date", "TRUE", &prefs_common.show_date, P_BOOL, + NULL, NULL, NULL}, + {"show_from", "TRUE", &prefs_common.show_from, P_BOOL, + NULL, NULL, NULL}, + {"show_subject", "TRUE", &prefs_common.show_subject, P_BOOL, + NULL, NULL, NULL}, + + /* Widget size */ + {"folderview_width", "179", &prefs_common.folderview_width, P_INT, + NULL, NULL, NULL}, + {"folderview_height", "600", &prefs_common.folderview_height, P_INT, + NULL, NULL, NULL}, + {"folder_col_folder", "150", &prefs_common.folder_col_folder, P_INT, + NULL, NULL, NULL}, + {"folder_col_new", "32", &prefs_common.folder_col_new, P_INT, + NULL, NULL, NULL}, + {"folder_col_unread", "32", &prefs_common.folder_col_unread, P_INT, + NULL, NULL, NULL}, + {"folder_col_total", "32", &prefs_common.folder_col_total, P_INT, + NULL, NULL, NULL}, + {"summaryview_width", "600", &prefs_common.summaryview_width, P_INT, + NULL, NULL, NULL}, + {"summaryview_height", "173", &prefs_common.summaryview_height, P_INT, + NULL, NULL, NULL}, + {"summary_col_mark", "10", &prefs_common.summary_col_mark, P_INT, + NULL, NULL, NULL}, + {"summary_col_unread", "13", &prefs_common.summary_col_unread, P_INT, + NULL, NULL, NULL}, + {"summary_col_mime", "10", &prefs_common.summary_col_mime, P_INT, + NULL, NULL, NULL}, + {"summary_col_number", "40", &prefs_common.summary_col_number, P_INT, + NULL, NULL, NULL}, + {"summary_col_size", "48", &prefs_common.summary_col_size, P_INT, + NULL, NULL, NULL}, + {"summary_col_date", "120", &prefs_common.summary_col_date, P_INT, + NULL, NULL, NULL}, + {"summary_col_from", "140", &prefs_common.summary_col_from, P_INT, + NULL, NULL, NULL}, + {"summary_col_subject", "200", &prefs_common.summary_col_subject, + P_INT, NULL, NULL, NULL}, + {"mainview_x", "64", &prefs_common.mainview_x, P_INT, + NULL, NULL, NULL}, + {"mainview_y", "64", &prefs_common.mainview_y, P_INT, + NULL, NULL, NULL}, + {"mainview_width", "600", &prefs_common.mainview_width, P_INT, + NULL, NULL, NULL}, + {"mainview_height", "600", &prefs_common.mainview_height, P_INT, + NULL, NULL, NULL}, + {"mainwin_x", "64", &prefs_common.mainwin_x, P_INT, + NULL, NULL, NULL}, + {"mainwin_y", "64", &prefs_common.mainwin_y, P_INT, + NULL, NULL, NULL}, + {"mainwin_width", "800", &prefs_common.mainwin_width, P_INT, + NULL, NULL, NULL}, + {"mainwin_height", "600", &prefs_common.mainwin_height, P_INT, + NULL, NULL, NULL}, + {"messagewin_width", "600", &prefs_common.msgwin_width, P_INT, + NULL, NULL, NULL}, + {"messagewin_height", "540", &prefs_common.msgwin_height, P_INT, + NULL, NULL, NULL}, + {"compose_width", "600", &prefs_common.compose_width, P_INT, + NULL, NULL, NULL}, + {"compose_height", "560", &prefs_common.compose_height, P_INT, + NULL, NULL, NULL}, + + /* Message */ + {"enable_color", "TRUE", &prefs_common.enable_color, P_BOOL, + &message.chkbtn_enablecol, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"quote_level1_color", "179", &prefs_common.quote_level1_col, P_INT, + NULL, NULL, NULL}, + {"quote_level2_color", "179", &prefs_common.quote_level2_col, P_INT, + NULL, NULL, NULL}, + {"quote_level3_color", "179", &prefs_common.quote_level3_col, P_INT, + NULL, NULL, NULL}, + {"uri_color", "32512", &prefs_common.uri_col, P_INT, + NULL, NULL, NULL}, + {"signature_color", "0", &prefs_common.sig_col, P_USHORT, + NULL, NULL, NULL}, + {"recycle_quote_colors", "FALSE", &prefs_common.recycle_quote_colors, + P_BOOL, NULL, NULL, NULL}, + + {"convert_mb_alnum", "FALSE", &prefs_common.conv_mb_alnum, P_BOOL, + &message.chkbtn_mbalnum, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"display_header_pane", "TRUE", &prefs_common.display_header_pane, + P_BOOL, &message.chkbtn_disphdrpane, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"display_header", "TRUE", &prefs_common.display_header, P_BOOL, + &message.chkbtn_disphdr, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"line_space", "2", &prefs_common.line_space, P_INT, + &message.spinbtn_linespc, + prefs_set_data_from_spinbtn, prefs_set_spinbtn}, + {"enable_head_space", "FALSE", &prefs_common.head_space, P_BOOL, + &message.chkbtn_headspc, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"enable_smooth_scroll", "FALSE", + &prefs_common.enable_smooth_scroll, P_BOOL, + &message.chkbtn_smoothscroll, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"scroll_step", "1", &prefs_common.scroll_step, P_INT, + &message.spinbtn_scrollstep, + prefs_set_data_from_spinbtn, prefs_set_spinbtn}, + {"scroll_half_page", "FALSE", &prefs_common.scroll_halfpage, P_BOOL, + &message.chkbtn_halfpage, + prefs_set_data_from_toggle, prefs_set_toggle}, + + /* MIME viewer */ + {"mime_image_viewer", "display '%s'", + &prefs_common.mime_image_viewer, P_STRING, NULL, NULL, NULL}, + {"mime_audio_player", "play '%s'", + &prefs_common.mime_audio_player, P_STRING, NULL, NULL, NULL}, + +#if USE_GPGME + /* Privacy */ + {"default_encrypt", "FALSE", &prefs_common.default_encrypt, P_BOOL, + &privacy.checkbtn_default_encrypt, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"default_sign", "FALSE", &prefs_common.default_sign, P_BOOL, + &privacy.checkbtn_default_sign, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"auto_check_signatures", "TRUE", + &prefs_common.auto_check_signatures, P_BOOL, + &privacy.checkbtn_auto_check_signatures, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"passphrase_grab", "FALSE", &prefs_common.passphrase_grab, P_BOOL, + &privacy.checkbtn_passphrase_grab, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"default_signkey", CS_AUTO, &prefs_common.default_signkey, P_STRING, + &privacy.optmenu_default_signkey, + prefs_common_default_signkey_set_data_from_optmenu, + prefs_common_default_signkey_set_optmenu}, +#endif /* USE_GPGME */ + + /* Interface */ + {"separate_folder", "FALSE", &prefs_common.sep_folder, P_BOOL, + NULL, NULL, NULL}, + {"separate_message", "FALSE", &prefs_common.sep_msg, P_BOOL, + NULL, NULL, NULL}, + + {"emulate_emacs", "FALSE", &prefs_common.emulate_emacs, P_BOOL, + &interface.checkbtn_emacs, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"open_unread_on_enter", "FALSE", &prefs_common.open_unread_on_enter, + P_BOOL, &interface.checkbtn_openunread, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"open_inbox_on_inc", "TRUE", &prefs_common.open_inbox_on_inc, + P_BOOL, &interface.checkbtn_openinbox, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"immediate_execution", "TRUE", &prefs_common.immediate_exec, P_BOOL, + &interface.checkbtn_immedexec, + prefs_set_data_from_toggle, prefs_set_toggle}, + + {"confirm_on_exit", "TRUE", &prefs_common.confirm_on_exit, P_BOOL, + &interface.checkbtn_confonexit, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"clean_trash_on_exit", "FALSE", &prefs_common.clean_on_exit, P_BOOL, + &interface.checkbtn_cleanonexit, + prefs_set_data_from_toggle, prefs_set_toggle}, + {"ask_on_cleaning", "TRUE", &prefs_common.ask_on_clean, P_BOOL, + &interface.checkbtn_askonclean, + prefs_set_data_from_toggle, prefs_set_toggle}, + + /* Other */ + {"uri_open_command", "netscape -remote 'openURL(%s,raise)'", + &prefs_common.uri_cmd, P_STRING, + &other.uri_entry, prefs_set_data_from_entry, prefs_set_entry}, + {"print_command", "lpr %s", &prefs_common.print_cmd, P_STRING, + &other.printcmd_entry, prefs_set_data_from_entry, prefs_set_entry}, + {"ext_editor_command", "gedit %s", + &prefs_common.ext_editor_cmd, P_STRING, + &other.exteditor_entry, prefs_set_data_from_entry, prefs_set_entry}, + + {NULL, NULL, NULL, P_OTHER, NULL, NULL, NULL} +}; + +#define VSPACING 12 +#define VSPACING_NARROW 4 +#define VBOX_BORDER 16 +#define DEFAULT_ENTRY_WIDTH 80 +#define PREFSBUFSIZE 1024 + +/* widget creating functions */ +static void prefs_common_create (void); +static void prefs_receive_create (void); +static void prefs_send_create (void); +static void prefs_compose_create (void); +static void prefs_display_create (void); +static void prefs_message_create (void); +#if USE_GPGME +static void prefs_privacy_create (void); +#endif +static void prefs_interface_create (void); +static void prefs_other_create (void); + +static void prefs_quote_description (void); +static void prefs_quote_description_create (void); +static void prefs_quote_colors_dialog (void); +static void prefs_quote_colors_dialog_create (void); +static void quote_color_set_dialog (GtkWidget *widget, + gpointer data); +static void quote_colors_set_dialog_ok (GtkWidget *widget, + gpointer data); +static void quote_colors_set_dialog_cancel (GtkWidget *widget, + gpointer data); +static void set_button_bg_color (GtkWidget *widget, + gint color); +static void prefs_enable_message_color_toggled (void); +static void prefs_recycle_colors_toggled (GtkWidget *widget); + +/* functions for setting items of SummaryView */ +static void prefs_summary_display_item_dialog_create + (gboolean *cancelled); +static void display_item_ok (GtkWidget *widget, + gboolean *cancelled); +static void display_item_cancel (GtkWidget *widget, + gboolean *cancelled); +static gint display_item_delete_event (GtkWidget *widget, + GdkEventAny *event, + gboolean *cancelled); +static void display_item_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gboolean *cancelled); + +static void prefs_font_select (GtkButton *button); +static void prefs_font_selection_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static void prefs_font_selection_ok (GtkButton *button); + +static void prefs_common_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static void prefs_common_ok (GtkButton *button); +static void prefs_common_apply (GtkButton *button); + +void prefs_common_read_config(void) +{ + prefs_read_config(param, "Common", COMMON_RC); +} + +void prefs_common_save_config(void) +{ + prefs_save_config(param, "Common", COMMON_RC); +} + +void prefs_common_open(void) +{ + if (!dialog.window) { + prefs_common_create(); + } + + manage_window_set_transient(GTK_WINDOW(dialog.window)); + gtk_notebook_set_page(GTK_NOTEBOOK(dialog.notebook), 0); + gtk_widget_grab_focus(dialog.ok_btn); + + prefs_set_dialog(param); + + gtk_widget_show(dialog.window); +} + +static void prefs_common_create(void) +{ + gint page = 0; + + debug_print(_("Creating common preferences window...\n")); + + prefs_dialog_create(&dialog); + gtk_window_set_title (GTK_WINDOW(dialog.window), + _("Common Preferences")); + gtk_signal_connect (GTK_OBJECT(dialog.window), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); + gtk_signal_connect (GTK_OBJECT(dialog.window), "key_press_event", + GTK_SIGNAL_FUNC(prefs_common_key_pressed), NULL); + gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect (GTK_OBJECT(dialog.window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + gtk_signal_connect (GTK_OBJECT(dialog.ok_btn), "clicked", + GTK_SIGNAL_FUNC(prefs_common_ok), NULL); + gtk_signal_connect (GTK_OBJECT(dialog.apply_btn), "clicked", + GTK_SIGNAL_FUNC(prefs_common_apply), NULL); + gtk_signal_connect_object (GTK_OBJECT(dialog.cancel_btn), "clicked", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), + GTK_OBJECT(dialog.window)); + + /* create all widgets on notebook */ + prefs_receive_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Receive"), page++); + prefs_send_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Send"), page++); + prefs_compose_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Compose"), page++); + prefs_display_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Display"), page++); + prefs_message_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Message"), page++); +#if USE_GPGME + prefs_privacy_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Privacy"), page++); +#endif + prefs_interface_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Interface"), page++); + prefs_other_create(); + SET_NOTEBOOK_LABEL(dialog.notebook, _("Other"), page++); + + gtk_widget_show_all(dialog.window); +} + +static void prefs_receive_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *frame_incext; + GtkWidget *checkbtn_incext; + GtkWidget *hbox; + GtkWidget *label_incext; + GtkWidget *entry_incext; + GtkWidget *button_incext; + + GtkWidget *frame_spool; + GtkWidget *checkbtn_local; + GtkWidget *checkbtn_filter_on_inc; + GtkWidget *label_spool; + GtkWidget *entry_spool; + + GtkWidget *hbox_autochk; + GtkWidget *checkbtn_autochk; + GtkWidget *label_autochk1; + GtkObject *spinbtn_autochk_adj; + GtkWidget *spinbtn_autochk; + GtkWidget *label_autochk2; + GtkWidget *checkbtn_chkonstartup; + + GtkWidget *frame_news; + GtkWidget *label_maxarticle; + GtkWidget *spinbtn_maxarticle; + GtkObject *spinbtn_maxarticle_adj; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + PACK_FRAME(vbox1, frame_incext, _("External program")); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame_incext), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + + /* Use of external incorporation program */ + PACK_CHECK_BUTTON (vbox2, checkbtn_incext, + _("Use external program for incorporation")); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + SET_TOGGLE_SENSITIVITY (checkbtn_incext, hbox); + + label_incext = gtk_label_new (_("Program path")); + gtk_widget_show (label_incext); + gtk_box_pack_start (GTK_BOX (hbox), label_incext, FALSE, FALSE, 0); + + entry_incext = gtk_entry_new (); + gtk_widget_show (entry_incext); + gtk_box_pack_start (GTK_BOX (hbox), entry_incext, TRUE, TRUE, 0); + + button_incext = gtk_button_new_with_label ("... "); + gtk_widget_show (button_incext); + gtk_box_pack_start (GTK_BOX (hbox), button_incext, FALSE, FALSE, 0); + + PACK_FRAME(vbox1, frame_spool, _("Local spool")); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame_spool), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + + hbox = gtk_hbox_new (FALSE, 32); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (hbox, checkbtn_local, _("Incorporate from spool")); + PACK_CHECK_BUTTON (hbox, checkbtn_filter_on_inc, + _("Filter on incorporation")); + SET_TOGGLE_SENSITIVITY (checkbtn_local, checkbtn_filter_on_inc); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); + SET_TOGGLE_SENSITIVITY (checkbtn_local, hbox); + + label_spool = gtk_label_new (_("Spool directory")); + gtk_widget_show (label_spool); + gtk_box_pack_start (GTK_BOX (hbox), label_spool, FALSE, FALSE, 0); + + entry_spool = gtk_entry_new (); + gtk_widget_show (entry_spool); + gtk_box_pack_start (GTK_BOX (hbox), entry_spool, TRUE, TRUE, 0); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0); + + /* Auto-checking */ + hbox_autochk = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox_autochk); + gtk_box_pack_start (GTK_BOX (vbox2), hbox_autochk, FALSE, FALSE, 0); + + gtk_widget_set_sensitive(hbox_autochk, FALSE); + + PACK_CHECK_BUTTON (hbox_autochk, checkbtn_autochk, + _("Auto-check new mail")); + + label_autochk1 = gtk_label_new (_("each")); + gtk_widget_show (label_autochk1); + gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk1, FALSE, FALSE, 0); + + spinbtn_autochk_adj = gtk_adjustment_new (5, 1, 100, 1, 10, 10); + spinbtn_autochk = gtk_spin_button_new + (GTK_ADJUSTMENT (spinbtn_autochk_adj), 1, 0); + gtk_widget_show (spinbtn_autochk); + gtk_box_pack_start (GTK_BOX (hbox_autochk), spinbtn_autochk, FALSE, FALSE, 0); + gtk_widget_set_usize (spinbtn_autochk, 64, -1); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_autochk), TRUE); + + label_autochk2 = gtk_label_new (_("minute(s)")); + gtk_widget_show (label_autochk2); + gtk_box_pack_start (GTK_BOX (hbox_autochk), label_autochk2, FALSE, FALSE, 0); + + SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk1); + SET_TOGGLE_SENSITIVITY(checkbtn_autochk, spinbtn_autochk); + SET_TOGGLE_SENSITIVITY(checkbtn_autochk, label_autochk2); + + PACK_CHECK_BUTTON (vbox2, checkbtn_chkonstartup, + _("Check new mail on startup")); + + PACK_FRAME(vbox1, frame_news, _("News")); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox); + gtk_container_add (GTK_CONTAINER (frame_news), hbox); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 8); + + label_maxarticle = gtk_label_new + (_("Maximum article number to download\n" + "(unlimited if 0 is specified)")); + gtk_widget_show (label_maxarticle); + gtk_box_pack_start (GTK_BOX (hbox), label_maxarticle, FALSE, FALSE, 0); + gtk_label_set_justify (GTK_LABEL (label_maxarticle), GTK_JUSTIFY_LEFT); + + spinbtn_maxarticle_adj = + gtk_adjustment_new (300, 0, 10000, 10, 100, 100); + spinbtn_maxarticle = gtk_spin_button_new + (GTK_ADJUSTMENT (spinbtn_maxarticle_adj), 10, 0); + gtk_widget_show (spinbtn_maxarticle); + gtk_box_pack_start (GTK_BOX (hbox), spinbtn_maxarticle, + FALSE, FALSE, 0); + gtk_widget_set_usize (spinbtn_maxarticle, 64, -1); + gtk_spin_button_set_numeric + (GTK_SPIN_BUTTON (spinbtn_maxarticle), TRUE); + + receive.checkbtn_incext = checkbtn_incext; + receive.entry_incext = entry_incext; + receive.button_incext = button_incext; + + receive.checkbtn_local = checkbtn_local; + receive.checkbtn_filter_on_inc = checkbtn_filter_on_inc; + receive.entry_spool = entry_spool; + + receive.checkbtn_autochk = checkbtn_autochk; + receive.spinbtn_autochk = spinbtn_autochk; + receive.spinbtn_autochk_adj = spinbtn_autochk_adj; + + receive.checkbtn_chkonstartup = checkbtn_chkonstartup; + + receive.spinbtn_maxarticle = spinbtn_maxarticle; + receive.spinbtn_maxarticle_adj = spinbtn_maxarticle_adj; +} + +static void prefs_send_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *frame_sendext; + GtkWidget *vbox_sendext; + GtkWidget *checkbtn_sendext; + GtkWidget *hbox1; + GtkWidget *label_sendext; + GtkWidget *entry_sendext; + GtkWidget *button_sendext; + GtkWidget *checkbtn_savemsg; + GtkWidget *checkbtn_queuemsg; + GtkWidget *label_outcharset; + GtkWidget *optmenu; + GtkWidget *optmenu_menu; + GtkWidget *menuitem; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + PACK_FRAME(vbox1, frame_sendext, _("External program")); + + gtk_widget_set_sensitive(frame_sendext, FALSE); + + vbox_sendext = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox_sendext); + gtk_container_add (GTK_CONTAINER (frame_sendext), vbox_sendext); + gtk_container_set_border_width (GTK_CONTAINER (vbox_sendext), 8); + + PACK_CHECK_BUTTON (vbox_sendext, checkbtn_sendext, + _("Use external program for sending")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox_sendext), hbox1, FALSE, FALSE, 0); + SET_TOGGLE_SENSITIVITY(checkbtn_sendext, hbox1); + + label_sendext = gtk_label_new (_("Program path")); + gtk_widget_show (label_sendext); + gtk_box_pack_start (GTK_BOX (hbox1), label_sendext, FALSE, FALSE, 0); + + entry_sendext = gtk_entry_new (); + gtk_widget_show (entry_sendext); + gtk_box_pack_start (GTK_BOX (hbox1), entry_sendext, TRUE, TRUE, 0); + + button_sendext = gtk_button_new_with_label ("... "); + gtk_widget_show (button_sendext); + gtk_box_pack_start (GTK_BOX (hbox1), button_sendext, FALSE, FALSE, 0); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (vbox2, checkbtn_savemsg, + _("Save sent message to outbox")); + PACK_CHECK_BUTTON (vbox2, checkbtn_queuemsg, + _("Queue message that failed to send")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); + + label_outcharset = gtk_label_new (_("Outgoing codeset")); + gtk_widget_show (label_outcharset); + gtk_box_pack_start (GTK_BOX (hbox1), label_outcharset, FALSE, FALSE, 0); + + optmenu = gtk_option_menu_new (); + gtk_widget_show (optmenu); + gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0); + + optmenu_menu = gtk_menu_new (); + +#define SET_MENUITEM(str, charset) \ +{ \ + MENUITEM_ADD(optmenu_menu, menuitem, str, charset); \ +} + + SET_MENUITEM(_("Automatic"), CS_AUTO); + SET_MENUITEM(_("7bit ascii (US-ASCII)"), CS_US_ASCII); +#if HAVE_LIBJCONV + SET_MENUITEM(_("Unicode (UTF-8)"), CS_UTF_8); +#endif + SET_MENUITEM(_("Western European (ISO-8859-1)"), CS_ISO_8859_1); +#if HAVE_LIBJCONV + SET_MENUITEM(_("Central European (ISO-8859-2)"), CS_ISO_8859_2); + SET_MENUITEM(_("Baltic (ISO-8859-13)"), CS_ISO_8859_13); + SET_MENUITEM(_("Baltic (ISO-8859-4)"), CS_ISO_8859_4); + SET_MENUITEM(_("Greek (ISO-8859-7)"), CS_ISO_8859_7); + SET_MENUITEM(_("Turkish (ISO-8859-9)"), CS_ISO_8859_9); + SET_MENUITEM(_("Cyrillic (ISO-8859-5)"), CS_ISO_8859_5); + SET_MENUITEM(_("Cyrillic (KOI8-R)"), CS_KOI8_R); + SET_MENUITEM(_("Cyrillic (Windows-1251)"), CS_CP1251); + SET_MENUITEM(_("Cyrillic (KOI8-U)"), CS_KOI8_U); +#endif /* HAVE_LIBJCONV */ + SET_MENUITEM(_("Japanese (ISO-2022-JP)"), CS_ISO_2022_JP); +#if 0 + SET_MENUITEM(_("Japanese (EUC-JP)"), CS_EUC_JP); + SET_MENUITEM(_("Japanese (Shift_JIS)"), CS_SHIFT_JIS); +#endif /* 0 */ +#if HAVE_LIBJCONV + SET_MENUITEM(_("Simplified Chinese (GB2312)"), CS_GB2312); + SET_MENUITEM(_("Traditional Chinese (Big5)"), CS_BIG5); +#if 0 + SET_MENUITEM(_("Traditional Chinese (EUC-TW)"), CS_EUC_TW); + SET_MENUITEM(_("Chinese (ISO-2022-CN)"), CS_ISO_2022_CN); +#endif /* 0 */ + SET_MENUITEM(_("Korean (EUC-KR)"), CS_EUC_KR); +#endif /* HAVE_LIBJCONV */ + + gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu); + + send.checkbtn_sendext = checkbtn_sendext; + send.entry_sendext = entry_sendext; + send.button_sendext = button_sendext; + + send.checkbtn_savemsg = checkbtn_savemsg; + send.checkbtn_queuemsg = checkbtn_queuemsg; + + send.optmenu_charset = optmenu; +} + +static void prefs_compose_create(void) +{ + GtkWidget *vbox1; + GtkWidget *frame_quote; + GtkWidget *vbox_quote; + GtkWidget *checkbtn_quote; + GtkWidget *hbox1; + GtkWidget *label_quotemark; + GtkWidget *entry_quotemark; + GtkWidget *hbox2; + GtkWidget *label_quotefmt; + GtkWidget *btn_quotedesc; + GtkWidget *scrolledwin_quotefmt; + GtkWidget *text_quotefmt; + + GtkWidget *frame_sig; + GtkWidget *vbox_sig; + GtkWidget *checkbtn_autosig; + GtkWidget *label_sigsep; + GtkWidget *entry_sigsep; + + GtkWidget *vbox_linewrap; + GtkWidget *hbox3; + GtkWidget *hbox4; + GtkWidget *label_linewrap; + GtkObject *spinbtn_linewrap_adj; + GtkWidget *spinbtn_linewrap; + GtkWidget *checkbtn_wrapquote; + GtkWidget *checkbtn_wrapatsend; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + PACK_FRAME(vbox1, frame_quote, _("Quotation")); + + vbox_quote = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox_quote); + gtk_container_add (GTK_CONTAINER (frame_quote), vbox_quote); + gtk_container_set_border_width (GTK_CONTAINER (vbox_quote), 8); + + PACK_CHECK_BUTTON (vbox_quote, checkbtn_quote, + _("Quote message when replying")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox_quote), hbox1, TRUE, TRUE, 0); + + label_quotemark = gtk_label_new (_("Quotation mark")); + gtk_widget_show (label_quotemark); + gtk_box_pack_start (GTK_BOX (hbox1), label_quotemark, FALSE, FALSE, 0); + + entry_quotemark = gtk_entry_new (); + gtk_widget_show (entry_quotemark); + gtk_box_pack_start (GTK_BOX (hbox1), entry_quotemark, FALSE, FALSE, 0); + gtk_widget_set_usize (entry_quotemark, 64, -1); + + hbox2 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox2); + gtk_box_pack_start (GTK_BOX (vbox_quote), hbox2, TRUE, TRUE, 0); + + label_quotefmt = gtk_label_new (_("Quotation format:")); + gtk_widget_show (label_quotefmt); + gtk_box_pack_start (GTK_BOX (hbox2), label_quotefmt, FALSE, FALSE, 0); + + btn_quotedesc = + gtk_button_new_with_label (_(" Description of symbols ")); + gtk_widget_show (btn_quotedesc); + gtk_box_pack_end (GTK_BOX (hbox2), btn_quotedesc, FALSE, FALSE, 0); + gtk_signal_connect(GTK_OBJECT(btn_quotedesc), "clicked", + GTK_SIGNAL_FUNC(prefs_quote_description), NULL); + + scrolledwin_quotefmt = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (scrolledwin_quotefmt); + gtk_box_pack_start (GTK_BOX (vbox_quote), scrolledwin_quotefmt, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy + (GTK_SCROLLED_WINDOW (scrolledwin_quotefmt), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + + text_quotefmt = gtk_text_new (NULL, NULL); + gtk_widget_show (text_quotefmt); + gtk_container_add(GTK_CONTAINER(scrolledwin_quotefmt), text_quotefmt); + gtk_text_set_editable (GTK_TEXT (text_quotefmt), TRUE); + gtk_widget_set_usize(text_quotefmt, -1, 60); + + PACK_FRAME(vbox1, frame_sig, _("Signature")); + + vbox_sig = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox_sig); + gtk_container_add (GTK_CONTAINER (frame_sig), vbox_sig); + gtk_container_set_border_width (GTK_CONTAINER (vbox_sig), 8); + + PACK_CHECK_BUTTON (vbox_sig, checkbtn_autosig, + _("Insert signature automatically")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox_sig), hbox1, TRUE, TRUE, 0); + + label_sigsep = gtk_label_new (_("Signature separator")); + gtk_widget_show (label_sigsep); + gtk_box_pack_start (GTK_BOX (hbox1), label_sigsep, FALSE, FALSE, 0); + + entry_sigsep = gtk_entry_new (); + gtk_widget_show (entry_sigsep); + gtk_box_pack_start (GTK_BOX (hbox1), entry_sigsep, FALSE, FALSE, 0); + gtk_widget_set_usize (entry_sigsep, 64, -1); + + /* line-wrapping */ + vbox_linewrap = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox_linewrap); + gtk_box_pack_start (GTK_BOX (vbox1), vbox_linewrap, FALSE, FALSE, 0); + + hbox3 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox3); + gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox3, FALSE, FALSE, 0); + + label_linewrap = gtk_label_new (_("Wrap messages at")); + gtk_widget_show (label_linewrap); + gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0); + + spinbtn_linewrap_adj = gtk_adjustment_new (72, 20, 1024, 1, 10, 10); + spinbtn_linewrap = gtk_spin_button_new + (GTK_ADJUSTMENT (spinbtn_linewrap_adj), 1, 0); + gtk_widget_show (spinbtn_linewrap); + gtk_box_pack_start (GTK_BOX (hbox3), spinbtn_linewrap, FALSE, FALSE, 0); + gtk_widget_set_usize (spinbtn_linewrap, 64, -1); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linewrap), TRUE); + + label_linewrap = gtk_label_new (_("characters")); + gtk_widget_show (label_linewrap); + gtk_box_pack_start (GTK_BOX (hbox3), label_linewrap, FALSE, FALSE, 0); + + hbox4 = gtk_hbox_new (FALSE, 32); + gtk_widget_show (hbox4); + gtk_box_pack_start (GTK_BOX (vbox_linewrap), hbox4, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (hbox4, checkbtn_wrapquote, _("Wrap quotation")); + PACK_CHECK_BUTTON + (hbox4, checkbtn_wrapatsend, _("Wrap before sending")); + + compose.checkbtn_quote = checkbtn_quote; + compose.entry_quotemark = entry_quotemark; + compose.text_quotefmt = text_quotefmt; + compose.checkbtn_autosig = checkbtn_autosig; + compose.entry_sigsep = entry_sigsep; + + compose.spinbtn_linewrap = spinbtn_linewrap; + compose.spinbtn_linewrap_adj = spinbtn_linewrap_adj; + compose.checkbtn_wrapquote = checkbtn_wrapquote; + compose.checkbtn_wrapatsend = checkbtn_wrapatsend; +} + +static void prefs_display_create(void) +{ + GtkWidget *vbox1; + GtkWidget *frame_font; + GtkWidget *table1; + GtkWidget *label_textfont; + GtkWidget *entry_textfont; + GtkWidget *button_textfont; + GtkWidget *chkbtn_folder_unread; + GtkWidget *chkbtn_transhdr; + GtkWidget *frame_summary; + GtkWidget *vbox2; + GtkWidget *chkbtn_swapfrom; + GtkWidget *chkbtn_hscrollbar; + GtkWidget *hbox1; + GtkWidget *button_dispitem; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + PACK_FRAME(vbox1, frame_font, _("Font")); + + table1 = gtk_table_new (1, 3, FALSE); + gtk_widget_show (table1); + gtk_container_add (GTK_CONTAINER (frame_font), table1); + gtk_container_set_border_width (GTK_CONTAINER (table1), 8); + gtk_table_set_row_spacings (GTK_TABLE (table1), 8); + gtk_table_set_col_spacings (GTK_TABLE (table1), 8); + + label_textfont = gtk_label_new (_("Text")); + gtk_widget_show (label_textfont); + gtk_table_attach (GTK_TABLE (table1), label_textfont, 0, 1, 0, 1, + GTK_FILL, (GTK_EXPAND | GTK_FILL), 0, 0); + + entry_textfont = gtk_entry_new (); + gtk_widget_show (entry_textfont); + gtk_table_attach (GTK_TABLE (table1), entry_textfont, 1, 2, 0, 1, + (GTK_EXPAND | GTK_FILL), 0, 0, 0); + + button_textfont = gtk_button_new_with_label ("... "); + gtk_widget_show (button_textfont); + gtk_table_attach (GTK_TABLE (table1), button_textfont, 2, 3, 0, 1, + 0, 0, 0, 0); + gtk_signal_connect (GTK_OBJECT (button_textfont), "clicked", + GTK_SIGNAL_FUNC (prefs_font_select), NULL); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0); + + PACK_CHECK_BUTTON + (vbox2, chkbtn_transhdr, + _("Translate header name (such as `From:', `Subject:')")); + + PACK_CHECK_BUTTON (vbox2, chkbtn_folder_unread, + _("Display unread number next to folder name")); + + /* ---- Summary ---- */ + + PACK_FRAME(vbox1, frame_summary, _("Summary View")); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_container_add (GTK_CONTAINER (frame_summary), vbox2); + gtk_container_set_border_width (GTK_CONTAINER (vbox2), 8); + + PACK_CHECK_BUTTON + (vbox2, chkbtn_swapfrom, + _("Display recipient on `From' column if sender is yourself")); + PACK_CHECK_BUTTON + (vbox2, chkbtn_hscrollbar, _("Enable horizontal scroll bar")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0); + + button_dispitem = gtk_button_new_with_label + (_(" Set display item of summary... ")); + gtk_widget_show (button_dispitem); + gtk_box_pack_start (GTK_BOX (hbox1), button_dispitem, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (button_dispitem), "clicked", + GTK_SIGNAL_FUNC (prefs_summary_display_item_set), + NULL); + + display.entry_textfont = entry_textfont; + display.button_textfont = button_textfont; + + display.chkbtn_folder_unread = chkbtn_folder_unread; + + display.chkbtn_transhdr = chkbtn_transhdr; + display.chkbtn_swapfrom = chkbtn_swapfrom; + display.chkbtn_hscrollbar = chkbtn_hscrollbar; +} + +static void prefs_message_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *hbox1; + GtkWidget *chkbtn_enablecol; + GtkWidget *button_edit_col; + GtkWidget *chkbtn_mbalnum; + GtkWidget *chkbtn_disphdrpane; + GtkWidget *chkbtn_disphdr; + GtkWidget *hbox_linespc; + GtkWidget *label_linespc; + GtkObject *spinbtn_linespc_adj; + GtkWidget *spinbtn_linespc; + GtkWidget *chkbtn_headspc; + + GtkWidget *frame_scr; + GtkWidget *vbox_scr; + GtkWidget *chkbtn_smoothscroll; + GtkWidget *hbox_scr; + GtkWidget *label_scr; + GtkObject *spinbtn_scrollstep_adj; + GtkWidget *spinbtn_scrollstep; + GtkWidget *chkbtn_halfpage; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, TRUE, 0); + + PACK_CHECK_BUTTON (hbox1, chkbtn_enablecol, + _("Enable coloration of message")); + gtk_signal_connect (GTK_OBJECT (chkbtn_enablecol), "toggled", + GTK_SIGNAL_FUNC (prefs_enable_message_color_toggled), + NULL); + + button_edit_col = gtk_button_new_with_label (_(" Edit... ")); + gtk_widget_show (button_edit_col); + gtk_box_pack_end (GTK_BOX (hbox1), button_edit_col, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (button_edit_col), "clicked", + GTK_SIGNAL_FUNC (prefs_quote_colors_dialog), NULL); + + SET_TOGGLE_SENSITIVITY(chkbtn_enablecol, button_edit_col); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON + (vbox2, chkbtn_mbalnum, + _("Display 2-byte alphabet and numeric with 1-byte character")); + PACK_CHECK_BUTTON(vbox2, chkbtn_disphdrpane, + _("Display header pane above message view")); + PACK_CHECK_BUTTON(vbox2, chkbtn_disphdr, + _("Display short headers on message view")); + + hbox1 = gtk_hbox_new (FALSE, 32); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, TRUE, 0); + + hbox_linespc = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (hbox1), hbox_linespc, FALSE, TRUE, 0); + + label_linespc = gtk_label_new (_("Line space")); + gtk_widget_show (label_linespc); + gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc, + FALSE, FALSE, 0); + + spinbtn_linespc_adj = gtk_adjustment_new (2, 0, 16, 1, 1, 16); + spinbtn_linespc = gtk_spin_button_new + (GTK_ADJUSTMENT (spinbtn_linespc_adj), 1, 0); + gtk_widget_show (spinbtn_linespc); + gtk_box_pack_start (GTK_BOX (hbox_linespc), spinbtn_linespc, + FALSE, FALSE, 0); + gtk_widget_set_usize (spinbtn_linespc, 64, -1); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_linespc), TRUE); + + label_linespc = gtk_label_new (_("pixel(s)")); + gtk_widget_show (label_linespc); + gtk_box_pack_start (GTK_BOX (hbox_linespc), label_linespc, + FALSE, FALSE, 0); + + PACK_CHECK_BUTTON(hbox1, chkbtn_headspc, _("Leave space on head")); + + PACK_FRAME(vbox1, frame_scr, _("Scroll")); + + vbox_scr = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox_scr); + gtk_container_add (GTK_CONTAINER (frame_scr), vbox_scr); + gtk_container_set_border_width (GTK_CONTAINER (vbox_scr), 8); + + PACK_CHECK_BUTTON(vbox_scr, chkbtn_halfpage, _("Half page")); + + hbox1 = gtk_hbox_new (FALSE, 32); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox_scr), hbox1, FALSE, TRUE, 0); + + PACK_CHECK_BUTTON(hbox1, chkbtn_smoothscroll, _("Smooth scroll")); + + hbox_scr = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox_scr); + gtk_box_pack_start (GTK_BOX (hbox1), hbox_scr, FALSE, FALSE, 0); + + label_scr = gtk_label_new (_("Step")); + gtk_widget_show (label_scr); + gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0); + + spinbtn_scrollstep_adj = gtk_adjustment_new (1, 1, 100, 1, 10, 10); + spinbtn_scrollstep = gtk_spin_button_new + (GTK_ADJUSTMENT (spinbtn_scrollstep_adj), 1, 0); + gtk_widget_show (spinbtn_scrollstep); + gtk_box_pack_start (GTK_BOX (hbox_scr), spinbtn_scrollstep, + FALSE, FALSE, 0); + gtk_widget_set_usize (spinbtn_scrollstep, 64, -1); + gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbtn_scrollstep), + TRUE); + + label_scr = gtk_label_new (_("pixel(s)")); + gtk_widget_show (label_scr); + gtk_box_pack_start (GTK_BOX (hbox_scr), label_scr, FALSE, FALSE, 0); + + SET_TOGGLE_SENSITIVITY (chkbtn_smoothscroll, hbox_scr) + + message.chkbtn_enablecol = chkbtn_enablecol; + message.button_edit_col = button_edit_col; + message.chkbtn_mbalnum = chkbtn_mbalnum; + message.chkbtn_disphdrpane = chkbtn_disphdrpane; + message.chkbtn_disphdr = chkbtn_disphdr; + message.spinbtn_linespc = spinbtn_linespc; + message.chkbtn_headspc = chkbtn_headspc; + + message.chkbtn_smoothscroll = chkbtn_smoothscroll; + message.spinbtn_scrollstep = spinbtn_scrollstep; + message.spinbtn_scrollstep_adj = spinbtn_scrollstep_adj; + message.chkbtn_halfpage = chkbtn_halfpage; +} + +#if USE_GPGME +static void prefs_privacy_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *hbox1; + GtkWidget *checkbtn_default_encrypt; + GtkWidget *checkbtn_default_sign; + GtkWidget *checkbtn_auto_check_signatures; + GtkWidget *checkbtn_passphrase_grab; + GtkWidget *label; + GtkWidget *menuitem; + GtkWidget *optmenu; + GtkWidget *optmenu_menu; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (vbox2, checkbtn_default_encrypt, + _("Encrypt message by default")); + + PACK_CHECK_BUTTON (vbox2, checkbtn_default_sign, + _("Sign message by default")); + + PACK_CHECK_BUTTON (vbox2, checkbtn_auto_check_signatures, + _("Automatically check signatures")); + + PACK_CHECK_BUTTON (vbox2, checkbtn_passphrase_grab, + _("Grab input while entering a passphrase")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox1), hbox1, FALSE, FALSE, 0); + + /* create default signkey box */ + label = gtk_label_new (_("Default Sign Key")); + gtk_widget_show (label); + gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 0); + optmenu = gtk_option_menu_new (); + gtk_widget_show (optmenu); + gtk_box_pack_start(GTK_BOX (hbox1), optmenu, FALSE, FALSE, 0); + optmenu_menu = gtk_menu_new (); + + MENUITEM_ADD(optmenu_menu, menuitem, "Default Key", "def_key"); + MENUITEM_ADD(optmenu_menu, menuitem, "Second Key", "2nd_key"); + gtk_option_menu_set_menu (GTK_OPTION_MENU (optmenu), optmenu_menu); + /* FIXME: disabled because not implemented */ + gtk_widget_set_sensitive(optmenu, FALSE); + + privacy.checkbtn_default_encrypt = checkbtn_default_encrypt; + privacy.checkbtn_default_sign = checkbtn_default_sign; + privacy.checkbtn_auto_check_signatures + = checkbtn_auto_check_signatures; + privacy.checkbtn_passphrase_grab = checkbtn_passphrase_grab; + privacy.optmenu_default_signkey = optmenu; +} + +static void +prefs_common_default_signkey_set_data_from_optmenu(PrefParam *pparam) +{ +#if 0 + GtkWidget *menu; + GtkWidget *menuitem; + gchar *charset; + + menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); + menuitem = gtk_menu_get_active(GTK_MENU(menu)); + charset = gtk_object_get_user_data(GTK_OBJECT(menuitem)); + g_free(*((gchar **)pparam->data)); + *((gchar **)pparam->data) = g_strdup(charset); +#endif +} + +static void prefs_common_default_signkey_set_optmenu(PrefParam *pparam) +{ +#if 0 + GList *cur; + GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget); + GtkWidget *menu; + GtkWidget *menuitem; + gchar *charset; + gint n = 0; + + g_return_if_fail(optmenu != NULL); + g_return_if_fail(*((gchar **)pparam->data) != NULL); + + menu = gtk_option_menu_get_menu(optmenu); + for (cur = GTK_MENU_SHELL(menu)->children; + cur != NULL; cur = cur->next) { + menuitem = GTK_WIDGET(cur->data); + charset = gtk_object_get_user_data(GTK_OBJECT(menuitem)); + if (!strcmp(charset, *((gchar **)pparam->data))) { + gtk_option_menu_set_history(optmenu, n); + return; + } + n++; + } + + gtk_option_menu_set_history(optmenu, 0); + prefs_common_charset_set_data_from_optmenu(pparam); +#endif +} +#endif /* USE_GPGME */ + +static void prefs_interface_create(void) +{ + GtkWidget *vbox1; + GtkWidget *vbox2; + GtkWidget *vbox3; + GtkWidget *checkbtn_emacs; + GtkWidget *checkbtn_openunread; + GtkWidget *checkbtn_openinbox; + GtkWidget *checkbtn_immedexec; + GtkWidget *label; + + GtkWidget *frame_exit; + GtkWidget *vbox_exit; + GtkWidget *hbox1; + GtkWidget *checkbtn_confonexit; + GtkWidget *checkbtn_cleanonexit; + GtkWidget *checkbtn_askonclean; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (vbox2, checkbtn_emacs, + _("Emulate the behavior of mouse operation of\n" + "Emacs-based mailer")); + gtk_label_set_justify (GTK_LABEL (GTK_BIN (checkbtn_emacs)->child), + GTK_JUSTIFY_LEFT); + + PACK_CHECK_BUTTON + (vbox2, checkbtn_openunread, + _("Open first unread message when entering a folder")); + + PACK_CHECK_BUTTON + (vbox2, checkbtn_openinbox, + _("Go to inbox after receiving new mail")); + + vbox3 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox3); + gtk_box_pack_start (GTK_BOX (vbox2), vbox3, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON + (vbox3, checkbtn_immedexec, + _("Execute immediately when moving or deleting messages")); + + hbox1 = gtk_hbox_new (FALSE, 0); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox3), hbox1, FALSE, FALSE, 0); + + label = gtk_label_new + (_("(Messages will be just marked till execution\n" + " if this is turned off)")); + gtk_box_pack_start (GTK_BOX (hbox1), label, FALSE, FALSE, 8); + gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); + + PACK_FRAME (vbox1, frame_exit, _("On exit")); + + vbox_exit = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox_exit); + gtk_container_add (GTK_CONTAINER (frame_exit), vbox_exit); + gtk_container_set_border_width (GTK_CONTAINER (vbox_exit), 8); + + PACK_CHECK_BUTTON (vbox_exit, checkbtn_confonexit, + _("Confirm on exit")); + + hbox1 = gtk_hbox_new (FALSE, 32); + gtk_widget_show (hbox1); + gtk_box_pack_start (GTK_BOX (vbox_exit), hbox1, FALSE, FALSE, 0); + + PACK_CHECK_BUTTON (hbox1, checkbtn_cleanonexit, + _("Empty trash on exit")); + PACK_CHECK_BUTTON (hbox1, checkbtn_askonclean, + _("Ask before emptying")); + SET_TOGGLE_SENSITIVITY (checkbtn_cleanonexit, checkbtn_askonclean); + + interface.checkbtn_emacs = checkbtn_emacs; + interface.checkbtn_openunread = checkbtn_openunread; + interface.checkbtn_openinbox = checkbtn_openinbox; + interface.checkbtn_immedexec = checkbtn_immedexec; + interface.checkbtn_confonexit = checkbtn_confonexit; + interface.checkbtn_cleanonexit = checkbtn_cleanonexit; + interface.checkbtn_askonclean = checkbtn_askonclean; +} + +static void prefs_other_create(void) +{ + GtkWidget *vbox1; + GtkWidget *hbox1; + + GtkWidget *uri_frame; + GtkWidget *uri_label; + GtkWidget *uri_combo; + GtkWidget *uri_entry; + + GtkWidget *print_frame; + GtkWidget *printcmd_label; + GtkWidget *printcmd_entry; + + GtkWidget *exteditor_frame; + GtkWidget *exteditor_label; + GtkWidget *exteditor_combo; + GtkWidget *exteditor_entry; + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (dialog.notebook), vbox1); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), VBOX_BORDER); + + PACK_FRAME(vbox1, uri_frame, + _("External Web browser (%s will be replaced with URI)")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_container_add (GTK_CONTAINER (uri_frame), hbox1); + gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8); + + uri_label = gtk_label_new (_("Command")); + gtk_widget_show(uri_label); + gtk_box_pack_start (GTK_BOX (hbox1), uri_label, FALSE, TRUE, 0); + + uri_combo = gtk_combo_new (); + gtk_widget_show (uri_combo); + gtk_box_pack_start (GTK_BOX (hbox1), uri_combo, TRUE, TRUE, 0); + gtkut_combo_set_items (GTK_COMBO (uri_combo), + "netscape -remote 'openURL(%s,raise)'", + "gnome-moz-remote --raise --newwin '%s'", + "kterm -e w3m '%s'", + "kterm -e lynx '%s'", + NULL); + + uri_entry = GTK_COMBO (uri_combo)->entry; + + PACK_FRAME(vbox1, print_frame, + _("Printing (%s will be replaced with file name)")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_container_add (GTK_CONTAINER (print_frame), hbox1); + gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8); + + printcmd_label = gtk_label_new (_("Command")); + gtk_widget_show (printcmd_label); + gtk_box_pack_start (GTK_BOX (hbox1), printcmd_label, FALSE, FALSE, 0); + + printcmd_entry = gtk_entry_new (); + gtk_widget_show (printcmd_entry); + gtk_box_pack_start (GTK_BOX (hbox1), printcmd_entry, TRUE, TRUE, 0); + + PACK_FRAME(vbox1, exteditor_frame, + _("External editor (%s will be replaced with file name)")); + + hbox1 = gtk_hbox_new (FALSE, 8); + gtk_widget_show (hbox1); + gtk_container_add (GTK_CONTAINER (exteditor_frame), hbox1); + gtk_container_set_border_width (GTK_CONTAINER (hbox1), 8); + + exteditor_label = gtk_label_new (_("Command")); + gtk_widget_show (exteditor_label); + gtk_box_pack_start (GTK_BOX (hbox1), exteditor_label, FALSE, FALSE, 0); + + exteditor_combo = gtk_combo_new (); + gtk_widget_show (exteditor_combo); + gtk_box_pack_start (GTK_BOX (hbox1), exteditor_combo, TRUE, TRUE, 0); + gtkut_combo_set_items (GTK_COMBO (exteditor_combo), + "gedit %s", + "mgedit --no-fork %s", + "emacs %s", + "xemacs %s", + "kterm -e jed %s", + "kterm -e vi %s", + NULL); + exteditor_entry = GTK_COMBO (exteditor_combo)->entry; + + other.uri_combo = uri_combo; + other.uri_entry = uri_entry; + other.printcmd_entry = printcmd_entry; + + other.exteditor_combo = exteditor_combo; + other.exteditor_entry = exteditor_entry; +} + +void prefs_quote_colors_dialog(void) +{ + if (!quote_color_win) + prefs_quote_colors_dialog_create(); + gtk_widget_show(quote_color_win); + + gtk_main(); + gtk_widget_hide(quote_color_win); + + textview_update_message_colors(); +} + +static void prefs_quote_colors_dialog_create(void) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *table; + GtkWidget *quotelevel1_label; + GtkWidget *quotelevel2_label; + GtkWidget *quotelevel3_label; + GtkWidget *uri_label; + GtkWidget *hbbox; + GtkWidget *ok_btn; + //GtkWidget *cancel_btn; + GtkWidget *recycle_colors_btn; + GtkWidget *frame_colors; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_container_set_border_width(GTK_CONTAINER(window), 2); + gtk_window_set_title(GTK_WINDOW(window), _("Set message colors")); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, FALSE); + + vbox = gtk_vbox_new (FALSE, VSPACING); + gtk_container_add (GTK_CONTAINER (window), vbox); + gtk_container_set_border_width (GTK_CONTAINER (vbox), 8); + PACK_FRAME(vbox, frame_colors, _("Colors")); + + table = gtk_table_new (4, 2, FALSE); + gtk_container_add (GTK_CONTAINER (frame_colors), table); + gtk_container_set_border_width (GTK_CONTAINER (table), 8); + gtk_table_set_row_spacings (GTK_TABLE (table), 2); + gtk_table_set_col_spacings (GTK_TABLE (table), 4); + +/* gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); */ + + color_buttons.quote_level1_btn = gtk_button_new(); + gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level1_btn, 0, 1, 0, 1, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_widget_set_usize (color_buttons.quote_level1_btn, 40, 30); + gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level1_btn), 5); + + color_buttons.quote_level2_btn = gtk_button_new(); + gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level2_btn, 0, 1, 1, 2, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_widget_set_usize (color_buttons.quote_level2_btn, 40, 30); + gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level2_btn), 5); + + color_buttons.quote_level3_btn = gtk_button_new_with_label (""); + gtk_table_attach(GTK_TABLE (table), color_buttons.quote_level3_btn, 0, 1, 2, 3, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_widget_set_usize (color_buttons.quote_level3_btn, 40, 30); + gtk_container_set_border_width (GTK_CONTAINER (color_buttons.quote_level3_btn), 5); + + color_buttons.uri_btn = gtk_button_new_with_label (""); + gtk_table_attach(GTK_TABLE (table), color_buttons.uri_btn, 0, 1, 3, 4, + (GtkAttachOptions) (0), + (GtkAttachOptions) (0), 0, 0); + gtk_widget_set_usize (color_buttons.uri_btn, 40, 30); + gtk_container_set_border_width (GTK_CONTAINER (color_buttons.uri_btn), 5); + + quotelevel1_label = gtk_label_new (_("Quoted Text - First Level")); + gtk_table_attach(GTK_TABLE (table), quotelevel1_label, 1, 2, 0, 1, + (GTK_EXPAND | GTK_FILL), 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (quotelevel1_label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (quotelevel1_label), 0, 0.5); + + quotelevel2_label = gtk_label_new (_("Quoted Text - Second Level")); + gtk_table_attach(GTK_TABLE (table), quotelevel2_label, 1, 2, 1, 2, + (GTK_EXPAND | GTK_FILL), 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (quotelevel2_label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (quotelevel2_label), 0, 0.5); + + quotelevel3_label = gtk_label_new (_("Quoted Text - Third Level")); + gtk_table_attach(GTK_TABLE (table), quotelevel3_label, 1, 2, 2, 3, + (GTK_EXPAND | GTK_FILL), 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (quotelevel3_label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (quotelevel3_label), 0, 0.5); + + uri_label = gtk_label_new (_("URI link")); + gtk_table_attach(GTK_TABLE (table), uri_label, 1, 2, 3, 4, + (GTK_EXPAND | GTK_FILL), 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (uri_label), GTK_JUSTIFY_LEFT); + gtk_misc_set_alignment (GTK_MISC (uri_label), 0, 0.5); + + PACK_CHECK_BUTTON (vbox, recycle_colors_btn, + _("Recycle quote colors")); + + gtkut_button_set_create(&hbbox, &ok_btn, _("OK"), + NULL, NULL, NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); + + gtk_widget_grab_default(ok_btn); + gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", + GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + + gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level1_btn), "clicked", + GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL1"); + gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level2_btn), "clicked", + GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL2"); + gtk_signal_connect(GTK_OBJECT(color_buttons.quote_level3_btn), "clicked", + GTK_SIGNAL_FUNC(quote_color_set_dialog), "LEVEL3"); + gtk_signal_connect(GTK_OBJECT(color_buttons.uri_btn), "clicked", + GTK_SIGNAL_FUNC(quote_color_set_dialog), "URI"); + gtk_signal_connect(GTK_OBJECT(recycle_colors_btn), "toggled", + GTK_SIGNAL_FUNC(prefs_recycle_colors_toggled), NULL); + + /* show message button colors and recycle options */ + set_button_bg_color(color_buttons.quote_level1_btn, + prefs_common.quote_level1_col); + set_button_bg_color(color_buttons.quote_level2_btn, + prefs_common.quote_level2_col); + set_button_bg_color(color_buttons.quote_level3_btn, + prefs_common.quote_level3_col); + set_button_bg_color(color_buttons.uri_btn, + prefs_common.uri_col); + gtk_toggle_button_set_active((GtkToggleButton *)recycle_colors_btn, + prefs_common.recycle_quote_colors); + + gtk_widget_show_all(vbox); + quote_color_win = window; +} + +static void quote_color_set_dialog(GtkWidget *widget, gpointer data) +{ + gchar *type = (gchar *)data; + gchar *title = NULL; + gdouble color[4] = {0.0, 0.0, 0.0, 0.0}; + gint rgbvalue = 0; + GtkColorSelectionDialog *dialog; + + if(g_strcasecmp(type, "LEVEL1") == 0) { + title = _("Pick color for quotation level 1"); + rgbvalue = prefs_common.quote_level1_col; + } else if(g_strcasecmp(type, "LEVEL2") == 0) { + title = _("Pick color for quotation level 2"); + rgbvalue = prefs_common.quote_level2_col; + } else if(g_strcasecmp(type, "LEVEL3") == 0) { + title = _("Pick color for quotation level 3"); + rgbvalue = prefs_common.quote_level3_col; + } else if(g_strcasecmp(type, "URI") == 0) { + title = _("Pick color for URI"); + rgbvalue = prefs_common.uri_col; + } else { /* Should never be called */ + fprintf(stderr, "Unrecognized datatype '%s' in quote_color_set_dialog\n", type); + return; + } + + color_dialog = gtk_color_selection_dialog_new(title); + gtk_window_set_position(GTK_WINDOW(color_dialog), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(color_dialog), TRUE); + gtk_window_set_policy(GTK_WINDOW(color_dialog), FALSE, FALSE, FALSE); + + gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->ok_button), + "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_ok), data); + gtk_signal_connect(GTK_OBJECT(((GtkColorSelectionDialog *)color_dialog)->cancel_button), + "clicked", GTK_SIGNAL_FUNC(quote_colors_set_dialog_cancel), data); + + /* preselect the previous color in the color selection dialog */ + color[0] = (gdouble) ((rgbvalue & 0xff0000) >> 16) / 255.0; + color[1] = (gdouble) ((rgbvalue & 0x00ff00) >> 8) / 255.0; + color[2] = (gdouble) (rgbvalue & 0x0000ff) / 255.0; + dialog = (GtkColorSelectionDialog *)color_dialog; + gtk_color_selection_set_color + ((GtkColorSelection *)dialog->colorsel, color); + + gtk_widget_show(color_dialog); +} + +static void quote_colors_set_dialog_ok(GtkWidget *widget, gpointer data) +{ + GtkColorSelection *colorsel = (GtkColorSelection *) + ((GtkColorSelectionDialog *)color_dialog)->colorsel; + gdouble color[4]; + gint red, green, blue, rgbvalue; + gchar *type = (gchar *)data; + + gtk_color_selection_get_color(colorsel, color); + + red = (gint) (color[0] * 255.0); + green = (gint) (color[1] * 255.0); + blue = (gint) (color[2] * 255.0); + rgbvalue = (gint) ((red * 0x10000) | (green * 0x100) | blue); + +#if 0 + fprintf(stderr, "redc = %f, greenc = %f, bluec = %f\n", color[0], color[1], color[2]); + fprintf(stderr, "red = %d, green = %d, blue = %d\n", red, green, blue); + fprintf(stderr, "Color is %x\n", rgbvalue); +#endif + + if (g_strcasecmp(type, "LEVEL1") == 0) { + prefs_common.quote_level1_col = rgbvalue; + set_button_bg_color(color_buttons.quote_level1_btn, rgbvalue); + } else if (g_strcasecmp(type, "LEVEL2") == 0) { + prefs_common.quote_level2_col = rgbvalue; + set_button_bg_color(color_buttons.quote_level2_btn, rgbvalue); + } else if (g_strcasecmp(type, "LEVEL3") == 0) { + prefs_common.quote_level3_col = rgbvalue; + set_button_bg_color(color_buttons.quote_level3_btn, rgbvalue); + } else if (g_strcasecmp(type, "URI") == 0) { + prefs_common.uri_col = rgbvalue; + set_button_bg_color(color_buttons.uri_btn, rgbvalue); + } else + fprintf( stderr, "Unrecognized datatype '%s' in quote_color_set_dialog_ok\n", type ); + + gtk_widget_hide(color_dialog); +} + +static void quote_colors_set_dialog_cancel(GtkWidget *widget, gpointer data) +{ + gtk_widget_hide(color_dialog); +} + +static void set_button_bg_color(GtkWidget *widget, gint rgbvalue) +{ + GtkStyle *newstyle; + GdkColor color; + + gtkut_convert_int_to_gdk_color(rgbvalue, &color); + newstyle = gtk_style_copy(gtk_widget_get_default_style()); + newstyle->bg[GTK_STATE_NORMAL] = color; + newstyle->bg[GTK_STATE_PRELIGHT] = color; + newstyle->bg[GTK_STATE_ACTIVE] = color; + + gtk_widget_set_style(GTK_WIDGET(widget), newstyle); +} + +static void prefs_enable_message_color_toggled(void) +{ + gboolean is_active; + + is_active = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON(message.chkbtn_enablecol)); + gtk_widget_set_sensitive(message.button_edit_col, is_active); + prefs_common.enable_color = is_active; +} + +static void prefs_recycle_colors_toggled(GtkWidget *widget) +{ + gboolean is_active; + + is_active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)); + prefs_common.recycle_quote_colors = is_active; +} + +static void prefs_quote_description(void) +{ + if (!quote_desc_win) + prefs_quote_description_create(); + + gtk_widget_show(quote_desc_win); + gtk_main(); + gtk_widget_hide(quote_desc_win); +} + +static void prefs_quote_description_create(void) +{ + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *hbbox; + GtkWidget *label; + GtkWidget *ok_btn; + + quote_desc_win = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_window_set_title(GTK_WINDOW(quote_desc_win), + _("Description of symbols")); + gtk_container_set_border_width(GTK_CONTAINER(quote_desc_win), 8); + gtk_window_set_position(GTK_WINDOW(quote_desc_win), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(quote_desc_win), TRUE); + gtk_window_set_policy(GTK_WINDOW(quote_desc_win), FALSE, TRUE, FALSE); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(quote_desc_win), vbox); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + + label = gtk_label_new + ("%d:\n" + "%f:\n" + "%n:\n" + "%N:\n" + "%I:\n" + "%s:\n" + "%t:\n" + "%i:\n" + "%%:"); + + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); + + label = gtk_label_new + (_("Date\n" + "From\n" + "Full Name of Sender\n" + "First Name of Sender\n" + "Initial of Sender\n" + "Subject\n" + "To\n" + "Message-ID\n" + "%")); + + gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0); + gtk_label_set_justify(GTK_LABEL(label), GTK_JUSTIFY_LEFT); + + gtkut_button_set_create(&hbbox, &ok_btn, _("OK"), + NULL, NULL, NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); + + gtk_widget_grab_default(ok_btn); + gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", + GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + + gtk_signal_connect(GTK_OBJECT(quote_desc_win), "delete_event", + GTK_SIGNAL_FUNC(gtk_main_quit), NULL); + + gtk_widget_show_all(vbox); +} + +/* functions for setting items of SummaryView */ + +static struct _SummaryDisplayItem +{ + GtkWidget *window; + + GtkWidget *chkbtn[N_SUMMARY_COLS]; + + GtkWidget *ok_btn; + GtkWidget *cancel_btn; +} summarydispitem; + +#define SET_ACTIVE(column, var) \ + gtk_toggle_button_set_active \ + (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column]), \ + prefs_common.var) +#define GET_ACTIVE(column, var) \ + prefs_common.var = gtk_toggle_button_get_active \ + (GTK_TOGGLE_BUTTON(summarydispitem.chkbtn[column])) + +void prefs_summary_display_item_set(void) +{ + static gboolean cancelled; + + if (!summarydispitem.window) + prefs_summary_display_item_dialog_create(&cancelled); + gtk_widget_grab_focus(summarydispitem.ok_btn); + gtk_widget_show(summarydispitem.window); + manage_window_set_transient(GTK_WINDOW(summarydispitem.window)); + + SET_ACTIVE(S_COL_MARK, show_mark); + SET_ACTIVE(S_COL_UNREAD, show_unread); + SET_ACTIVE(S_COL_MIME, show_mime); + SET_ACTIVE(S_COL_NUMBER, show_number); + SET_ACTIVE(S_COL_SIZE, show_size); + SET_ACTIVE(S_COL_DATE, show_date); + SET_ACTIVE(S_COL_FROM, show_from); + SET_ACTIVE(S_COL_SUBJECT, show_subject); + + gtk_main(); + gtk_widget_hide(summarydispitem.window); + + if (cancelled != TRUE) { + GET_ACTIVE(S_COL_MARK, show_mark); + GET_ACTIVE(S_COL_UNREAD, show_unread); + GET_ACTIVE(S_COL_MIME, show_mime); + GET_ACTIVE(S_COL_NUMBER, show_number); + GET_ACTIVE(S_COL_SIZE, show_size); + GET_ACTIVE(S_COL_DATE, show_date); + GET_ACTIVE(S_COL_FROM, show_from); + GET_ACTIVE(S_COL_SUBJECT, show_subject); + + main_window_reflect_prefs_all(); + } +} + +#define SET_CHECK_BUTTON(column, label) \ +{ \ + summarydispitem.chkbtn[column] = \ + gtk_check_button_new_with_label(label); \ + gtk_box_pack_start(GTK_BOX(chkbtn_vbox), \ + summarydispitem.chkbtn[column], \ + FALSE, FALSE, 0); \ +} + +static void prefs_summary_display_item_dialog_create(gboolean *cancelled) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *chkbtn_vbox; + GtkWidget *hbbox; + GtkWidget *ok_btn; + GtkWidget *cancel_btn; + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_container_set_border_width(GTK_CONTAINER(window), 8); + gtk_window_set_title(GTK_WINDOW(window), _("Set display item")); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(display_item_delete_event), + cancelled); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(display_item_key_pressed), + cancelled); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(window), vbox); + + chkbtn_vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), chkbtn_vbox, FALSE, FALSE, 0); + + SET_CHECK_BUTTON(S_COL_MARK, _("Mark")); + SET_CHECK_BUTTON(S_COL_UNREAD, _("Unread")); + SET_CHECK_BUTTON(S_COL_MIME, _("MIME")); + SET_CHECK_BUTTON(S_COL_NUMBER, _("Number")); + SET_CHECK_BUTTON(S_COL_SIZE, _("Size")); + SET_CHECK_BUTTON(S_COL_DATE, _("Date")); + SET_CHECK_BUTTON(S_COL_FROM, _("From")); + SET_CHECK_BUTTON(S_COL_SUBJECT, _("Subject")); + + gtkut_button_set_create(&hbbox, &ok_btn, _("OK"), + &cancel_btn, _("Cancel"), NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), hbbox, FALSE, FALSE, 0); + gtk_widget_grab_default(ok_btn); + + gtk_signal_connect(GTK_OBJECT(ok_btn), "clicked", + GTK_SIGNAL_FUNC(display_item_ok), cancelled); + gtk_signal_connect(GTK_OBJECT(cancel_btn), "clicked", + GTK_SIGNAL_FUNC(display_item_cancel), cancelled); + + gtk_widget_show_all(vbox); + + summarydispitem.window = window; + summarydispitem.ok_btn = ok_btn; + summarydispitem.cancel_btn = cancel_btn; +} + +static void display_item_ok(GtkWidget *widget, gboolean *cancelled) +{ + *cancelled = FALSE; + gtk_main_quit(); +} + +static void display_item_cancel(GtkWidget *widget, gboolean *cancelled) +{ + *cancelled = TRUE; + gtk_main_quit(); +} + +static gint display_item_delete_event(GtkWidget *widget, GdkEventAny *event, + gboolean *cancelled) +{ + *cancelled = TRUE; + gtk_main_quit(); + + return TRUE; +} + +static void display_item_key_pressed(GtkWidget *widget, GdkEventKey *event, + gboolean *cancelled) +{ + if (event && event->keyval == GDK_Escape) { + *cancelled = TRUE; + gtk_main_quit(); + } +} + +static void prefs_font_select(GtkButton *button) +{ + if (!font_sel_win) { + font_sel_win = gtk_font_selection_dialog_new + (_("Font selection")); + gtk_window_position(GTK_WINDOW(font_sel_win), + GTK_WIN_POS_CENTER); + gtk_signal_connect(GTK_OBJECT(font_sel_win), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), + NULL); + gtk_signal_connect + (GTK_OBJECT(font_sel_win), "key_press_event", + GTK_SIGNAL_FUNC(prefs_font_selection_key_pressed), + NULL); + gtk_signal_connect + (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button), + "clicked", + GTK_SIGNAL_FUNC(prefs_font_selection_ok), + NULL); + gtk_signal_connect_object + (GTK_OBJECT(GTK_FONT_SELECTION_DIALOG(font_sel_win)->cancel_button), + "clicked", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), + GTK_OBJECT(font_sel_win)); + } + + manage_window_set_transient(GTK_WINDOW(font_sel_win)); + gtk_window_set_modal(GTK_WINDOW(font_sel_win), TRUE); + gtk_widget_grab_focus + (GTK_FONT_SELECTION_DIALOG(font_sel_win)->ok_button); + gtk_widget_show(font_sel_win); +} + +static void prefs_font_selection_key_pressed(GtkWidget *widget, + GdkEventKey *event, + gpointer data) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(font_sel_win); +} + +static void prefs_font_selection_ok(GtkButton *button) +{ + gchar *fontname; + + fontname = gtk_font_selection_dialog_get_font_name + (GTK_FONT_SELECTION_DIALOG(font_sel_win)); + + if (fontname) { + gtk_entry_set_text(GTK_ENTRY(display.entry_textfont), fontname); + g_free(fontname); + } + + gtk_widget_hide(font_sel_win); +} + +static void prefs_common_charset_set_data_from_optmenu(PrefParam *pparam) +{ + GtkWidget *menu; + GtkWidget *menuitem; + gchar *charset; + + menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(*pparam->widget)); + menuitem = gtk_menu_get_active(GTK_MENU(menu)); + charset = gtk_object_get_user_data(GTK_OBJECT(menuitem)); + g_free(*((gchar **)pparam->data)); + *((gchar **)pparam->data) = g_strdup(charset); +} + +static void prefs_common_charset_set_optmenu(PrefParam *pparam) +{ + GList *cur; + GtkOptionMenu *optmenu = GTK_OPTION_MENU(*pparam->widget); + GtkWidget *menu; + GtkWidget *menuitem; + gchar *charset; + gint n = 0; + + g_return_if_fail(optmenu != NULL); + g_return_if_fail(*((gchar **)pparam->data) != NULL); + + menu = gtk_option_menu_get_menu(optmenu); + for (cur = GTK_MENU_SHELL(menu)->children; + cur != NULL; cur = cur->next) { + menuitem = GTK_WIDGET(cur->data); + charset = gtk_object_get_user_data(GTK_OBJECT(menuitem)); + if (!strcmp(charset, *((gchar **)pparam->data))) { + gtk_option_menu_set_history(optmenu, n); + return; + } + n++; + } + + gtk_option_menu_set_history(optmenu, 0); + prefs_common_charset_set_data_from_optmenu(pparam); +} + +static void prefs_common_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(dialog.window); +} + +static void prefs_common_ok(GtkButton *button) +{ + prefs_common_apply(button); + gtk_widget_hide(dialog.window); + if (quote_desc_win && GTK_WIDGET_VISIBLE(quote_desc_win)) + gtk_widget_hide(quote_desc_win); +} + +static void prefs_common_apply(GtkButton *button) +{ + prefs_set_data_from_dialog(param); + main_window_reflect_prefs_all(); + prefs_common_save_config(); +} diff --git a/src/prefs_common.h b/src/prefs_common.h new file mode 100644 index 000000000..4fb0db4ac --- /dev/null +++ b/src/prefs_common.h @@ -0,0 +1,177 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PREFS_COMMON_H__ +#define __PREFS_COMMON_H__ + +#include <glib.h> + +#include "mainwindow.h" +#include "codeconv.h" +#include "textview.h" + +typedef struct _PrefsCommon PrefsCommon; + +struct _PrefsCommon +{ + /* Receive */ + gboolean use_extinc; + gchar *extinc_path; + gboolean inc_local; + gboolean filter_on_inc; + gchar *spool_path; + gboolean autochk_newmail; + gint autochk_itv; + gboolean chk_on_startup; + gint max_articles; + + /* Send */ + gboolean use_extsend; + gchar *extsend_path; + gboolean savemsg; + gboolean queue_msg; + gchar *outgoing_charset; + + /* Compose */ + gboolean reply_with_quote; + gchar *quotemark; + gchar *quotefmt; + gboolean auto_sig; + gchar *sig_sep; + gint linewrap_len; + gboolean linewrap_quote; + gboolean linewrap_at_send; + gboolean show_ruler; + + /* Display */ + gchar *widgetfont; + gchar *textfont; + gboolean display_folder_unread; + ToolbarStyle toolbar_style; + gboolean show_statusbar; + gboolean trans_hdr; + gboolean enable_thread; + gboolean enable_hscrollbar; + gboolean swap_from; + + /* Filtering */ + GSList *fltlist; + + gboolean show_mark; + gboolean show_unread; + gboolean show_mime; + gboolean show_number; + gboolean show_size; + gboolean show_date; + gboolean show_from; + gboolean show_subject; + + /* Widget size */ + gint folderview_x; + gint folderview_y; + gint folderview_width; + gint folderview_height; + gint folder_col_folder; + gint folder_col_new; + gint folder_col_unread; + gint folder_col_total; + + gint summaryview_width; + gint summaryview_height; + gint summary_col_mark; + gint summary_col_unread; + gint summary_col_mime; + gint summary_col_number; + gint summary_col_size; + gint summary_col_date; + gint summary_col_from; + gint summary_col_subject; + + gint mainview_x; + gint mainview_y; + gint mainview_width; + gint mainview_height; + gint mainwin_x; + gint mainwin_y; + gint mainwin_width; + gint mainwin_height; + + gint msgwin_width; + gint msgwin_height; + + gint compose_width; + gint compose_height; + + /* Message */ + gboolean enable_color; + gint quote_level1_col; + gint quote_level2_col; + gint quote_level3_col; + gint uri_col; + gushort sig_col; + gboolean recycle_quote_colors; + gboolean conv_mb_alnum; + gboolean display_header_pane; + gboolean display_header; + gboolean head_space; + gint line_space; + gboolean enable_smooth_scroll; + gint scroll_step; + gboolean scroll_halfpage; + + gchar *force_charset; + + /* MIME viewer */ + gchar *mime_image_viewer; + gchar *mime_audio_player; + + /* Privacy */ + gboolean default_encrypt; + gboolean default_sign; + gboolean auto_check_signatures; + gboolean passphrase_grab; + gchar *default_signkey; + + /* Interface */ + gboolean sep_folder; + gboolean sep_msg; + gboolean emulate_emacs; + gboolean open_unread_on_enter; + gboolean open_inbox_on_inc; + gboolean immediate_exec; + + gboolean confirm_on_exit; + gboolean clean_on_exit; + gboolean ask_on_clean; + + /* Other */ + gchar *uri_cmd; + gchar *print_cmd; + gchar *ext_editor_cmd; +}; + +extern PrefsCommon prefs_common; + +void prefs_common_read_config (void); +void prefs_common_save_config (void); +void prefs_common_open (void); + +void prefs_summary_display_item_set (void); + +#endif /* __PREFS_COMMON_H__ */ diff --git a/src/prefs_filter.c b/src/prefs_filter.c new file mode 100644 index 000000000..5d0fcfb05 --- /dev/null +++ b/src/prefs_filter.c @@ -0,0 +1,814 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gtk/gtk.h> +#include <gdk/gdkkeysyms.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <errno.h> + +#include "intl.h" +#include "main.h" +#include "prefs.h" +#include "prefs_filter.h" +#include "prefs_common.h" +#include "mainwindow.h" +#include "foldersel.h" +#include "manage_window.h" +#include "filter.h" +#include "utils.h" +#include "gtkutils.h" +#include "alertpanel.h" +#include "folder.h" + +static struct Filter { + GtkWidget *window; + + GtkWidget *close_btn; + + GtkWidget *hdr_combo1; + GtkWidget *hdr_combo2; + GtkWidget *hdr_entry1; + GtkWidget *hdr_entry2; + GtkWidget *key_entry1; + GtkWidget *key_entry2; + GtkWidget *pred_combo1; + GtkWidget *pred_combo2; + GtkWidget *pred_entry1; + GtkWidget *pred_entry2; + GtkWidget *op_combo; + GtkWidget *op_entry; + + GtkWidget *dest_entry; + GtkWidget *regex_chkbtn; + + GtkWidget *destsel_btn; + GtkWidget *dest_radiobtn; + GtkWidget *notrecv_radiobtn; + + GtkWidget *cond_clist; +} filter; + +/* + parameter name, default value, pointer to the prefs variable, data type, + pointer to the widget pointer, + pointer to the function for data setting, + pointer to the function for widget setting + */ + +#define VSPACING 12 +#define VSPACING_NARROW 4 +#define DEFAULT_ENTRY_WIDTH 80 +#define PREFSBUFSIZE 1024 + +/* widget creating functions */ +static void prefs_filter_create (void); + +static void prefs_filter_set_dialog (void); +static void prefs_filter_set_list (void); +static gint prefs_filter_clist_set_row (gint row); + +/* callback functions */ +static void prefs_filter_select_dest_cb (void); +static void prefs_filter_register_cb (void); +static void prefs_filter_substitute_cb (void); +static void prefs_filter_delete_cb (void); +static void prefs_filter_up (void); +static void prefs_filter_down (void); +static void prefs_filter_select (GtkCList *clist, + gint row, + gint column, + GdkEvent *event); + +static void prefs_filter_dest_radio_button_toggled (void); +static void prefs_filter_notrecv_radio_button_toggled (void); + +static void prefs_filter_key_pressed (GtkWidget *widget, + GdkEventKey *event, + gpointer data); +static void prefs_filter_close (GtkButton *button); + +void prefs_filter_open(void) +{ + if (!filter.window) { + prefs_filter_create(); + } + + manage_window_set_transient(GTK_WINDOW(filter.window)); + gtk_widget_grab_focus(filter.close_btn); + + prefs_filter_set_dialog(); + + gtk_widget_show(filter.window); +} + +static void prefs_filter_create(void) +{ + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *close_btn; + GtkWidget *confirm_area; + + GtkWidget *vbox1; + GtkWidget *table1; + GtkWidget *op_label; + GtkWidget *op_combo; + GtkWidget *op_entry; + GtkWidget *hdr_label; + GtkWidget *hdr_combo1; + GtkWidget *hdr_combo2; + GtkWidget *key_label; + GtkWidget *key_entry1; + GtkWidget *key_entry2; + GtkWidget *pred_label; + GtkWidget *pred_combo1; + GtkWidget *pred_entry1; + GtkWidget *pred_combo2; + GtkWidget *pred_entry2; + + GtkWidget *vbox2; + GtkWidget *dest_hbox; + GtkWidget *dest_entry; + GtkWidget *destsel_btn; + GtkWidget *dest_radiobtn; + GtkWidget *notrecv_radiobtn; + GSList *recv_group = NULL; + + GtkWidget *regex_chkbtn; + + GtkWidget *reg_hbox; + GtkWidget *btn_hbox; + GtkWidget *arrow; + GtkWidget *reg_btn; + GtkWidget *subst_btn; + GtkWidget *del_btn; + + GtkWidget *cond_hbox; + GtkWidget *cond_scrolledwin; + GtkWidget *cond_clist; + + GtkWidget *btn_vbox; + GtkWidget *up_btn; + GtkWidget *down_btn; + + gchar *title[] = {_("Registered rules")}; + + debug_print(_("Creating filter setting window...\n")); + + window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_container_set_border_width (GTK_CONTAINER (window), 8); + gtk_window_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER); + gtk_window_set_modal (GTK_WINDOW (window), TRUE); + gtk_window_set_policy (GTK_WINDOW (window), FALSE, TRUE, FALSE); + + vbox = gtk_vbox_new (FALSE, 6); + gtk_widget_show (vbox); + gtk_container_add (GTK_CONTAINER (window), vbox); + + gtkut_button_set_create (&confirm_area, &close_btn, _("Close"), + NULL, NULL, NULL, NULL); + gtk_widget_show (confirm_area); + gtk_box_pack_end (GTK_BOX(vbox), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default (close_btn); + + gtk_window_set_title (GTK_WINDOW(window), + _("Filter setting")); + gtk_signal_connect (GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); + gtk_signal_connect (GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(prefs_filter_key_pressed), NULL); + gtk_signal_connect (GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect (GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + gtk_signal_connect (GTK_OBJECT(close_btn), "clicked", + GTK_SIGNAL_FUNC(prefs_filter_close), NULL); + + vbox1 = gtk_vbox_new (FALSE, VSPACING); + gtk_widget_show (vbox1); + gtk_box_pack_start (GTK_BOX (vbox), vbox1, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (vbox1), 2); + + table1 = gtk_table_new (3, 4, FALSE); + gtk_widget_show (table1); + gtk_box_pack_start (GTK_BOX (vbox1), table1, FALSE, FALSE, 0); + gtk_table_set_row_spacings (GTK_TABLE (table1), 8); + gtk_table_set_col_spacings (GTK_TABLE (table1), 8); + + op_label = gtk_label_new (_("Operator")); + gtk_widget_show (op_label); + gtk_table_attach (GTK_TABLE (table1), op_label, 0, 1, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (op_label), 0, 0.5); + + op_combo = gtk_combo_new (); + gtk_widget_show (op_combo); + gtk_table_attach (GTK_TABLE (table1), op_combo, 0, 1, 2, 3, + 0, 0, 0, 0); + gtk_widget_set_usize (op_combo, 52, -1); + gtkut_combo_set_items (GTK_COMBO (op_combo), "and", "or", NULL); + + op_entry = GTK_COMBO (op_combo)->entry; + gtk_entry_set_editable (GTK_ENTRY (op_entry), FALSE); + + hdr_label = gtk_label_new (_("Header")); + gtk_widget_show (hdr_label); + gtk_table_attach (GTK_TABLE (table1), hdr_label, 1, 2, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (hdr_label), 0, 0.5); + + hdr_combo1 = gtk_combo_new (); + gtk_widget_show (hdr_combo1); + gtk_table_attach (GTK_TABLE (table1), hdr_combo1, 1, 2, 1, 2, + 0, 0, 0, 0); + gtk_widget_set_usize (hdr_combo1, 96, -1); + gtkut_combo_set_items (GTK_COMBO (hdr_combo1), + "Subject", "From", "To", "Cc", "Reply-To", + "Sender", "X-ML-Name", "X-List", "X-Sequence", + "X-Mailer", + NULL); + + hdr_combo2 = gtk_combo_new (); + gtk_widget_show (hdr_combo2); + gtk_table_attach (GTK_TABLE (table1), hdr_combo2, 1, 2, 2, 3, + 0, 0, 0, 0); + gtk_widget_set_usize (hdr_combo2, 96, -1); + gtkut_combo_set_items (GTK_COMBO (hdr_combo2), _("(none)"), + "Subject", "From", "To", "Cc", "Reply-To", + "Sender", "X-ML-Name", "X-List", "X-Sequence", + "X-Mailer", + NULL); + + key_label = gtk_label_new (_("Keyword")); + gtk_widget_show (key_label); + gtk_table_attach (GTK_TABLE (table1), key_label, 2, 3, 0, 1, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (key_label), 0, 0.5); + + key_entry1 = gtk_entry_new (); + gtk_widget_show (key_entry1); + gtk_widget_set_usize (key_entry1, 128, -1); + gtk_table_attach (GTK_TABLE (table1), key_entry1, 2, 3, 1, 2, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + 0, 0, 0); + + key_entry2 = gtk_entry_new (); + gtk_widget_show (key_entry2); + gtk_widget_set_usize (key_entry2, 128, -1); + gtk_table_attach (GTK_TABLE (table1), key_entry2, 2, 3, 2, 3, + GTK_EXPAND | GTK_SHRINK | GTK_FILL, + 0, 0, 0); + + pred_label = gtk_label_new (_("Predicate")); + gtk_widget_show (pred_label); + gtk_table_attach (GTK_TABLE (table1), pred_label, 3, 4, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_misc_set_alignment (GTK_MISC (pred_label), 0, 0.5); + + pred_combo1 = gtk_combo_new (); + gtk_widget_show (pred_combo1); + gtk_table_attach (GTK_TABLE (table1), pred_combo1, 3, 4, 1, 2, + 0, 0, 0, 0); + gtk_widget_set_usize (pred_combo1, 92, -1); + gtkut_combo_set_items (GTK_COMBO (pred_combo1), + _("contains"), _("not contain"), NULL); + + pred_entry1 = GTK_COMBO (pred_combo1)->entry; + gtk_entry_set_editable (GTK_ENTRY (pred_entry1), FALSE); + + pred_combo2 = gtk_combo_new (); + gtk_widget_show (pred_combo2); + gtk_table_attach (GTK_TABLE (table1), pred_combo2, 3, 4, 2, 3, + 0, 0, 0, 0); + gtk_widget_set_usize (pred_combo2, 92, -1); + gtkut_combo_set_items (GTK_COMBO (pred_combo2), + _("contains"), _("not contain"), NULL); + + pred_entry2 = GTK_COMBO (pred_combo2)->entry; + gtk_entry_set_editable (GTK_ENTRY (pred_entry2), FALSE); + + /* destination */ + + vbox2 = gtk_vbox_new (FALSE, VSPACING_NARROW); + gtk_widget_show (vbox2); + gtk_box_pack_start (GTK_BOX (vbox1), vbox2, FALSE, TRUE, 0); + + dest_hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (dest_hbox); + gtk_box_pack_start (GTK_BOX (vbox2), dest_hbox, FALSE, TRUE, 0); + + dest_radiobtn = + gtk_radio_button_new_with_label (recv_group, _("Destination")); + recv_group = gtk_radio_button_group (GTK_RADIO_BUTTON (dest_radiobtn)); + gtk_widget_show (dest_radiobtn); + gtk_box_pack_start (GTK_BOX (dest_hbox), dest_radiobtn, + FALSE, FALSE, 0); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dest_radiobtn), TRUE); + gtk_signal_connect + (GTK_OBJECT (dest_radiobtn), "toggled", + GTK_SIGNAL_FUNC (prefs_filter_dest_radio_button_toggled), + NULL); + + dest_entry = gtk_entry_new (); + gtk_widget_show (dest_entry); + gtk_widget_set_usize (dest_entry, DEFAULT_ENTRY_WIDTH, -1); + gtk_box_pack_start (GTK_BOX (dest_hbox), dest_entry, TRUE, TRUE, 0); + gtk_entry_set_editable (GTK_ENTRY (dest_entry), FALSE); + + destsel_btn = gtk_button_new_with_label (_(" Select... ")); + gtk_widget_show (destsel_btn); + gtk_box_pack_start (GTK_BOX (dest_hbox), destsel_btn, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (destsel_btn), "clicked", + GTK_SIGNAL_FUNC (prefs_filter_select_dest_cb), + NULL); + + PACK_CHECK_BUTTON (dest_hbox, regex_chkbtn, _("Use regex")); + gtk_widget_set_sensitive(regex_chkbtn, FALSE); + + notrecv_radiobtn = gtk_radio_button_new_with_label + (recv_group, _("Don't receive")); + recv_group = gtk_radio_button_group + (GTK_RADIO_BUTTON (notrecv_radiobtn)); + gtk_widget_show (notrecv_radiobtn); + gtk_box_pack_start (GTK_BOX (vbox2), notrecv_radiobtn, FALSE, FALSE, 0); + gtk_signal_connect + (GTK_OBJECT (notrecv_radiobtn), "toggled", + GTK_SIGNAL_FUNC (prefs_filter_notrecv_radio_button_toggled), + NULL); + + /* register / substitute / delete */ + + reg_hbox = gtk_hbox_new (FALSE, 4); + gtk_widget_show (reg_hbox); + gtk_box_pack_start (GTK_BOX (vbox1), reg_hbox, FALSE, FALSE, 0); + + arrow = gtk_arrow_new (GTK_ARROW_DOWN, GTK_SHADOW_OUT); + gtk_widget_show (arrow); + gtk_box_pack_start (GTK_BOX (reg_hbox), arrow, FALSE, FALSE, 0); + gtk_widget_set_usize (arrow, -1, 16); + + btn_hbox = gtk_hbox_new (TRUE, 4); + gtk_widget_show (btn_hbox); + gtk_box_pack_start (GTK_BOX (reg_hbox), btn_hbox, FALSE, FALSE, 0); + + reg_btn = gtk_button_new_with_label (_("Register")); + gtk_widget_show (reg_btn); + gtk_box_pack_start (GTK_BOX (btn_hbox), reg_btn, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (reg_btn), "clicked", + GTK_SIGNAL_FUNC (prefs_filter_register_cb), NULL); + + subst_btn = gtk_button_new_with_label (_(" Substitute ")); + gtk_widget_show (subst_btn); + gtk_box_pack_start (GTK_BOX (btn_hbox), subst_btn, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (subst_btn), "clicked", + GTK_SIGNAL_FUNC (prefs_filter_substitute_cb), + NULL); + + del_btn = gtk_button_new_with_label (_("Delete")); + gtk_widget_show (del_btn); + gtk_box_pack_start (GTK_BOX (btn_hbox), del_btn, FALSE, TRUE, 0); + gtk_signal_connect (GTK_OBJECT (del_btn), "clicked", + GTK_SIGNAL_FUNC (prefs_filter_delete_cb), NULL); + + cond_hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (cond_hbox); + gtk_box_pack_start (GTK_BOX (vbox1), cond_hbox, TRUE, TRUE, 0); + + cond_scrolledwin = gtk_scrolled_window_new (NULL, NULL); + gtk_widget_show (cond_scrolledwin); + gtk_widget_set_usize (cond_scrolledwin, -1, 150); + gtk_box_pack_start (GTK_BOX (cond_hbox), cond_scrolledwin, + TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (cond_scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + cond_clist = gtk_clist_new_with_titles(1, title); + gtk_widget_show (cond_clist); + gtk_container_add (GTK_CONTAINER (cond_scrolledwin), cond_clist); + gtk_clist_set_column_width (GTK_CLIST (cond_clist), 0, 80); + gtk_clist_set_selection_mode (GTK_CLIST (cond_clist), + GTK_SELECTION_BROWSE); + GTK_WIDGET_UNSET_FLAGS (GTK_CLIST (cond_clist)->column[0].button, + GTK_CAN_FOCUS); + gtk_signal_connect (GTK_OBJECT (cond_clist), "select_row", + GTK_SIGNAL_FUNC (prefs_filter_select), NULL); + + btn_vbox = gtk_vbox_new (FALSE, 8); + gtk_widget_show (btn_vbox); + gtk_box_pack_start (GTK_BOX (cond_hbox), btn_vbox, FALSE, FALSE, 0); + + up_btn = gtk_button_new_with_label (_("Up")); + gtk_widget_show (up_btn); + gtk_box_pack_start (GTK_BOX (btn_vbox), up_btn, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (up_btn), "clicked", + GTK_SIGNAL_FUNC (prefs_filter_up), NULL); + + down_btn = gtk_button_new_with_label (_("Down")); + gtk_widget_show (down_btn); + gtk_box_pack_start (GTK_BOX (btn_vbox), down_btn, FALSE, FALSE, 0); + gtk_signal_connect (GTK_OBJECT (down_btn), "clicked", + GTK_SIGNAL_FUNC (prefs_filter_down), NULL); + + gtk_widget_show_all(window); + + filter.window = window; + filter.close_btn = close_btn; + + filter.hdr_combo1 = hdr_combo1; + filter.hdr_combo2 = hdr_combo2; + filter.hdr_entry1 = GTK_COMBO (hdr_combo1)->entry; + filter.hdr_entry2 = GTK_COMBO (hdr_combo2)->entry; + filter.key_entry1 = key_entry1; + filter.key_entry2 = key_entry2; + filter.pred_combo1 = pred_combo1; + filter.pred_combo2 = pred_combo2; + filter.pred_entry1 = pred_entry1; + filter.pred_entry2 = pred_entry2; + filter.op_combo = op_combo; + filter.op_entry = op_entry; + + filter.dest_entry = dest_entry; + filter.destsel_btn = destsel_btn; + filter.dest_radiobtn = dest_radiobtn; + filter.notrecv_radiobtn = notrecv_radiobtn; + filter.regex_chkbtn = regex_chkbtn; + + filter.cond_clist = cond_clist; +} + +void prefs_filter_read_config(void) +{ + gchar *rcpath; + FILE *fp; + gchar buf[PREFSBUFSIZE]; + Filter *flt; + + debug_print(_("Reading filter configuration...\n")); + + rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_RC, NULL); + if ((fp = fopen(rcpath, "r")) == NULL) { + if (ENOENT != errno) FILE_OP_ERROR(rcpath, "fopen"); + g_free(rcpath); + return; + } + g_free(rcpath); + + /* remove all previous filter list */ + while (prefs_common.fltlist != NULL) { + flt = (Filter *)prefs_common.fltlist->data; + filter_free(flt); + prefs_common.fltlist = g_slist_remove(prefs_common.fltlist, + flt); + } + + while (fgets(buf, sizeof(buf), fp) != NULL) { + g_strchomp(buf); + flt = filter_read_str(buf); + if (flt) { + prefs_common.fltlist = + g_slist_append(prefs_common.fltlist, flt); + } + } + + fclose(fp); +} + +void prefs_filter_write_config(void) +{ + gchar *rcpath; + PrefFile *pfile; + GSList *cur; + + debug_print(_("Writing filter configuration...\n")); + + rcpath = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, FILTER_RC, NULL); + if ((pfile = prefs_write_open(rcpath)) == NULL) { + g_warning(_("failed to write configuration to file\n")); + g_free(rcpath); + return; + } + + for (cur = prefs_common.fltlist; cur != NULL; cur = cur->next) { + Filter *flt = (Filter *)cur->data; + gchar *fstr; + + fstr = filter_get_str(flt); + if (fputs(fstr, pfile->fp) == EOF || + fputc('\n', pfile->fp) == EOF) { + FILE_OP_ERROR(rcpath, "fputs || fputc"); + prefs_write_close_revert(pfile); + g_free(rcpath); + g_free(fstr); + return; + } + g_free(fstr); + } + + g_free(rcpath); + + if (prefs_write_close(pfile) < 0) { + g_warning(_("failed to write configuration to file\n")); + return; + } +} + +static void prefs_filter_set_dialog(void) +{ + GtkCList *clist = GTK_CLIST(filter.cond_clist); + GSList *cur; + gchar *cond_str[1]; + gint row; + + gtk_clist_freeze(clist); + gtk_clist_clear(clist); + + cond_str[0] = _("(New)"); + row = gtk_clist_append(clist, cond_str); + gtk_clist_set_row_data(clist, row, NULL); + + for (cur = prefs_common.fltlist; cur != NULL; cur = cur->next) { + Filter *flt = (Filter *)cur->data; + + cond_str[0] = filter_get_str(flt); + subst_char(cond_str[0], '\t', ':'); + row = gtk_clist_append(clist, cond_str); + gtk_clist_set_row_data(clist, row, flt); + + g_free(cond_str[0]); + } + + gtk_clist_thaw(clist); +} + +static void prefs_filter_set_list(void) +{ + gint row = 1; + Filter *flt; + + g_slist_free(prefs_common.fltlist); + prefs_common.fltlist = NULL; + + while ((flt = gtk_clist_get_row_data(GTK_CLIST(filter.cond_clist), + row)) != NULL) { + prefs_common.fltlist = g_slist_append(prefs_common.fltlist, + flt); + row++; + } +} + +#define GET_ENTRY(entry) \ + entry_text = gtk_entry_get_text(GTK_ENTRY(entry)) + +static gint prefs_filter_clist_set_row(gint row) +{ + GtkCList *clist = GTK_CLIST(filter.cond_clist); + Filter *flt; + gchar *entry_text; + gchar *cond_str[1]; + + g_return_val_if_fail(row != 0, -1); + + if (GTK_WIDGET_IS_SENSITIVE(filter.dest_entry)) + GET_ENTRY(filter.dest_entry); + else + entry_text = FILTER_NOT_RECEIVE; + if (entry_text[0] == '\0') { + alertpanel_error(_("Destination is not set.")); + return -1; + } + GET_ENTRY(filter.hdr_entry1); + if (entry_text[0] == '\0') { + alertpanel_error(_("Header name is not set.")); + return -1; + } + + flt = g_new0(Filter, 1); + + flt->name1 = g_strdup(entry_text); + + GET_ENTRY(filter.key_entry1); + if (entry_text[0] != '\0') + flt->body1 = g_strdup(entry_text); + + GET_ENTRY(filter.hdr_entry2); + if (entry_text[0] != '\0' && strcmp(entry_text, _("(none)")) != 0) { + flt->name2 = g_strdup(entry_text); + + GET_ENTRY(filter.key_entry2); + if (entry_text[0] != '\0') + flt->body2 = g_strdup(entry_text); + } + + GET_ENTRY(filter.pred_entry1); + if (!strcmp(entry_text, _("contains"))) + flt->flag1 = FLT_CONTAIN; + GET_ENTRY(filter.pred_entry2); + if (!strcmp(entry_text, _("contains"))) + flt->flag2 = FLT_CONTAIN; + + GET_ENTRY(filter.op_entry); + if (!strcmp(entry_text, "and")) + flt->cond = FLT_AND; + else + flt->cond = FLT_OR; + + if (GTK_WIDGET_IS_SENSITIVE(filter.dest_entry)) { + entry_text = gtk_entry_get_text(GTK_ENTRY(filter.dest_entry)); + flt->dest = g_strdup(entry_text); + flt->action = FLT_MOVE; + } else + flt->action = FLT_NOTRECV; + + cond_str[0] = filter_get_str(flt); + subst_char(cond_str[0], '\t', ':'); + + if (row < 0) + row = gtk_clist_append(clist, cond_str); + else { + Filter *tmpflt; + + gtk_clist_set_text(clist, row, 0, cond_str[0]); + tmpflt = gtk_clist_get_row_data(clist, row); + if (tmpflt) + filter_free(tmpflt); + } + + gtk_clist_set_row_data(clist, row, flt); + + g_free(cond_str[0]); + + prefs_filter_set_list(); + + return row; +} + +static void prefs_filter_select_dest_cb(void) +{ + FolderItem *dest; + + dest = foldersel_folder_sel(NULL); + if (!dest) return; + + gtk_entry_set_text(GTK_ENTRY(filter.dest_entry), dest->path); +} + +static void prefs_filter_register_cb(void) +{ + prefs_filter_clist_set_row(-1); +} + +static void prefs_filter_substitute_cb(void) +{ + GtkCList *clist = GTK_CLIST(filter.cond_clist); + Filter *flt; + gint row; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + if (row == 0) return; + + flt = gtk_clist_get_row_data(clist, row); + if (!flt) return; + + prefs_filter_clist_set_row(row); +} + +static void prefs_filter_delete_cb(void) +{ + GtkCList *clist = GTK_CLIST(filter.cond_clist); + Filter *flt; + gint row; + + if (!clist->selection) return; + row = GPOINTER_TO_INT(clist->selection->data); + if (row == 0) return; + + if (alertpanel(_("Delete rule"), + _("Do you really want to delete this rule?"), + _("Yes"), _("No"), NULL) == G_ALERTALTERNATE) + return; + + flt = gtk_clist_get_row_data(clist, row); + filter_free(flt); + gtk_clist_remove(clist, row); + prefs_common.fltlist = g_slist_remove(prefs_common.fltlist, flt); +} + +static void prefs_filter_up(void) +{ + GtkCList *clist = GTK_CLIST(filter.cond_clist); + gint row; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + if (row > 1) { + gtk_clist_row_move(clist, row, row - 1); + prefs_filter_set_list(); + } +} + +static void prefs_filter_down(void) +{ + GtkCList *clist = GTK_CLIST(filter.cond_clist); + gint row; + + if (!clist->selection) return; + + row = GPOINTER_TO_INT(clist->selection->data); + if (row > 0 && row < clist->rows - 1) { + gtk_clist_row_move(clist, row, row + 1); + prefs_filter_set_list(); + } +} + +#define ENTRY_SET_TEXT(entry, str) \ + gtk_entry_set_text(GTK_ENTRY(entry), str ? str : "") + +static void prefs_filter_select(GtkCList *clist, gint row, gint column, + GdkEvent *event) +{ + Filter *flt; + Filter default_flt = {"Subject", NULL, _("(none)"), NULL, + FLT_CONTAIN, FLT_CONTAIN, FLT_AND, + NULL, FLT_MOVE}; + + flt = gtk_clist_get_row_data(clist, row); + if (!flt) + flt = &default_flt; + + ENTRY_SET_TEXT(filter.dest_entry, flt->dest); + ENTRY_SET_TEXT(filter.hdr_entry1, flt->name1); + ENTRY_SET_TEXT(filter.key_entry1, flt->body1); + ENTRY_SET_TEXT(filter.hdr_entry2, + flt->name2 ? flt->name2 : _("(none)")); + ENTRY_SET_TEXT(filter.key_entry2, flt->body2); + + ENTRY_SET_TEXT(filter.pred_entry1, + FLT_IS_CONTAIN(flt->flag1) + ? _("contains") : _("not contain")); + ENTRY_SET_TEXT(filter.pred_entry2, + FLT_IS_CONTAIN(flt->flag2) + ? _("contains") : _("not contain")); + + gtk_entry_set_text(GTK_ENTRY(filter.op_entry), + flt->cond == FLT_OR ? "or" : "and"); + if (flt->action == FLT_NOTRECV) + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON(filter.notrecv_radiobtn), TRUE); + else + gtk_toggle_button_set_active + (GTK_TOGGLE_BUTTON(filter.dest_radiobtn), TRUE); +} + +static void prefs_filter_dest_radio_button_toggled(void) +{ + gtk_widget_set_sensitive(filter.dest_entry, TRUE); + gtk_widget_set_sensitive(filter.destsel_btn, TRUE); +} + +static void prefs_filter_notrecv_radio_button_toggled(void) +{ + gtk_widget_set_sensitive(filter.dest_entry, FALSE); + gtk_widget_set_sensitive(filter.destsel_btn, FALSE); +} + +static void prefs_filter_key_pressed(GtkWidget *widget, GdkEventKey *event, + gpointer data) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(filter.window); +} + +static void prefs_filter_close(GtkButton *button) +{ + prefs_filter_write_config(); + gtk_widget_hide(filter.window); +} diff --git a/src/prefs_filter.h b/src/prefs_filter.h new file mode 100644 index 000000000..4ca1d6f10 --- /dev/null +++ b/src/prefs_filter.h @@ -0,0 +1,27 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifndef __PREFS_FILTER_H__ +#define __PREFS_FILTER_H__ + +void prefs_filter_read_config (void); +void prefs_filter_write_config (void); +void prefs_filter_open (void); + +#endif /* __PREFS_FILTER_H__ */ diff --git a/src/procheader.c b/src/procheader.c new file mode 100644 index 000000000..79b840187 --- /dev/null +++ b/src/procheader.c @@ -0,0 +1,546 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <time.h> + +#include "intl.h" +#include "procheader.h" +#include "procmsg.h" +#include "codeconv.h" +#include "utils.h" + +#define BUFFSIZE 8192 + +gint procheader_get_one_field(gchar *buf, gint len, FILE *fp, + HeaderEntry hentry[]) +{ + gint nexthead; + gint hnum = 0; + HeaderEntry *hp = NULL; + + if (hentry != NULL) { + /* skip non-required headers */ + do { + do { + if (fgets(buf, len, fp) == NULL) + return -1; + if (buf[0] == '\r' || buf[0] == '\n') + return -1; + } while (buf[0] == ' ' || buf[0] == '\t'); + + for (hp = hentry, hnum = 0; hp->name != NULL; + hp++, hnum++) { + if (!strncasecmp(hp->name, buf, + strlen(hp->name))) + break; + } + } while (hp->name == NULL); + } else { + if (fgets(buf, len, fp) == NULL) return -1; + if (buf[0] == '\r' || buf[0] == '\n') return -1; + } + + /* unfold the specified folded line */ + if (hp && hp->unfold) { + gboolean folded = FALSE; + gchar *bufp = buf + strlen(buf); + + while (1) { + nexthead = fgetc(fp); + + /* folded */ + if (nexthead == ' ' || nexthead == '\t') + folded = TRUE; + else if (nexthead == EOF) + break; + else if (folded == TRUE) { + /* concatenate next line */ + if ((len - (bufp - buf)) <= 2) break; + + /* replace return code on the tail end + with space */ + *(bufp - 1) = ' '; + *bufp++ = nexthead; + *bufp = '\0'; + if (nexthead == '\r' || nexthead == '\n') { + folded = FALSE; + continue; + } + if (fgets(bufp, len - (bufp - buf), fp) + == NULL) break; + bufp += strlen(bufp); + + folded = FALSE; + } else { + ungetc(nexthead, fp); + break; + } + } + + /* remove trailing return code */ + strretchomp(buf); + + return hnum; + } + + while (1) { + nexthead = fgetc(fp); + if (nexthead == ' ' || nexthead == '\t') { + size_t buflen = strlen(buf); + + /* concatenate next line */ + if ((len - buflen) > 2) { + gchar *p = buf + buflen; + + *p++ = nexthead; + *p = '\0'; + buflen++; + if (fgets(p, len - buflen, fp) == NULL) + break; + } else + break; + } else { + if (nexthead != EOF) + ungetc(nexthead, fp); + break; + } + } + + /* remove trailing return code */ + strretchomp(buf); + + return hnum; +} + +gchar *procheader_get_unfolded_line(gchar *buf, gint len, FILE *fp) +{ + gboolean folded = FALSE; + gint nexthead; + gchar *bufp; + + if (fgets(buf, len, fp) == NULL) return NULL; + if (buf[0] == '\r' || buf[0] == '\n') return NULL; + bufp = buf + strlen(buf); + + while (1) { + nexthead = fgetc(fp); + + /* folded */ + if (nexthead == ' ' || nexthead == '\t') + folded = TRUE; + else if (nexthead == EOF) + break; + else if (folded == TRUE) { + /* concatenate next line */ + if ((len - (bufp - buf)) <= 2) break; + + /* replace return code on the tail end + with space */ + *(bufp - 1) = ' '; + *bufp++ = nexthead; + *bufp = '\0'; + if (nexthead == '\r' || nexthead == '\n') { + folded = FALSE; + continue; + } + if (fgets(bufp, len - (bufp - buf), fp) + == NULL) break; + bufp += strlen(bufp); + + folded = FALSE; + } else { + ungetc(nexthead, fp); + break; + } + } + + /* remove trailing return code */ + strretchomp(buf); + + return buf; +} + +GSList *procheader_get_header_list(const gchar *file) +{ + FILE *fp; + gchar buf[BUFFSIZE], tmp[BUFFSIZE]; + gchar *p; + GSList *hlist = NULL; + Header *header; + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return NULL; + } + + while (procheader_get_unfolded_line(buf, sizeof(buf), fp) != NULL) { + if (*buf == ':') continue; + for (p = buf; *p && *p != ' '; p++) { + if (*p == ':') { + header = g_new(Header, 1); + header->name = g_strndup(buf, p - buf); + p++; + while (*p == ' ' || *p == '\t') p++; + conv_unmime_header(tmp, sizeof(tmp), p, NULL); + header->body = g_strdup(tmp); + + hlist = g_slist_append(hlist, header); + break; + } + } + } + + fclose(fp); + return hlist; +} + +void procheader_header_list_destroy(GSList *hlist) +{ + Header *header; + + while (hlist != NULL) { + header = hlist->data; + + g_free(header->name); + g_free(header->body); + g_free(header); + hlist = g_slist_remove(hlist, header); + } +} + +void procheader_get_header_fields(FILE *fp, HeaderEntry hentry[]) +{ + gchar buf[BUFFSIZE]; + HeaderEntry *hp; + gint hnum; + gchar *p; + + if (hentry == NULL) return; + + while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry)) + != -1) { + hp = hentry + hnum; + + p = buf + strlen(hp->name); + while (*p == ' ' || *p == '\t') p++; + + if (hp->body == NULL) + hp->body = g_strdup(p); + else if (!strcasecmp(hp->name, "To:") || + !strcasecmp(hp->name, "Cc:")) { + gchar *tp = hp->body; + hp->body = g_strconcat(tp, ", ", p, NULL); + g_free(tp); + } + } +} + +enum +{ + H_DATE = 0, + H_FROM = 1, + H_TO = 2, + H_NEWSGROUPS = 3, + H_SUBJECT = 4, + H_MSG_ID = 5, + H_REFERENCES = 6, + H_IN_REPLY_TO = 7, + H_CONTENT_TYPE = 8, + H_SEEN = 9, + H_X_FACE = 10, +}; + +MsgInfo *procheader_parse(const gchar *file, MsgFlags flags, gboolean full) +{ + static HeaderEntry hentry_full[] = {{"Date:", NULL, FALSE}, + {"From:", NULL, TRUE}, + {"To:", NULL, TRUE}, + {"Newsgroups:", NULL, TRUE}, + {"Subject:", NULL, TRUE}, + {"Message-Id:", NULL, FALSE}, + {"References:", NULL, FALSE}, + {"In-Reply-To:", NULL, FALSE}, + {"Content-Type:", NULL, FALSE}, + {"Seen:", NULL, FALSE}, + {"X-Face:", NULL, FALSE}, + {NULL, NULL, FALSE}}; + + static HeaderEntry hentry_short[] = {{"Date:", NULL, FALSE}, + {"From:", NULL, TRUE}, + {"To:", NULL, TRUE}, + {"Newsgroups:", NULL, TRUE}, + {"Subject:", NULL, TRUE}, + {"Message-Id:", NULL, FALSE}, + {"References:", NULL, FALSE}, + {"In-Reply-To:", NULL, FALSE}, + {"Content-Type:", NULL, FALSE}, + {"Seen:", NULL, FALSE}, + {NULL, NULL, FALSE}}; + + FILE *fp; + MsgInfo *msginfo; + gchar buf[BUFFSIZE], tmp[BUFFSIZE]; + gchar *reference = NULL; + gchar *p; + gchar *hp; + HeaderEntry *hentry; + gint hnum; + + hentry = full ? hentry_full : hentry_short; + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return NULL; + } + if (MSG_IS_QUEUED(flags)) { + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + } + + msginfo = g_new0(MsgInfo, 1); + msginfo->flags = flags != 0 ? flags : MSG_NEW|MSG_UNREAD; + msginfo->inreplyto = NULL; + + while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry)) + != -1) { + hp = buf + strlen(hentry[hnum].name); + while (*hp == ' ' || *hp == '\t') hp++; + + switch (hnum) { + case H_DATE: + if (msginfo->date) break; + msginfo->date_t = + procheader_date_parse(NULL, hp, 0); + msginfo->date = g_strdup(hp); + break; + case H_FROM: + if (msginfo->from) break; + conv_unmime_header(tmp, sizeof(tmp), hp, NULL); + msginfo->from = g_strdup(tmp); + msginfo->fromname = procheader_get_fromname(tmp); + break; + case H_TO: + conv_unmime_header(tmp, sizeof(tmp), hp, NULL); + if (msginfo->to) { + p = msginfo->to; + msginfo->to = + g_strconcat(p, ", ", tmp, NULL); + g_free(p); + } else + msginfo->to = g_strdup(tmp); + break; + case H_NEWSGROUPS: + if (msginfo->newsgroups) { + p = msginfo->newsgroups; + msginfo->newsgroups = + g_strconcat(p, ",", hp, NULL); + g_free(p); + } else + msginfo->newsgroups = g_strdup(buf + 12); + break; + case H_SUBJECT: + if (msginfo->subject) break; + conv_unmime_header(tmp, sizeof(tmp), hp, NULL); + msginfo->subject = g_strdup(tmp); + break; + case H_MSG_ID: + if (msginfo->msgid) break; + + extract_parenthesis(hp, '<', '>'); + remove_space(hp); + msginfo->msgid = g_strdup(hp); + break; + case H_REFERENCES: + if (!reference) { + eliminate_parenthesis(hp, '(', ')'); + if ((p = strrchr(hp, '<')) != NULL && + strchr(p + 1, '>') != NULL) { + extract_parenthesis(p, '<', '>'); + remove_space(p); + if (*p != '\0') + reference = g_strdup(p); + } + } + break; + case H_IN_REPLY_TO: + if (!reference) { + eliminate_parenthesis(hp, '(', ')'); + extract_parenthesis(hp, '<', '>'); + remove_space(hp); + if (*hp != '\0') + reference = g_strdup(hp); + } + break; + case H_CONTENT_TYPE: + if (!strncasecmp(hp, "multipart", 9)) + msginfo->flags |= MSG_MIME; + break; + case H_SEEN: + /* mnews Seen header */ + MSG_UNSET_FLAGS(msginfo->flags, MSG_NEW|MSG_UNREAD); + break; + case H_X_FACE: + if (msginfo->xface) break; + msginfo->xface = g_strdup(hp); + break; + default: + } + } + msginfo->inreplyto = reference; + + fclose(fp); + + return msginfo; +} + +gchar *procheader_get_fromname(const gchar *str) +{ + gchar *tmp, *name; + + Xalloca(tmp, strlen(str) + 1, return NULL); + strcpy(tmp, str); + + if (*tmp == '\"') { + extract_quote(tmp, '\"'); + g_strstrip(tmp); + } else if (strchr(tmp, '<')) { + eliminate_parenthesis(tmp, '<', '>'); + g_strstrip(tmp); + if (*tmp == '\0') { + strcpy(tmp, str); + extract_parenthesis(tmp, '<', '>'); + g_strstrip(tmp); + } + } else if (strchr(tmp, '(')) { + extract_parenthesis(tmp, '(', ')'); + g_strstrip(tmp); + } + + if (*tmp == '\0') + name = g_strdup(str); + else + name = g_strdup(tmp); + + return name; +} + +time_t procheader_date_parse(gchar *dest, const gchar *src, gint len) +{ + static gchar monthstr[] = "JanFebMarAprMayJunJulAugSepOctNovDec"; + gchar weekday[4]; + gint day; + gchar month[4]; + gint year; + gint hh, mm, ss; + gchar zone[6]; + gint result; + GDateMonth dmonth; + struct tm t; + gchar *p; + time_t timer; + + /* parsing date field... */ + result = sscanf(src, "%3s, %d %3s %d %2d:%2d:%2d %5s", + weekday, &day, month, &year, &hh, &mm, &ss, zone); + if (result != 8) { + result = sscanf(src, "%d %3s %d %2d:%2d:%2d %5s", + &day, month, &year, &hh, &mm, &ss, zone); + if (result != 7) { + ss = 0; + result = sscanf(src, "%3s, %d %3s %d %2d:%2d %5s", + weekday, &day, month, &year, &hh, &mm, zone); + if (result != 7) { + result = sscanf(src, "%d %3s %d %2d:%2d %5s", + &day, month, &year, &hh, &mm, + zone); + if (result != 6) { + g_warning("Invalid date: %s\n", src); + if (dest && len > 0) + strncpy2(dest, src, len); + return 0; + } + } + } + } + + /* Y2K compliant :) */ + if (year < 100) { + if (year < 70) + year += 2000; + else + year += 1900; + } + + if ((p = strstr(monthstr, month)) != NULL) + dmonth = (gint)(p - monthstr) / 3 + 1; + else { + g_warning("Invalid month: %s\n", month); + dmonth = G_DATE_BAD_MONTH; + } + + t.tm_sec = ss; + t.tm_min = mm; + t.tm_hour = hh; + t.tm_mday = day; + t.tm_mon = dmonth - 1; + t.tm_year = year - 1900; + t.tm_wday = 0; + t.tm_yday = 0; + t.tm_isdst = -1; + + timer = mktime(&t); + timer += tzoffset_sec(&timer) - remote_tzoffset_sec(zone); + + if (dest) + procheader_date_get_localtime(dest, len, timer); + + return timer; +} + +void procheader_date_get_localtime(gchar *dest, gint len, const time_t timer) +{ + static gchar *wdaystr = N_("SunMonTueWedThuFriSat"); + static gchar *tr_wday = NULL; + struct tm *lt; + gint wdlen; + gchar *wday; + + if (!tr_wday) + tr_wday = g_strdup(gettext(wdaystr)); + + lt = localtime(&timer); + + wdlen = strlen(tr_wday) / 7; + if ((wday = alloca(wdlen + 1))) { + strncpy(wday, tr_wday + lt->tm_wday * wdlen, wdlen); + wday[wdlen] = '\0'; + } + + g_snprintf(dest, len, "%02d/%d/%d(%s) %02d:%02d", + lt->tm_year % 100, lt->tm_mon + 1, lt->tm_mday, + wday, lt->tm_hour, lt->tm_min); +} diff --git a/src/procheader.h b/src/procheader.h new file mode 100644 index 000000000..49f17e719 --- /dev/null +++ b/src/procheader.h @@ -0,0 +1,70 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PROCHEADER_H__ +#define __PROCHEADER_H__ + +#include <glib.h> +#include <stdio.h> +#include <time.h> + +#include "procmsg.h" + +typedef struct _HeaderEntry HeaderEntry; +typedef struct _Header Header; + +struct _HeaderEntry +{ + gchar *name; + gchar *body; + gboolean unfold; +}; + +struct _Header +{ + gchar *name; + gchar *body; +}; + +gint procheader_get_one_field (gchar *buf, + gint len, + FILE *fp, + HeaderEntry hentry[]); +gchar *procheader_get_unfolded_line (gchar *buf, + gint len, + FILE *fp); + +GSList *procheader_get_header_list (const gchar *file); +void procheader_header_list_destroy (GSList *hlist); +void procheader_get_header_fields (FILE *fp, + HeaderEntry hentry[]); +MsgInfo *procheader_parse (const gchar *file, + MsgFlags flags, + gboolean full); + +gchar *procheader_get_fromname (const gchar *str); + +time_t procheader_date_parse (gchar *dest, + const gchar *src, + gint len); +void procheader_date_get_localtime (gchar *dest, + gint len, + const time_t timer); + +#endif /* __PROCHEADER_H__ */ diff --git a/src/procmime.c b/src/procmime.c new file mode 100644 index 000000000..abc52c29c --- /dev/null +++ b/src/procmime.c @@ -0,0 +1,857 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <locale.h> +#include <ctype.h> + +#include "intl.h" +#include "procmime.h" +#include "procheader.h" +#include "base64.h" +#include "uuencode.h" +#include "unmime.h" +#include "codeconv.h" +#include "utils.h" +#include "prefs_common.h" + +#if USE_GPGME +# include "rfc2015.h" +#endif + +static GHashTable *procmime_get_mime_type_table (void); +static GList *procmime_get_mime_type_list (void); + + +MimeInfo *procmime_mimeinfo_new(void) +{ + MimeInfo *mimeinfo; + + mimeinfo = g_new0(MimeInfo, 1); + mimeinfo->mime_type = MIME_UNKNOWN; + mimeinfo->encoding_type = ENC_UNKNOWN; + + return mimeinfo; +} + +void procmime_mimeinfo_free(MimeInfo *mimeinfo) +{ + if (!mimeinfo) return; + + g_free(mimeinfo->encoding); + g_free(mimeinfo->content_type); + g_free(mimeinfo->charset); + g_free(mimeinfo->name); + g_free(mimeinfo->boundary); + g_free(mimeinfo->content_disposition); + g_free(mimeinfo->filename); +#if USE_GPGME + g_free(mimeinfo->plaintextfile); + g_free(mimeinfo->sigstatus); + g_free(mimeinfo->sigstatus_full); +#endif + + procmime_mimeinfo_free(mimeinfo->sub); + + g_free(mimeinfo); +} + +void procmime_mimeinfo_free_all(MimeInfo *mimeinfo) +{ + while (mimeinfo != NULL) { + MimeInfo *next; + + g_free(mimeinfo->encoding); + g_free(mimeinfo->content_type); + g_free(mimeinfo->charset); + g_free(mimeinfo->name); + g_free(mimeinfo->boundary); + g_free(mimeinfo->content_disposition); + g_free(mimeinfo->filename); +#if USE_GPGME + g_free(mimeinfo->plaintextfile); + g_free(mimeinfo->sigstatus); + g_free(mimeinfo->sigstatus_full); +#endif + + procmime_mimeinfo_free_all(mimeinfo->sub); + procmime_mimeinfo_free_all(mimeinfo->children); +#if USE_GPGME + procmime_mimeinfo_free_all(mimeinfo->plaintext); +#endif + + next = mimeinfo->next; + g_free(mimeinfo); + mimeinfo = next; + } +} + +MimeInfo *procmime_mimeinfo_insert(MimeInfo *parent, MimeInfo *mimeinfo) +{ + MimeInfo *child = parent->children; + + if (!child) + parent->children = mimeinfo; + else { + while (child->next != NULL) + child = child->next; + + child->next = mimeinfo; + } + + mimeinfo->parent = parent; + mimeinfo->level = parent->level + 1; + + return mimeinfo; +} + +void procmime_mimeinfo_replace(MimeInfo *old, MimeInfo *new) +{ + MimeInfo *parent = old->parent; + MimeInfo *child; + + if (!parent) { + g_warning("oops: Not top message"); + return; + } + if (new->next) { + g_message("oops: new child should not have a sibling"); + return; + } + + for (child = parent->children; child && child != old; + child = child->next) + ; + if (!child) { + g_warning("oops: parent can't find it's own child"); + return; + } + procmime_mimeinfo_free_all(old); + + if (child == parent->children) { + new->next = parent->children->next; + parent->children = new; + } else { + new->next = child->next; + child = new; + } +} + +MimeInfo *procmime_scan_message(MsgInfo *msginfo) +{ + FILE *fp; + MimeInfo *mimeinfo; + + g_return_val_if_fail(msginfo != NULL, NULL); + + if ((fp = procmsg_open_message(msginfo)) == NULL) return NULL; + mimeinfo = procmime_scan_mime_header(fp); + + if (mimeinfo) { + if (mimeinfo->mime_type != MIME_MULTIPART) { + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) + perror("fseek"); + } + if (mimeinfo->mime_type != MIME_TEXT) + procmime_scan_multipart_message(mimeinfo, fp); + } + +#if USE_GPGME + if (prefs_common.auto_check_signatures) + rfc2015_check_signature(mimeinfo, fp); +#endif + fclose(fp); + + return mimeinfo; +} + +void procmime_scan_multipart_message(MimeInfo *mimeinfo, FILE *fp) +{ + gchar *p; + gchar *boundary; + gint boundary_len = 0; + gchar buf[BUFFSIZE]; + glong fpos, prev_fpos; + gint npart; + + g_return_if_fail(mimeinfo != NULL); + g_return_if_fail(mimeinfo->mime_type != MIME_TEXT); + + if (mimeinfo->mime_type == MIME_MULTIPART) { + g_return_if_fail(mimeinfo->boundary != NULL); + g_return_if_fail(mimeinfo->sub == NULL); + } + g_return_if_fail(fp != NULL); + + boundary = mimeinfo->boundary; + + if (boundary) { + boundary_len = strlen(boundary); + + /* look for first boundary */ + while ((p = fgets(buf, sizeof(buf), fp)) != NULL) + if (IS_BOUNDARY(buf, boundary, boundary_len)) break; + if (!p) return; + } + + if ((fpos = ftell(fp)) < 0) { + perror("ftell"); + return; + } + + for (npart = 0;; npart++) { + MimeInfo *partinfo; + gboolean eom = FALSE; + + prev_fpos = fpos; + + partinfo = procmime_scan_mime_header(fp); + if (!partinfo) break; + procmime_mimeinfo_insert(mimeinfo, partinfo); + + if (partinfo->mime_type == MIME_MULTIPART) { + if (partinfo->level < 8) + procmime_scan_multipart_message(partinfo, fp); + } else if (partinfo->mime_type == MIME_MESSAGE_RFC822) { + MimeInfo *sub; + + partinfo->sub = sub = procmime_scan_mime_header(fp); + if (!sub) break; + sub->level = partinfo->level + 1; + sub->parent = partinfo->parent; + sub->main = partinfo; + + if (sub->mime_type == MIME_MULTIPART) { + if (sub->level < 8) + procmime_scan_multipart_message + (sub, fp); + } + } + + /* look for next boundary */ + buf[0] = '\0'; + while ((p = fgets(buf, sizeof(buf), fp)) != NULL) { + if (IS_BOUNDARY(buf, boundary, boundary_len)) { + if (buf[2 + boundary_len] == '-' && + buf[2 + boundary_len + 1] == '-') + eom = TRUE; + break; + } + } + if (p == NULL) + eom = TRUE; /* broken MIME message */ + fpos = ftell(fp); + + partinfo->size = fpos - prev_fpos - strlen(buf); + + if (eom) break; + } + //g_message ("** at " __PRETTY_FUNCTION__ ":%d:", __LINE__); +} + +void procmime_scan_encoding(MimeInfo *mimeinfo, const gchar *encoding) +{ + gchar *buf; + + Xalloca(buf, strlen(encoding) + 1, return); + strcpy(buf, encoding); + + g_free(mimeinfo->encoding); + + mimeinfo->encoding = g_strdup(g_strstrip(buf)); + if (!strcasecmp(buf, "7bit")) + mimeinfo->encoding_type = ENC_7BIT; + else if (!strcasecmp(buf, "8bit")) + mimeinfo->encoding_type = ENC_8BIT; + else if (!strcasecmp(buf, "quoted-printable")) + mimeinfo->encoding_type = ENC_QUOTED_PRINTABLE; + else if (!strcasecmp(buf, "base64")) + mimeinfo->encoding_type = ENC_BASE64; + else if (!strcasecmp(buf, "x-uuencode")) + mimeinfo->encoding_type = ENC_X_UUENCODE; + else + mimeinfo->encoding_type = ENC_UNKNOWN; + +} + +void procmime_scan_content_type(MimeInfo *mimeinfo, const gchar *content_type) +{ + gchar *delim, *p, *cnttype; + gchar *buf; + + Xalloca(buf, strlen(content_type) + 1, return); + strcpy(buf, content_type); + + g_free(mimeinfo->content_type); + g_free(mimeinfo->charset); + g_free(mimeinfo->name); + mimeinfo->content_type = NULL; + mimeinfo->charset = NULL; + mimeinfo->name = NULL; + + if ((delim = strchr(buf, ';'))) *delim = '\0'; + mimeinfo->content_type = cnttype = g_strdup(g_strstrip(buf)); + + if (!strncasecmp(cnttype, "text/html", 9)) + mimeinfo->mime_type = MIME_TEXT_HTML; + else if (!strncasecmp(cnttype, "text/", 5)) + mimeinfo->mime_type = MIME_TEXT; + else if (!strncasecmp(cnttype, "message/rfc822", 14)) + mimeinfo->mime_type = MIME_MESSAGE_RFC822; + else if (!strncasecmp(cnttype, "message/", 8)) + mimeinfo->mime_type = MIME_TEXT; + else if (!strncasecmp(cnttype, "application/octet-stream", 24)) + mimeinfo->mime_type = MIME_APPLICATION_OCTET_STREAM; + else if (!strncasecmp(cnttype, "application/", 12)) + mimeinfo->mime_type = MIME_APPLICATION; + else if (!strncasecmp(cnttype, "multipart/", 10)) + mimeinfo->mime_type = MIME_MULTIPART; + else if (!strncasecmp(cnttype, "image/", 6)) + mimeinfo->mime_type = MIME_IMAGE; + else if (!strncasecmp(cnttype, "audio/", 6)) + mimeinfo->mime_type = MIME_AUDIO; + else if (!strcasecmp(cnttype, "text")) + mimeinfo->mime_type = MIME_TEXT; + else + mimeinfo->mime_type = MIME_UNKNOWN; + + if (!delim) return; + p = delim + 1; + + for (;;) { + gchar *eq; + gchar *attr, *value; + + if ((delim = strchr(p, ';'))) *delim = '\0'; + + if (!(eq = strchr(p, '='))) break; + + *eq = '\0'; + attr = p; + g_strstrip(attr); + value = eq + 1; + g_strstrip(value); + + if (*value == '"') + extract_quote(value, '"'); + else { + eliminate_parenthesis(value, '(', ')'); + g_strstrip(value); + } + + if (*value) { + if (!strcasecmp(attr, "charset")) + mimeinfo->charset = g_strdup(value); + else if (!strcasecmp(attr, "name")) { + gchar *tmp; + size_t len; + + len = strlen(value) + 1; + Xalloca(tmp, len, return); + conv_unmime_header(tmp, len, value, NULL); + mimeinfo->name = g_strdup(tmp); + } else if (!strcasecmp(attr, "boundary")) + mimeinfo->boundary = g_strdup(value); + } + + if (!delim) break; + p = delim + 1; + } + + if (mimeinfo->mime_type == MIME_MULTIPART && !mimeinfo->boundary) + mimeinfo->mime_type = MIME_TEXT; +} + +void procmime_scan_content_disposition(MimeInfo *mimeinfo, + const gchar *content_disposition) +{ + gchar *delim, *p, *dispos; + gchar *buf; + + Xalloca(buf, strlen(content_disposition) + 1, return); + strcpy(buf, content_disposition); + + if ((delim = strchr(buf, ';'))) *delim = '\0'; + mimeinfo->content_disposition = dispos = g_strdup(g_strstrip(buf)); + + if (!delim) return; + p = delim + 1; + + for (;;) { + gchar *eq; + gchar *attr, *value; + + if ((delim = strchr(p, ';'))) *delim = '\0'; + + if (!(eq = strchr(p, '='))) break; + + *eq = '\0'; + attr = p; + g_strstrip(attr); + value = eq + 1; + g_strstrip(value); + + if (*value == '"') + extract_quote(value, '"'); + else { + eliminate_parenthesis(value, '(', ')'); + g_strstrip(value); + } + + if (*value) { + if (!strcasecmp(attr, "filename")) { + gchar *tmp; + size_t len; + + len = strlen(value) + 1; + Xalloca(tmp, len, return); + conv_unmime_header(tmp, len, value, NULL); + g_free(mimeinfo->filename); + mimeinfo->filename = g_strdup(tmp); + break; + } + } + + if (!delim) break; + p = delim + 1; + } +} + +enum +{ + H_CONTENT_TRANSFER_ENCODING = 0, + H_CONTENT_TYPE = 1, + H_CONTENT_DISPOSITION = 2 +}; + +MimeInfo *procmime_scan_mime_header(FILE *fp) +{ + static HeaderEntry hentry[] = {{"Content-Transfer-Encoding:", + NULL, FALSE}, + {"Content-Type:", NULL, TRUE}, + {"Content-Disposition:", + NULL, TRUE}, + {NULL, NULL, FALSE}}; + gchar buf[BUFFSIZE]; + gint hnum; + HeaderEntry *hp; + MimeInfo *mimeinfo; + + g_return_val_if_fail(fp != NULL, NULL); + + mimeinfo = procmime_mimeinfo_new(); + mimeinfo->mime_type = MIME_TEXT; + mimeinfo->encoding_type = ENC_7BIT; + mimeinfo->fpos = ftell(fp); + + while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry)) + != -1) { + hp = hentry + hnum; + + if (H_CONTENT_TRANSFER_ENCODING == hnum) { + procmime_scan_encoding + (mimeinfo, buf + strlen(hp->name)); + } else if (H_CONTENT_TYPE == hnum) { + procmime_scan_content_type + (mimeinfo, buf + strlen(hp->name)); + } else if (H_CONTENT_DISPOSITION == hnum) { + procmime_scan_content_disposition + (mimeinfo, buf + strlen(hp->name)); + } + } + + if (!mimeinfo->content_type) + mimeinfo->content_type = g_strdup("text/plain"); + + return mimeinfo; +} + +FILE *procmime_decode_content(FILE *outfp, FILE *infp, MimeInfo *mimeinfo) +{ + gchar buf[BUFFSIZE]; + gchar *boundary = NULL; + gint boundary_len = 0; + gboolean tmp_file = FALSE; + + g_return_val_if_fail(infp != NULL, NULL); + g_return_val_if_fail(mimeinfo != NULL, NULL); + + if (!outfp) { + outfp = my_tmpfile(); + if (!outfp) { + perror("tmpfile"); + return NULL; + } + tmp_file = TRUE; + } + + if (mimeinfo->parent && mimeinfo->parent->boundary) { + boundary = mimeinfo->parent->boundary; + boundary_len = strlen(boundary); + } + + if (mimeinfo->encoding_type == ENC_QUOTED_PRINTABLE) { + gboolean softline = FALSE; + + while (fgets(buf, sizeof(buf), infp) != NULL && + (!boundary || + !IS_BOUNDARY(buf, boundary, boundary_len))) { + guchar *p = buf; + + softline = DoOneQPLine(&p, FALSE, softline); + fwrite(buf, p - (guchar *)buf, 1, outfp); + } + } else if (mimeinfo->encoding_type == ENC_BASE64) { + gchar outbuf[BUFFSIZE]; + gint len; + + while (fgets(buf, sizeof(buf), infp) != NULL && + (!boundary || + !IS_BOUNDARY(buf, boundary, boundary_len))) { + len = from64tobits(outbuf, buf); + if (len < 0) { + g_warning("Bad BASE64 content\n"); + break; + } + fwrite(outbuf, sizeof(gchar), len, outfp); + } + } else if (mimeinfo->encoding_type == ENC_X_UUENCODE) { + gchar outbuf[BUFFSIZE]; + gint len; + gboolean flag = FALSE; + + while (fgets(buf, sizeof(buf), infp) != NULL && + (!boundary || + !IS_BOUNDARY(buf, boundary, boundary_len))) { + if(!flag && strncmp(buf,"begin ", 6)) continue; + + if (flag) { + len = fromuutobits(outbuf, buf); + if (len <= 0) { + if (len < 0) + g_warning("Bad UUENCODE content(%d)\n", len); + break; + } + fwrite(outbuf, sizeof(gchar), len, outfp); + } else + flag = TRUE; + } + } else { + while (fgets(buf, sizeof(buf), infp) != NULL && + (!boundary || + !IS_BOUNDARY(buf, boundary, boundary_len))) { + fputs(buf, outfp); + } + } + + if (tmp_file) rewind(outfp); + return outfp; +} + +gint procmime_get_part(const gchar *outfile, const gchar *infile, + MimeInfo *mimeinfo) +{ + FILE *infp, *outfp; + gchar buf[BUFFSIZE]; + + g_return_val_if_fail(outfile != NULL, -1); + g_return_val_if_fail(infile != NULL, -1); + g_return_val_if_fail(mimeinfo != NULL, -1); + + if ((infp = fopen(infile, "r")) == NULL) { + FILE_OP_ERROR(infile, "fopen"); + return -1; + } + if (fseek(infp, mimeinfo->fpos, SEEK_SET) < 0) { + FILE_OP_ERROR(infile, "fseek"); + fclose(infp); + return -1; + } + if ((outfp = fopen(outfile, "w")) == NULL) { + FILE_OP_ERROR(outfile, "fopen"); + fclose(infp); + return -1; + } + + while (fgets(buf, sizeof(buf), infp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + + procmime_decode_content(outfp, infp, mimeinfo); + + fclose(infp); + if (fclose(outfp) == EOF) { + FILE_OP_ERROR(outfile, "fclose"); + unlink(outfile); + return -1; + } + + return 0; +} + +FILE *procmime_get_text_part(MsgInfo *msginfo) +{ + FILE *infp, *tmpfp, *outfp; + MimeInfo *mimeinfo, *partinfo = NULL; + gchar *src_codeset; + gboolean conv_fail = FALSE; + gchar buf[BUFFSIZE]; + + g_return_val_if_fail(msginfo != NULL, NULL); + + mimeinfo = procmime_scan_message(msginfo); + if (!mimeinfo) return NULL; + + if ((infp = procmsg_open_message(msginfo)) == NULL) { + procmime_mimeinfo_free_all(mimeinfo); + return NULL; + } + + if (mimeinfo->mime_type == MIME_MULTIPART) { + partinfo = mimeinfo->children; + if (partinfo && partinfo->mime_type == MIME_TEXT) { + if (fseek(infp, partinfo->fpos, SEEK_SET) < 0) { + perror("fseek"); + partinfo = NULL; + } + } else + partinfo = NULL; + } else if (mimeinfo->mime_type == MIME_TEXT) { + partinfo = mimeinfo; + if (fseek(infp, partinfo->fpos, SEEK_SET) < 0) { + perror("fseek"); + partinfo = NULL; + } + } + + if (!partinfo) { + procmime_mimeinfo_free_all(mimeinfo); + return NULL; + } + + while (fgets(buf, sizeof(buf), infp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + + tmpfp = procmime_decode_content(NULL, infp, partinfo); + if (!tmpfp) { + procmime_mimeinfo_free_all(mimeinfo); + return NULL; + } + + if ((outfp = my_tmpfile()) == NULL) { + perror("tmpfile"); + fclose(tmpfp); + procmime_mimeinfo_free_all(mimeinfo); + return NULL; + } + + src_codeset = prefs_common.force_charset + ? prefs_common.force_charset : partinfo->charset; + + while (fgets(buf, sizeof(buf), tmpfp) != NULL) { + gchar *str; + + str = conv_codeset_strdup(buf, src_codeset, NULL); + if (str) { + fputs(str, outfp); + g_free(str); + } else { + conv_fail = TRUE; + fputs(buf, outfp); + } + } + if (conv_fail) g_warning(_("Code conversion failed.\n")); + + fclose(tmpfp); + procmime_mimeinfo_free_all(mimeinfo); + rewind(outfp); + + return outfp; +} + +gchar *procmime_get_tmp_file_name(MimeInfo *mimeinfo) +{ + static guint32 id = 0; + gchar *base; + gchar *filename; + gchar f_prefix[10]; + + g_return_val_if_fail(mimeinfo != NULL, NULL); + + g_snprintf(f_prefix, sizeof(f_prefix), "%08x.", id++); + + if (MIME_TEXT_HTML == mimeinfo->mime_type) + base = "mimetmp.html"; + else { + base = mimeinfo->filename ? mimeinfo->filename + : mimeinfo->name ? mimeinfo->name : "mimetmp"; + base = g_basename(base); + if (*base == '\0') base = "mimetmp"; + } + + filename = g_strconcat(get_mime_tmp_dir(), G_DIR_SEPARATOR_S, + f_prefix, base, NULL); + + return filename; +} + +static GList *mime_type_list = NULL; + +gchar *procmime_get_mime_type(const gchar *filename) +{ + static GHashTable *mime_type_table = NULL; + MimeType *mime_type; + const gchar *ext, *p; + + if (!mime_type_table) { + mime_type_table = procmime_get_mime_type_table(); + if (!mime_type_table) return NULL; + } + + filename = g_basename(filename); + p = strrchr(filename, '.'); + if (p) + ext = p + 1; + else + return NULL; + + mime_type = g_hash_table_lookup(mime_type_table, ext); + if (mime_type) { + gchar *str; + + str = g_strconcat(mime_type->type, "/", mime_type->sub_type, + NULL); + return str; + } + + return NULL; +} + +static GHashTable *procmime_get_mime_type_table(void) +{ + GHashTable *table = NULL; + GList *cur; + MimeType *mime_type; + gchar **exts; + + if (!mime_type_list) { + mime_type_list = procmime_get_mime_type_list(); + if (!mime_type_list) return NULL; + } + + table = g_hash_table_new(g_str_hash, g_str_equal); + + for (cur = mime_type_list; cur != NULL; cur = cur->next) { + gint i; + + mime_type = (MimeType *)cur->data; + + if (!mime_type->extension) continue; + + exts = g_strsplit(mime_type->extension, " ", 16); + for (i = 0; exts[i] != NULL; i++) + g_hash_table_insert(table, g_strdup(exts[i]), + mime_type); + g_strfreev(exts); + } + + return table; +} + +static GList *procmime_get_mime_type_list(void) +{ + GList *list = NULL; + FILE *fp; + gchar buf[BUFFSIZE]; + gchar *p, *delim; + MimeType *mime_type; + + if ((fp = fopen("/etc/mime.types", "r")) == NULL) { + FILE_OP_ERROR("/etc/mime.types", "fopen"); + return NULL; + } + + while (fgets(buf, sizeof(buf), fp) != NULL) { + p = strchr(buf, '#'); + if (p) *p = '\0'; + g_strstrip(buf); + + p = buf; + while (*p && !isspace(*p)) p++; + if (*p) { + *p = '\0'; + p++; + } + delim = strchr(buf, '/'); + if (delim == NULL) continue; + *delim = '\0'; + + mime_type = g_new(MimeType, 1); + mime_type->type = g_strdup(buf); + mime_type->sub_type = g_strdup(delim + 1); + + while (*p && isspace(*p)) p++; + if (*p) + mime_type->extension = g_strdup(p); + else + mime_type->extension = NULL; + + list = g_list_append(list, mime_type); + } + + fclose(fp); + + if (!list) + g_warning("Can't read mime.types\n"); + + return list; +} + +EncodingType procmime_get_encoding_for_charset(const gchar *charset) +{ + if (!charset) + return ENC_8BIT; + else if (!strncasecmp(charset, "ISO-2022-", 9) || + !strcasecmp(charset, "US-ASCII")) + return ENC_7BIT; + else + return ENC_8BIT; + /* return ENC_BASE64; */ + /* return ENC_QUOTED_PRINTABLE; */ +} + +const gchar *procmime_get_encoding_str(EncodingType encoding) +{ + static const gchar *encoding_str[] = { + "7bit", "8bit", "quoted-printable", "base64", "x-uuencode", + NULL + }; + + if (encoding >= ENC_7BIT && encoding <= ENC_UNKNOWN) + return encoding_str[encoding]; + else + return NULL; +} diff --git a/src/procmime.h b/src/procmime.h new file mode 100644 index 000000000..6206738cd --- /dev/null +++ b/src/procmime.h @@ -0,0 +1,142 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PROCMIME_H__ +#define __PROCMIME_H__ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> + +typedef struct _MimeType MimeType; +typedef struct _MimeInfo MimeInfo; + +#include "procmsg.h" + +typedef enum +{ + ENC_7BIT, + ENC_8BIT, + ENC_QUOTED_PRINTABLE, + ENC_BASE64, + ENC_X_UUENCODE, + ENC_UNKNOWN +} EncodingType; + +typedef enum +{ + MIME_TEXT, + MIME_TEXT_HTML, + MIME_MESSAGE_RFC822, + MIME_APPLICATION, + MIME_APPLICATION_OCTET_STREAM, + MIME_MULTIPART, + MIME_IMAGE, + MIME_AUDIO, + MIME_UNKNOWN +} ContentType; + +struct _MimeType +{ + gchar *type; + gchar *sub_type; + + gchar *extension; +}; + +struct _MimeInfo +{ + gchar *encoding; + + EncodingType encoding_type; + ContentType mime_type; + + gchar *content_type; + gchar *charset; + gchar *name; + gchar *boundary; + + gchar *content_disposition; + gchar *filename; + + glong fpos; + guint size; + + MimeInfo *main; + MimeInfo *sub; + + MimeInfo *next; + MimeInfo *parent; + MimeInfo *children; + +#if USE_GPGME + MimeInfo *plaintext; + gchar *plaintextfile; + gchar *sigstatus; + gchar *sigstatus_full; +#endif + + gint level; +}; + +#define IS_BOUNDARY(s, bnd, len) \ + (bnd && s[0] == '-' && s[1] == '-' && !strncmp(s + 2, bnd, len)) + +/* MimeInfo handling */ + +MimeInfo *procmime_mimeinfo_new (void); +void procmime_mimeinfo_free (MimeInfo *mimeinfo); +void procmime_mimeinfo_free_all (MimeInfo *mimeinfo); + +MimeInfo *procmime_mimeinfo_insert (MimeInfo *parent, + MimeInfo *mimeinfo); + +MimeInfo *procmime_scan_message (MsgInfo *msginfo); +void procmime_scan_multipart_message (MimeInfo *mimeinfo, + FILE *fp); + +/* scan headers */ + +void procmime_scan_encoding (MimeInfo *mimeinfo, + const gchar *encoding); +void procmime_scan_content_type (MimeInfo *mimeinfo, + const gchar *content_type); +void procmime_scan_content_disposition (MimeInfo *mimeinfo, + const gchar *content_disposition); +MimeInfo *procmime_scan_mime_header (FILE *fp); + +FILE *procmime_decode_content (FILE *outfp, + FILE *infp, + MimeInfo *mimeinfo); +gint procmime_get_part (const gchar *outfile, + const gchar *infile, + MimeInfo *mimeinfo); +FILE *procmime_get_text_part (MsgInfo *msginfo); + +gchar *procmime_get_tmp_file_name (MimeInfo *mimeinfo); + +gchar *procmime_get_mime_type (const gchar *filename); + +EncodingType procmime_get_encoding_for_charset (const gchar *charset); +const gchar *procmime_get_encoding_str (EncodingType encoding); + +#endif /* __PROCMIME_H__ */ diff --git a/src/procmsg.c b/src/procmsg.c new file mode 100644 index 000000000..27faf07dd --- /dev/null +++ b/src/procmsg.c @@ -0,0 +1,808 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <stdlib.h> + +#include "intl.h" +#include "main.h" +#include "utils.h" +#include "procmsg.h" +#include "procheader.h" +#include "send.h" +#include "procmime.h" +#include "statusbar.h" +#include "folder.h" + +typedef struct _FlagInfo FlagInfo; + +struct _FlagInfo +{ + guint msgnum; + MsgFlags flags; +}; + +static void mark_sum_func (gpointer key, + gpointer value, + gpointer data); + +static GHashTable *procmsg_read_mark_file (const gchar *folder); +static gint procmsg_cmp_msgnum (gconstpointer a, + gconstpointer b); +static gint procmsg_cmp_flag_msgnum (gconstpointer a, + gconstpointer b); + + +GHashTable *procmsg_msg_hash_table_create(GSList *mlist) +{ + GHashTable *msg_table; + + if (mlist == NULL) return NULL; + + msg_table = g_hash_table_new(NULL, g_direct_equal); + procmsg_msg_hash_table_append(msg_table, mlist); + + return msg_table; +} + +void procmsg_msg_hash_table_append(GHashTable *msg_table, GSList *mlist) +{ + GSList *cur; + MsgInfo *msginfo; + + if (msg_table == NULL || mlist == NULL) return; + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + + g_hash_table_insert(msg_table, + GUINT_TO_POINTER(msginfo->msgnum), + msginfo); + } +} + +GHashTable *procmsg_to_folder_hash_table_create(GSList *mlist) +{ + GHashTable *msg_table; + GSList *cur; + MsgInfo *msginfo; + + if (mlist == NULL) return NULL; + + msg_table = g_hash_table_new(NULL, g_direct_equal); + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + g_hash_table_insert(msg_table, msginfo->to_folder, msginfo); + } + + return msg_table; +} + +static gint procmsg_read_cache_data_str(FILE *fp, gchar **str) +{ + gchar buf[BUFFSIZE]; + gint ret = 0; + size_t len; + + if (fread(&len, sizeof(len), 1, fp) == 1) { + if (len < 0) + ret = -1; + else { + gchar *tmp = NULL; + + while (len > 0) { + size_t size = MIN(len, BUFFSIZE - 1); + + if (fread(buf, size, 1, fp) != 1) { + ret = -1; + if (tmp) g_free(tmp); + *str = NULL; + break; + } + + buf[size] = '\0'; + if (tmp) { + *str = g_strconcat(tmp, buf, NULL); + g_free(tmp); + tmp = *str; + } else + tmp = *str = g_strdup(buf); + + len -= size; + } + } + } else + ret = -1; + + if (ret < 0) + g_warning(_("Cache data is corrupted\n")); + + return ret; +} + +#define READ_CACHE_DATA(data, fp) \ +{ \ + if (procmsg_read_cache_data_str(fp, &data) < 0) { \ + procmsg_msginfo_free(msginfo); \ + break; \ + } \ +} + +#define READ_CACHE_DATA_INT(n, fp) \ +{ \ + if (fread(&n, sizeof(n), 1, fp) != 1) { \ + g_warning(_("Cache data is corrupted\n")); \ + procmsg_msginfo_free(msginfo); \ + break; \ + } \ +} + +GSList *procmsg_read_cache(FolderItem *item, gboolean scan_file) +{ + GSList *mlist = NULL; + GSList *last = NULL; + gchar *cache_file; + FILE *fp; + MsgInfo *msginfo; + MsgFlags default_flags; + gchar file_buf[BUFFSIZE]; + gint ver; + guint num; + FolderType type; + + g_return_val_if_fail(item != NULL, NULL); + g_return_val_if_fail(item->folder != NULL, NULL); + type = item->folder->type; + + default_flags = MSG_NEW|MSG_UNREAD|MSG_CACHED; + if (type == F_MH) { + if (item->stype == F_QUEUE) { + MSG_SET_FLAGS(default_flags, MSG_QUEUED); + } else if (item->stype == F_DRAFT) { + MSG_SET_FLAGS(default_flags, MSG_DRAFT); + } + } else if (type == F_IMAP) { + MSG_SET_FLAGS(default_flags, MSG_IMAP); + } else if (type == F_NEWS) { + MSG_SET_FLAGS(default_flags, MSG_NEWS); + } + + if (type == F_MH) { + gchar *path; + + path = folder_item_get_path(item); + if (change_dir(path) < 0) { + g_free(path); + return NULL; + } + g_free(path); + } + cache_file = folder_item_get_cache_file(item); + if ((fp = fopen(cache_file, "r")) == NULL) { + debug_print(_("\tNo cache file\n")); + g_free(cache_file); + return NULL; + } + setvbuf(fp, file_buf, _IOFBF, sizeof(file_buf)); + g_free(cache_file); + + debug_print(_("\tReading summary cache...")); + + /* compare cache version */ + if (fread(&ver, sizeof(ver), 1, fp) != 1 || + CACHE_VERSION != ver) { + debug_print(_("Cache version is different. Discarding it.\n")); + fclose(fp); + return NULL; + } + + while (fread(&num, sizeof(num), 1, fp) == 1) { + msginfo = g_new0(MsgInfo, 1); + msginfo->msgnum = num; + READ_CACHE_DATA_INT(msginfo->size, fp); + READ_CACHE_DATA_INT(msginfo->mtime, fp); + READ_CACHE_DATA_INT(msginfo->date_t, fp); + READ_CACHE_DATA_INT(msginfo->flags, fp); + + READ_CACHE_DATA(msginfo->fromname, fp); + + READ_CACHE_DATA(msginfo->date, fp); + READ_CACHE_DATA(msginfo->from, fp); + READ_CACHE_DATA(msginfo->to, fp); + READ_CACHE_DATA(msginfo->newsgroups, fp); + READ_CACHE_DATA(msginfo->subject, fp); + READ_CACHE_DATA(msginfo->msgid, fp); + READ_CACHE_DATA(msginfo->inreplyto, fp); + + MSG_SET_FLAGS(msginfo->flags, default_flags); + + /* if the message file doesn't exist or is changed, + don't add the data */ + if (type == F_MH && scan_file && + folder_item_is_msg_changed(item, msginfo)) + procmsg_msginfo_free(msginfo); + else { + msginfo->folder = item; + + if (!mlist) + last = mlist = g_slist_append(NULL, msginfo); + else { + last = g_slist_append(last, msginfo); + last = last->next; + } + } + } + + fclose(fp); + debug_print(_("done.\n")); + + return mlist; +} + +#undef READ_CACHE_DATA +#undef READ_CACHE_DATA_INT + +void procmsg_set_flags(GSList *mlist, FolderItem *item) +{ + GSList *cur, *tmp; + gint newmsg = 0; + gint lastnum = 0; + gchar *markdir; + MsgInfo *msginfo; + GHashTable *mark_table; + MsgFlags flags; + + if (!mlist) return; + g_return_if_fail(item != NULL); + g_return_if_fail(item->folder != NULL); + + debug_print(_("\tMarking the messages...")); + + markdir = folder_item_get_path(item); + mark_table = procmsg_read_mark_file(markdir); + g_free(markdir); + + if (!mark_table) return; + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + + if (lastnum < msginfo->msgnum) + lastnum = msginfo->msgnum; + + flags = GPOINTER_TO_UINT(g_hash_table_lookup(mark_table, + GUINT_TO_POINTER(msginfo->msgnum))); + + if (flags != 0) { + /* add the permanent flags only */ + MSG_UNSET_FLAGS(msginfo->flags, + MSG_PERMANENT_FLAG_MASK); + MSG_SET_FLAGS(msginfo->flags, + flags & MSG_PERMANENT_FLAG_MASK); + if (item->folder->type == F_IMAP) { + MSG_SET_FLAGS(msginfo->flags, MSG_IMAP); + } else if (item->folder->type == F_NEWS) { + MSG_SET_FLAGS(msginfo->flags, MSG_NEWS); + } + } else { + /* not found (new message) */ + if (newmsg == 0) { + for (tmp = mlist; tmp != cur; tmp = tmp->next) + MSG_UNSET_FLAGS + (((MsgInfo *)tmp->data)->flags, + MSG_NEW); + } + newmsg++; + } + } + + item->last_num = lastnum; + + debug_print(_("done.\n")); + if (newmsg) + debug_print(_("\t%d new message(s)\n"), newmsg); + + g_hash_table_destroy(mark_table); +} + +gint procmsg_get_last_num_in_cache(GSList *mlist) +{ + GSList *cur; + MsgInfo *msginfo; + gint last = 0; + + if (mlist == NULL) return 0; + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + if (msginfo && msginfo->msgnum > last) + last = msginfo->msgnum; + } + + return last; +} + +void procmsg_write_cache(MsgInfo *msginfo, FILE *fp) +{ + MsgFlags flags = msginfo->flags & MSG_CACHED_FLAG_MASK; + + WRITE_CACHE_DATA_INT(msginfo->msgnum, fp); + WRITE_CACHE_DATA_INT(msginfo->size, fp); + WRITE_CACHE_DATA_INT(msginfo->mtime, fp); + WRITE_CACHE_DATA_INT(msginfo->date_t, fp); + WRITE_CACHE_DATA_INT(flags, fp); + + WRITE_CACHE_DATA(msginfo->fromname, fp); + + WRITE_CACHE_DATA(msginfo->date, fp); + WRITE_CACHE_DATA(msginfo->from, fp); + WRITE_CACHE_DATA(msginfo->to, fp); + WRITE_CACHE_DATA(msginfo->newsgroups, fp); + WRITE_CACHE_DATA(msginfo->subject, fp); + WRITE_CACHE_DATA(msginfo->msgid, fp); + WRITE_CACHE_DATA(msginfo->inreplyto, fp); +} + +void procmsg_write_flags(MsgInfo *msginfo, FILE *fp) +{ + MsgFlags flags; + + flags = msginfo->flags & MSG_PERMANENT_FLAG_MASK; + + WRITE_CACHE_DATA_INT(msginfo->msgnum, fp); + WRITE_CACHE_DATA_INT(flags, fp); +} + +struct MarkSum { + gint *new; + gint *unread; + gint *total; +}; + +static void mark_sum_func(gpointer key, gpointer value, gpointer data) +{ + MsgFlags flags = GPOINTER_TO_UINT(value); + struct MarkSum *marksum = data; + + if (MSG_IS_NEW(flags)) (*marksum->new)++; + if (MSG_IS_UNREAD(flags)) (*marksum->unread)++; + (*marksum->total)++; +} + +void procmsg_get_mark_sum(const gchar *folder, + gint *new, gint *unread, gint *total) +{ + GHashTable *mark_table; + struct MarkSum marksum; + + *new = *unread = *total = 0; + marksum.new = new; + marksum.unread = unread; + marksum.total = total; + + mark_table = procmsg_read_mark_file(folder); + + if (mark_table) { + g_hash_table_foreach(mark_table, mark_sum_func, &marksum); + g_hash_table_destroy(mark_table); + } +} + +static GHashTable *procmsg_read_mark_file(const gchar *folder) +{ + FILE *fp; + GHashTable *mark_table = NULL; + gint num; + MsgFlags flags; + + if ((fp = procmsg_open_mark_file(folder, FALSE)) == NULL) + return NULL; + + mark_table = g_hash_table_new(NULL, g_direct_equal); + + while (fread(&num, sizeof(num), 1, fp) == 1) { + if (fread(&flags, sizeof(flags), 1, fp) != 1) break; + MSG_SET_FLAGS(flags, MSG_CACHED); + + g_hash_table_insert(mark_table, + GUINT_TO_POINTER(num), + GUINT_TO_POINTER(flags)); + } + + fclose(fp); + return mark_table; +} + +FILE *procmsg_open_mark_file(const gchar *folder, gboolean append) +{ + gchar *markfile; + FILE *fp; + gint ver; + + markfile = g_strconcat(folder, G_DIR_SEPARATOR_S, MARK_FILE, NULL); + + if ((fp = fopen(markfile, "r")) == NULL) + debug_print(_("Mark file not found.\n")); + else if (fread(&ver, sizeof(ver), 1, fp) != 1 || MARK_VERSION != ver) { + debug_print(_("Mark version is different (%d != %d). " + "Discarding it.\n"), ver, MARK_VERSION); + fclose(fp); + fp = NULL; + } + + /* read mode */ + if (append == FALSE) { + g_free(markfile); + return fp; + } + + if (fp) { + /* reopen with append mode */ + fclose(fp); + if ((fp = fopen(markfile, "a")) == NULL) + g_warning(_("Can't open mark file with append mode.\n")); + } else { + /* open with overwrite mode if mark file doesn't exist or + version is different */ + if ((fp = fopen(markfile, "w")) == NULL) + g_warning(_("Can't open mark file with write mode.\n")); + else { + ver = MARK_VERSION; + WRITE_CACHE_DATA_INT(ver, fp); + } + } + + g_free(markfile); + return fp; +} + +void procmsg_move_messages(GSList *mlist) +{ + GSList *cur, *movelist = NULL; + MsgInfo *msginfo; + FolderItem *dest = NULL; + GHashTable *hash; + + if (!mlist) return; + + hash = procmsg_to_folder_hash_table_create(mlist); + folder_item_scan_foreach(hash); + g_hash_table_destroy(hash); + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + if (!dest) { + dest = msginfo->to_folder; + movelist = g_slist_append(movelist, msginfo); + } else if (dest == msginfo->to_folder) { + movelist = g_slist_append(movelist, msginfo); + } else { + folder_item_move_msgs_with_dest(dest, movelist); + g_slist_free(movelist); + movelist = NULL; + dest = msginfo->to_folder; + movelist = g_slist_append(movelist, msginfo); + } + } + + if (movelist) { + folder_item_move_msgs_with_dest(dest, movelist); + g_slist_free(movelist); + } +} + +void procmsg_copy_messages(GSList *mlist) +{ + GSList *cur, *copylist = NULL; + MsgInfo *msginfo; + FolderItem *dest = NULL; + GHashTable *hash; + + if (!mlist) return; + + hash = procmsg_to_folder_hash_table_create(mlist); + folder_item_scan_foreach(hash); + g_hash_table_destroy(hash); + + for (cur = mlist; cur != NULL; cur = cur->next) { + msginfo = (MsgInfo *)cur->data; + if (!dest) { + dest = msginfo->to_folder; + copylist = g_slist_append(copylist, msginfo); + } else if (dest == msginfo->to_folder) { + copylist = g_slist_append(copylist, msginfo); + } else { + folder_item_copy_msgs_with_dest(dest, copylist); + g_slist_free(copylist); + copylist = NULL; + dest = msginfo->to_folder; + copylist = g_slist_append(copylist, msginfo); + } + } + + if (copylist) { + folder_item_copy_msgs_with_dest(dest, copylist); + g_slist_free(copylist); + } +} + +gchar *procmsg_get_message_file_path(MsgInfo *msginfo) +{ + gchar *path, *file; + + g_return_val_if_fail(msginfo != NULL, NULL); + + if (msginfo->plaintext_file) + file = g_strdup(msginfo->plaintext_file); + else { + path = folder_item_get_path(msginfo->folder); + file = g_strconcat(path, G_DIR_SEPARATOR_S, + itos(msginfo->msgnum), NULL); + g_free(path); + } + + return file; +} + +gchar *procmsg_get_message_file(MsgInfo *msginfo) +{ + gchar *filename = NULL; + + g_return_val_if_fail(msginfo != NULL, NULL); + + filename = folder_item_fetch_msg(msginfo->folder, msginfo->msgnum); + if (!filename) + g_warning(_("can't fetch message %d\n"), msginfo->msgnum); + + return filename; +} + +FILE *procmsg_open_message(MsgInfo *msginfo) +{ + FILE *fp; + gchar *file; + + g_return_val_if_fail(msginfo != NULL, NULL); + + file = procmsg_get_message_file_path(msginfo); + g_return_val_if_fail(file != NULL, NULL); + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + g_free(file); + return NULL; + } + + g_free(file); + + if (MSG_IS_QUEUED(msginfo->flags)) { + gchar buf[BUFFSIZE]; + + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + } + + return fp; +} + +gboolean procmsg_msg_exist(MsgInfo *msginfo) +{ + gchar *path; + gboolean ret; + + if (!msginfo) return FALSE; + + path = procmsg_get_message_file_path(msginfo); + change_dir(path); + ret = !folder_item_is_msg_changed(msginfo->folder, msginfo); + g_free(path); + + return ret; +} + +void procmsg_empty_trash(void) +{ + FolderItem *trash; + GList *cur; + + for (cur = folder_get_list(); cur != NULL; cur = cur->next) { + trash = FOLDER(cur->data)->trash; + if (trash) folder_item_remove_all_msg(trash); + } +} + +gint procmsg_send_queue(void) +{ + FolderItem *queue; + gint i; + + queue = folder_get_default_queue(); + g_return_val_if_fail(queue != NULL, -1); + folder_item_scan(queue); + if (queue->last_num < 0) return -1; + else if (queue->last_num == 0) return 0; + + for (i = 1; i <= queue->last_num; i++) { + gchar *file; + + file = folder_item_fetch_msg(queue, i); + if (file) { + if (send_message_queue(file) < 0) { + g_warning(_("Sending queued message failed.\n")); + g_free(file); + return -1; + } + folder_item_remove_msg(queue, i); + g_free(file); + } + } + + return 0; +} + +void procmsg_print_message(MsgInfo *msginfo, const gchar *cmdline) +{ + static const gchar *def_cmd = "lpr %s"; + static guint id = 0; + gchar *prtmp; + FILE *tmpfp, *prfp; + gchar buf[1024]; + gchar *p; + + g_return_if_fail(msginfo); + + if ((tmpfp = procmime_get_text_part(msginfo)) == NULL) { + g_warning(_("Can't get text part\n")); + return; + } + + prtmp = g_strdup_printf("%s%cprinttmp.%08x", + get_mime_tmp_dir(), G_DIR_SEPARATOR, id++); + + if ((prfp = fopen(prtmp, "w")) == NULL) { + FILE_OP_ERROR(prtmp, "fopen"); + g_free(prtmp); + fclose(tmpfp); + return; + } + + if (msginfo->date) fprintf(prfp, "Date: %s\n", msginfo->date); + if (msginfo->from) fprintf(prfp, "From: %s\n", msginfo->from); + if (msginfo->to) fprintf(prfp, "To: %s\n", msginfo->to); + if (msginfo->newsgroups) + fprintf(prfp, "Newsgroups: %s\n", msginfo->newsgroups); + if (msginfo->subject) fprintf(prfp, "Subject: %s\n", msginfo->subject); + fputc('\n', prfp); + + while (fgets(buf, sizeof(buf), tmpfp) != NULL) + fputs(buf, prfp); + + fclose(prfp); + fclose(tmpfp); + + if (cmdline && (p = strchr(cmdline, '%')) && *(p + 1) == 's' && + !strchr(p + 2, '%')) + g_snprintf(buf, sizeof(buf) - 1, cmdline, prtmp); + else { + if (cmdline) + g_warning(_("Print command line is invalid: `%s'\n"), + cmdline); + g_snprintf(buf, sizeof(buf) - 1, def_cmd, prtmp); + } + + g_free(prtmp); + + g_strchomp(buf); + if (buf[strlen(buf) - 1] != '&') strcat(buf, "&"); + system(buf); +} + +MsgInfo *procmsg_msginfo_copy(MsgInfo *msginfo) +{ + MsgInfo *newmsginfo; + + if (msginfo == NULL) return NULL; + + newmsginfo = g_new0(MsgInfo, 1); + +#define MEMBCOPY(mmb) newmsginfo->mmb = msginfo->mmb +#define MEMBDUP(mmb) newmsginfo->mmb = msginfo->mmb ? \ + g_strdup(msginfo->mmb) : NULL + + MEMBCOPY(msgnum); + MEMBCOPY(size); + MEMBCOPY(mtime); + MEMBCOPY(date_t); + MEMBCOPY(flags); + + MEMBDUP(fromname); + + MEMBDUP(date); + MEMBDUP(from); + MEMBDUP(to); + MEMBDUP(newsgroups); + MEMBDUP(subject); + MEMBDUP(msgid); + MEMBDUP(inreplyto); + + MEMBCOPY(folder); + MEMBCOPY(to_folder); + + MEMBDUP(xface); + + return newmsginfo; +} + +void procmsg_msginfo_free(MsgInfo *msginfo) +{ + if (msginfo == NULL) return; + + g_free(msginfo->xface); + + g_free(msginfo->fromname); + + g_free(msginfo->date); + g_free(msginfo->from); + g_free(msginfo->to); + g_free(msginfo->newsgroups); + g_free(msginfo->subject); + g_free(msginfo->msgid); + g_free(msginfo->inreplyto); + + g_free(msginfo); +} + +static gint procmsg_cmp_msgnum(gconstpointer a, gconstpointer b) +{ + const MsgInfo *msginfo = a; + const guint msgnum = GPOINTER_TO_UINT(b); + + if (!msginfo) + return -1; + + return msginfo->msgnum - msgnum; +} + +gint procmsg_cmp_msgnum_for_sort(gconstpointer a, gconstpointer b) +{ + const MsgInfo *msginfo1 = a; + const MsgInfo *msginfo2 = b; + + if (!msginfo1) + return -1; + if (!msginfo2) + return -1; + + return msginfo1->msgnum - msginfo2->msgnum; +} + +static gint procmsg_cmp_flag_msgnum(gconstpointer a, gconstpointer b) +{ + const FlagInfo *finfo = a; + const guint msgnum = GPOINTER_TO_UINT(b); + + if (!finfo) + return -1; + + return finfo->msgnum - msgnum; +} diff --git a/src/procmsg.h b/src/procmsg.h new file mode 100644 index 000000000..07c8de505 --- /dev/null +++ b/src/procmsg.h @@ -0,0 +1,169 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PROCMSG_H__ +#define __PROCMSG_H__ + +#include <glib.h> +#include <stdio.h> +#include <time.h> +#include <sys/types.h> +#include <string.h> + +typedef struct _MsgInfo MsgInfo; + +#include "folder.h" + +typedef enum +{ + /* permanent flags (0x0000ffff) */ + MSG_NEW = 1 << 0, + MSG_UNREAD = 1 << 1, + MSG_MARKED = 1 << 2, + MSG_DELETED = 1 << 3, + MSG_REPLIED = 1 << 4, + MSG_FORWARDED = 1 << 5, + + /* temporary flags (0xffff0000) */ + MSG_MOVE = 1 << 16, + MSG_COPY = 1 << 17, + + MSG_QUEUED = 1 << 25, + MSG_DRAFT = 1 << 26, + MSG_ENCRYPTED = 1 << 27, + MSG_IMAP = 1 << 28, + MSG_MIME = 1 << 29, + MSG_NEWS = 1 << 30, + MSG_CACHED = 1 << 31 +} MsgFlags; + +#define MSG_PERMANENT_FLAG_MASK (MSG_NEW | \ + MSG_UNREAD | \ + MSG_MARKED | \ + MSG_DELETED | \ + MSG_REPLIED | \ + MSG_FORWARDED) +#define MSG_CACHED_FLAG_MASK (MSG_MIME) + +#define MSG_SET_FLAGS(msg, flags) { (msg) |= (flags); } +#define MSG_UNSET_FLAGS(msg, flags) { (msg) &= ~(flags); } +#define MSG_IS_NEW(msg) ((msg & MSG_NEW) != 0) +#define MSG_IS_UNREAD(msg) ((msg & MSG_UNREAD) != 0) +#define MSG_IS_MARKED(msg) ((msg & MSG_MARKED) != 0) +#define MSG_IS_DELETED(msg) ((msg & MSG_DELETED) != 0) +#define MSG_IS_REPLIED(msg) ((msg & MSG_REPLIED) != 0) +#define MSG_IS_FORWARDED(msg) ((msg & MSG_FORWARDED) != 0) + +#define MSG_IS_MOVE(msg) ((msg & MSG_MOVE) != 0) +#define MSG_IS_COPY(msg) ((msg & MSG_COPY) != 0) + +#define MSG_IS_QUEUED(msg) ((msg & MSG_QUEUED) != 0) +#define MSG_IS_DRAFT(msg) ((msg & MSG_DRAFT) != 0) +#define MSG_IS_ENCRYPTED(msg) ((msg & MSG_ENCRYPTED) != 0) +#define MSG_IS_IMAP(msg) ((msg & MSG_IMAP) != 0) +#define MSG_IS_MIME(msg) ((msg & MSG_MIME) != 0) +#define MSG_IS_NEWS(msg) ((msg & MSG_NEWS) != 0) +#define MSG_IS_CACHED(msg) ((msg & MSG_CACHED) != 0) + +#define WRITE_CACHE_DATA_INT(n, fp) \ + fwrite(&n, sizeof(n), 1, fp) + +#define WRITE_CACHE_DATA(data, fp) \ +{ \ + gint len; \ + \ + if (data == NULL || (len = strlen(data)) == 0) { \ + len = 0; \ + WRITE_CACHE_DATA_INT(len, fp); \ + } else { \ + len = strlen(data); \ + WRITE_CACHE_DATA_INT(len, fp); \ + fwrite(data, len, 1, fp); \ + } \ +} + +struct _MsgInfo +{ + guint msgnum; + off_t size; + time_t mtime; + time_t date_t; + MsgFlags flags; + + gchar *fromname; + + gchar *date; + gchar *from; + gchar *to; + gchar *newsgroups; + gchar *subject; + gchar *msgid; + gchar *inreplyto; + + FolderItem *folder; + FolderItem *to_folder; + + gchar *xface; + + /* used only for encrypted messages */ + gchar *plaintext_file; + guint decryption_failed : 1; +}; + +GHashTable *procmsg_msg_hash_table_create (GSList *mlist); +void procmsg_msg_hash_table_append (GHashTable *msg_table, + GSList *mlist); +GHashTable *procmsg_to_folder_hash_table_create (GSList *mlist); + +GSList *procmsg_read_cache (FolderItem *item, + gboolean scan_file); +void procmsg_set_flags (GSList *mlist, + FolderItem *item); +gint procmsg_get_last_num_in_cache (GSList *mlist); +void procmsg_write_cache (MsgInfo *msginfo, + FILE *fp); +void procmsg_write_flags (MsgInfo *msginfo, + FILE *fp); +void procmsg_get_mark_sum (const gchar *folder, + gint *new, + gint *unread, + gint *total); +FILE *procmsg_open_mark_file (const gchar *folder, + gboolean append); + +void procmsg_move_messages (GSList *mlist); +void procmsg_copy_messages (GSList *mlist); + +gchar *procmsg_get_message_file_path (MsgInfo *msginfo); +gchar *procmsg_get_message_file (MsgInfo *msginfo); +FILE *procmsg_open_message (MsgInfo *msginfo); +gboolean procmsg_msg_exist (MsgInfo *msginfo); + +void procmsg_empty_trash (void); +gint procmsg_send_queue (void); +void procmsg_print_message (MsgInfo *msginfo, + const gchar *cmdline); + +MsgInfo *procmsg_msginfo_copy (MsgInfo *msginfo); +void procmsg_msginfo_free (MsgInfo *msginfo); + +gint procmsg_cmp_msgnum_for_sort (gconstpointer a, + gconstpointer b); + +#endif /* __PROCMSG_H__ */ diff --git a/src/progressdialog.c b/src/progressdialog.c new file mode 100644 index 000000000..eeab75be8 --- /dev/null +++ b/src/progressdialog.c @@ -0,0 +1,111 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkprogressbar.h> +#include <gtk/gtkbutton.h> + +#include "intl.h" +#include "progressdialog.h" +#include "gtkutils.h" +#include "utils.h" + +ProgressDialog *progress_dialog_create(void) +{ + ProgressDialog *progress; + GtkWidget *window; + GtkWidget *vbox; + GtkWidget *hbox; + GtkWidget *label; + GtkWidget *cancel_btn; + GtkWidget *cancel_area; + GtkWidget *progressbar; + + debug_print(_("Creating progress dialog...\n")); + progress = g_new0(ProgressDialog, 1); + + window = gtk_window_new(GTK_WINDOW_DIALOG); + gtk_widget_set_usize(window, 400, -1); + gtk_container_set_border_width(GTK_CONTAINER(window), 8); + gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_modal(GTK_WINDOW(window), TRUE); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); + + vbox = gtk_vbox_new(FALSE, 8); + gtk_container_add(GTK_CONTAINER(window), vbox); + gtk_widget_show(vbox); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 8); + gtk_widget_show(hbox); + + label = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 8); + gtk_widget_show(label); + + gtkut_button_set_create(&cancel_area, &cancel_btn, _("Cancel"), + NULL, NULL, NULL, NULL); + gtk_box_pack_end(GTK_BOX(vbox), cancel_area, FALSE, FALSE, 0); + gtk_widget_grab_default(cancel_btn); + gtk_widget_show_all(cancel_area); + + progressbar = gtk_progress_bar_new(); + gtk_box_pack_end(GTK_BOX(vbox), progressbar, FALSE, FALSE, 0); + gtk_widget_show(progressbar); + + progress->window = window; + progress->label = label; + progress->cancel_btn = cancel_btn; + progress->progressbar = progressbar; + + return progress; +} + +void progress_dialog_set_label(ProgressDialog *progress, gchar *str) +{ + gtk_label_set_text(GTK_LABEL(progress->label), str); +} + +void progress_dialog_set_value(ProgressDialog *progress, gfloat value) +{ + gtk_progress_set_value(GTK_PROGRESS(progress->progressbar), value); +} + +void progress_dialog_set_percentage(ProgressDialog *progress, + gfloat percentage) +{ + gtk_progress_set_percentage(GTK_PROGRESS(progress->progressbar), + percentage); +} + +void progress_dialog_destroy(ProgressDialog *progress) +{ + if (progress) { + gtk_widget_destroy(progress->window); + g_free(progress); + } +} diff --git a/src/progressdialog.h b/src/progressdialog.h new file mode 100644 index 000000000..784c9bfa2 --- /dev/null +++ b/src/progressdialog.h @@ -0,0 +1,44 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __PROGRESS_H__ +#define __PROGRESS_H__ + +#include <gtk/gtkwidget.h> + +typedef struct _ProgressDialog ProgressDialog; + +struct _ProgressDialog +{ + GtkWidget *window; + GtkWidget *label; + GtkWidget *cancel_btn; + GtkWidget *progressbar; +}; + +ProgressDialog *progress_dialog_create (void); +void progress_dialog_set_label (ProgressDialog *progress, + gchar *str); +void progress_dialog_set_value (ProgressDialog *progress, + gfloat value); +void progress_dialog_set_percentage (ProgressDialog *progress, + gfloat percentage); +void progress_dialog_destroy (ProgressDialog *progress); + +#endif /* __PROGRESS_H__ */ diff --git a/src/recv.c b/src/recv.c new file mode 100644 index 000000000..e444a6d07 --- /dev/null +++ b/src/recv.c @@ -0,0 +1,188 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + +#include "intl.h" +#include "recv.h" +#include "socket.h" +#include "utils.h" + +#define BUFFSIZE 8192 + +gint recv_write_to_file(gint sock, const gchar *filename) +{ + FILE *fp; + + g_return_val_if_fail(filename != NULL, -1); + + if ((fp = fopen(filename, "w")) == NULL) { + FILE_OP_ERROR(filename, "fopen"); + recv_write(sock, NULL); + return -1; + } + + if (change_file_mode_rw(fp, filename) < 0) + FILE_OP_ERROR(filename, "chmod"); + + if (recv_write(sock, fp) < 0) { + fclose(fp); + unlink(filename); + return -1; + } + + if (fclose(fp) == EOF) { + FILE_OP_ERROR(filename, "fclose"); + unlink(filename); + return -1; + } + + return 0; +} + +gint recv_bytes_write_to_file(gint sock, glong size, const gchar *filename) +{ + FILE *fp; + + g_return_val_if_fail(filename != NULL, -1); + + if ((fp = fopen(filename, "w")) == NULL) { + FILE_OP_ERROR(filename, "fopen"); + recv_write(sock, NULL); + return -1; + } + + if (change_file_mode_rw(fp, filename) < 0) + FILE_OP_ERROR(filename, "chmod"); + + if (recv_bytes_write(sock, size, fp) < 0) { + fclose(fp); + unlink(filename); + return -1; + } + + if (fclose(fp) == EOF) { + FILE_OP_ERROR(filename, "fclose"); + unlink(filename); + return -1; + } + + return 0; +} + +gint recv_write(gint sock, FILE *fp) +{ + gchar buf[BUFFSIZE]; + gint len; + gboolean nb; + + nb = sock_is_nonblocking_mode(sock); + if (nb) sock_set_nonblocking_mode(sock, FALSE); + + for (;;) { + if (sock_read(sock, buf, sizeof(buf)) < 0) { + g_warning(_("error occurred while retrieving data.\n")); + if (nb) sock_set_nonblocking_mode(sock, TRUE); + return -1; + } + + len = strlen(buf); + if (len > 1 && buf[0] == '.' && buf[1] == '\r') break; + + if (len > 1 && buf[len - 1] == '\n' && buf[len - 2] == '\r') { + buf[len - 2] = '\n'; + buf[len - 1] = '\0'; + } + + if (buf[0] == '.' && buf[1] == '.') + memmove(buf, buf + 1, strlen(buf)); + + if (!strncmp(buf, ">From ", 6)) + memmove(buf, buf + 1, strlen(buf)); + + if (fp && fputs(buf, fp) == EOF) { + perror("fputs"); + g_warning(_("Can't write to file.\n")); + fp = NULL; + } + } + + if (nb) sock_set_nonblocking_mode(sock, TRUE); + + if (!fp) return -1; + + return 0; +} + +gint recv_bytes_write(gint sock, glong size, FILE *fp) +{ + gchar *buf; + gboolean nb; + glong count = 0; + gchar *prev, *cur; + + nb = sock_is_nonblocking_mode(sock); + if (nb) sock_set_nonblocking_mode(sock, FALSE); + + Xalloca(buf, size, return -1); + + do { + size_t read_count; + + read_count = read(sock, buf + count, size - count); + if (read_count < 0) { + if (nb) sock_set_nonblocking_mode(sock, TRUE); + return -1; + } + count += read_count; + } while (count < size); + + prev = buf; + while ((cur = memchr(prev, '\r', size)) != NULL) { + if (cur - buf + 1 < size && *(cur + 1) == '\n') { + if (fwrite(prev, sizeof(gchar), cur - prev, fp) == EOF || + fwrite("\n", sizeof(gchar), 1, fp) == EOF) { + perror("fwrite"); + g_warning(_("Can't write to file.\n")); + if (nb) sock_set_nonblocking_mode(sock, TRUE); + return -1; + } + prev = cur + 2; + if (prev - buf >= size) break; + } + } + + if (prev - buf < size && fwrite(buf, sizeof(gchar), + size - (prev - buf), fp) == EOF) { + perror("fwrite"); + g_warning(_("Can't write to file.\n")); + if (nb) sock_set_nonblocking_mode(sock, TRUE); + return -1; + } + + if (nb) sock_set_nonblocking_mode(sock, TRUE); + return 0; +} diff --git a/src/recv.h b/src/recv.h new file mode 100644 index 000000000..e6980a663 --- /dev/null +++ b/src/recv.h @@ -0,0 +1,30 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __RECV_H__ +#define __RECV_H__ + +#include <glib.h> + +gint recv_write_to_file(gint sock, const gchar *filename); +gint recv_bytes_write_to_file(gint sock, glong size, const gchar *filename); +gint recv_write(gint sock, FILE *fp); +gint recv_bytes_write(gint sock, glong size, FILE *fp); + +#endif /* __RECV_H__ */ diff --git a/src/rfc2015.c b/src/rfc2015.c new file mode 100644 index 000000000..d064ec541 --- /dev/null +++ b/src/rfc2015.c @@ -0,0 +1,1155 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 2001 Werner Koch (dd9jn) + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#ifdef USE_GPGME + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <locale.h> +#include <ctype.h> + +#include <gpgme.h> + +#include "intl.h" +#include "procmime.h" +#include "procheader.h" +#include "base64.h" +#include "uuencode.h" +#include "unmime.h" +#include "codeconv.h" +#include "utils.h" +#include "prefs_common.h" +#include "passphrase.h" +#include "select-keys.h" +#include "rfc2015.h" + +#define DIM(v) (sizeof(v)/sizeof((v)[0])) + +static char *content_names[] = { + "Content-Type", + "Content-Disposition", + "Content-Transfer-Encoding", + NULL +}; + +static char *mime_version_name[] = { + "Mime-Version", + NULL +}; + + +struct passphrase_cb_info_s { + GpgmeCtx c; + int did_it; +}; + +static char *create_boundary (void); + +static void dump_mimeinfo (const char *text, MimeInfo *x) +{ + g_message ("** MimeInfo[%s] %p level=%d", + text, x, x? x->level:0 ); + if (!x) + return; + + g_message ("** enc=`%s' enc_type=%d mime_type=%d", + x->encoding, x->encoding_type, x->mime_type ); + g_message ("** cont_type=`%s' cs=`%s' name=`%s' bnd=`%s'", + x->content_type, x->charset, x->name, x->boundary ); + g_message ("** cont_disp=`%s' fname=`%s' fpos=%ld size=%u, lvl=%d", + x->content_disposition, x->filename, x->fpos, x->size, + x->level ); + dump_mimeinfo (".main", x->main ); + dump_mimeinfo (".sub", x->sub ); + dump_mimeinfo (".next", x->next ); + g_message ("** MimeInfo[.parent] %p", x ); + dump_mimeinfo (".children", x->children ); + dump_mimeinfo (".plaintext", x->plaintext ); +} + +static void dump_part ( MimeInfo *mimeinfo, FILE *fp ) +{ + unsigned int size = mimeinfo->size; + int c; + + if (fseek (fp, mimeinfo->fpos, SEEK_SET)) { + g_warning ("dump_part: fseek error"); + return; + } + + g_message ("** --- begin dump_part ----"); + while (size-- && (c = getc (fp)) != EOF) + putc (c, stderr); + if (ferror (fp)) + g_warning ("dump_part: read error"); + g_message ("** --- end dump_part ----"); +} + +void +rfc2015_disable_all (void) +{ + /* FIXME: set a flag, so that we don't bother the user with failed + * gpgme messages */ +} + + +void +rfc2015_secure_remove (const char *fname) +{ + if (!fname) + return; + /* fixme: overwrite the file first */ + remove (fname); +} + + +static const gchar * +sig_status_to_string (GpgmeSigStat status) +{ + const gchar *result; + + switch (status) { + case GPGME_SIG_STAT_NONE: + result = _("Oops: Signature not verified"); + break; + case GPGME_SIG_STAT_NOSIG: + result = _("No signature found"); + break; + case GPGME_SIG_STAT_GOOD: + result = _("Good signature"); + break; + case GPGME_SIG_STAT_BAD: + result = _("BAD signature"); + break; + case GPGME_SIG_STAT_NOKEY: + result = _("No public key to verify the signature"); + break; + case GPGME_SIG_STAT_ERROR: + result = _("Error verifying the signature"); + break; + case GPGME_SIG_STAT_DIFF: + result = _("Different results for signatures"); + break; + default: + result = _("Error: Unknown status"); + break; + } + + return result; +} + +static const gchar * +sig_status_with_name (GpgmeSigStat status) +{ + const gchar *result; + + switch (status) { + case GPGME_SIG_STAT_NONE: + result = _("Oops: Signature not verified"); + break; + case GPGME_SIG_STAT_NOSIG: + result = _("No signature found"); + break; + case GPGME_SIG_STAT_GOOD: + result = _("Good signature from \"%s\""); + break; + case GPGME_SIG_STAT_BAD: + result = _("BAD signature from \"%s\""); + break; + case GPGME_SIG_STAT_NOKEY: + result = _("No public key to verify the signature"); + break; + case GPGME_SIG_STAT_ERROR: + result = _("Error verifying the signature"); + break; + case GPGME_SIG_STAT_DIFF: + result = _("Different results for signatures"); + break; + default: + result = _("Error: Unknown status"); + break; + } + + return result; +} + +static void +sig_status_for_key(GString *str, GpgmeCtx ctx, GpgmeSigStat status, + GpgmeKey key, const gchar *fpr) +{ + gint idx = 0; + const char *uid; + + uid = gpgme_key_get_string_attr (key, GPGME_ATTR_USERID, NULL, idx); + if (uid == NULL) { + g_string_sprintfa (str, "%s\n", + sig_status_to_string (status)); + if ((fpr != NULL) && (*fpr != '\0')) + g_string_sprintfa (str, "Key fingerprint: %s\n", fpr); + g_string_append (str, _("Cannot find user ID for this key.")); + return; + } + g_string_sprintfa (str, sig_status_with_name (status), uid); + g_string_append (str, "\n"); + + while (1) { + uid = gpgme_key_get_string_attr (key, GPGME_ATTR_USERID, + NULL, ++idx); + if (uid == NULL) + break; + g_string_sprintfa (str, _(" aka \"%s\"\n"), + uid); + } +} + +static gchar * +sig_status_full (GpgmeCtx ctx) +{ + GString *str; + gint sig_idx = 0; + GpgmeError err; + GpgmeSigStat status; + GpgmeKey key; + const char *fpr; + time_t created; + struct tm *ctime_val; + char ctime_str[80]; + gchar *retval; + + str = g_string_new (""); + + fpr = gpgme_get_sig_status (ctx, sig_idx, &status, &created); + while (fpr != NULL) { + if (created != 0) { + ctime_val = localtime (&created); + strftime (ctime_str, sizeof (ctime_str), "%c", + ctime_val); + g_string_sprintfa (str, + _("Signature made %s\n"), + ctime_str); + } + err = gpgme_get_sig_key (ctx, sig_idx, &key); + if (err != 0) { + g_string_sprintfa (str, "%s\n", + sig_status_to_string (status)); + if ((fpr != NULL) && (*fpr != '\0')) + g_string_sprintfa (str, + _("Key fingerprint: %s\n"), + fpr); + } else { + sig_status_for_key (str, ctx, status, key, fpr); + gpgme_key_unref (key); + } + g_string_append (str, "\n\n"); + + fpr = gpgme_get_sig_status (ctx, ++sig_idx, &status, &created); + } + + retval = str->str; + g_string_free (str, FALSE); + return retval; +} + +static void check_signature (MimeInfo *mimeinfo, MimeInfo *partinfo, FILE *fp) +{ + GpgmeCtx ctx = NULL; + GpgmeError err; + GpgmeData sig = NULL, text = NULL; + GpgmeSigStat status = GPGME_SIG_STAT_NONE; + const char *result = NULL; + + err = gpgme_new (&ctx); + if (err) { + g_warning ("gpgme_new failed: %s", gpgme_strerror (err)); + goto leave; + } + + /* don't include the last character (LF). It does not belong to the + * signed text */ + err = gpgme_data_new_from_filepart (&text, NULL, fp, + mimeinfo->children->fpos, + mimeinfo->children->size ? + (mimeinfo->children->size - 1) : 0 ); + if (!err) + err = gpgme_data_new_from_filepart (&sig, NULL, fp, + partinfo->fpos, partinfo->size); + if (err) { + g_message ("gpgme_data_new_from_filepart failed: %s", + gpgme_strerror (err)); + goto leave; + } + + err = gpgme_op_verify (ctx, sig, text, &status); + if (err) + g_message ("gpgme_op_verify failed: %s", gpgme_strerror (err)); + + g_free (partinfo->sigstatus_full); + partinfo->sigstatus_full = sig_status_full (ctx); + +leave: + result = sig_status_to_string(status); + debug_print("verification status: %s\n", result); + + g_assert (!err); + g_free (partinfo->sigstatus); + partinfo->sigstatus = g_strdup (result); + + gpgme_data_release (sig); + gpgme_data_release (text); + gpgme_release (ctx); +} + +static const char * +passphrase_cb (void *opaque, const char *desc, void *r_hd) +{ + struct passphrase_cb_info_s *info = opaque; + GpgmeCtx ctx = info ? info->c : NULL; + const char *pass; + + if (!desc) { + /* FIXME: cleanup by looking at *r_hd */ + return NULL; + } + + gpgmegtk_set_passphrase_grab (prefs_common.passphrase_grab); + g_message ("%% requesting passphrase for `%s': ", desc ); + pass = gpgmegtk_passphrase_mbox (desc); + if (!pass) { + g_message ("%% cancel passphrase entry"); + gpgme_cancel (ctx); + } + else + g_message ("%% sending passphrase"); + + return pass; +} + +/* + * Copy a gpgme data object to a temporary file and + * return this filename + */ +static char * +copy_gpgmedata_to_temp (GpgmeData data, guint *length) +{ + static int id; + char *tmp; + FILE *fp; + char buf[100]; + size_t nread; + GpgmeError err; + + tmp = g_strdup_printf("%s%cgpgtmp.%08x", + get_mime_tmp_dir(), G_DIR_SEPARATOR, ++id ); + + if ((fp = fopen(tmp, "w")) == NULL) { + FILE_OP_ERROR(tmp, "fopen"); + g_free(tmp); + return NULL; + } + + err = gpgme_data_rewind ( data ); + if (err) + g_message ("** gpgme_data_rewind failed: %s", gpgme_strerror (err)); + + while (!(err = gpgme_data_read (data, buf, 100, &nread))) { + fwrite ( buf, nread, 1, fp ); + } + + if (err != GPGME_EOF) + g_warning ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + + fclose (fp); + *length = nread; + + return tmp; +} + +static GpgmeData +pgp_decrypt (MimeInfo *partinfo, FILE *fp) +{ + GpgmeCtx ctx = NULL; + GpgmeError err; + GpgmeData cipher = NULL, plain = NULL; + struct passphrase_cb_info_s info; + + memset (&info, 0, sizeof info); + + err = gpgme_new (&ctx); + if (err) { + g_message ("gpgme_new failed: %s", gpgme_strerror (err)); + goto leave; + } + + err = gpgme_data_new_from_filepart (&cipher, NULL, fp, + partinfo->fpos, partinfo->size); + if (err) { + g_message ("gpgme_data_new_from_filepart failed: %s", + gpgme_strerror (err)); + goto leave; + } + + err = gpgme_data_new (&plain); + if (err) { + g_message ("gpgme_new failed: %s", gpgme_strerror (err)); + goto leave; + } + + if (!getenv("GPG_AGENT_INFO")) { + info.c = ctx; + gpgme_set_passphrase_cb (ctx, passphrase_cb, &info); + } + + err = gpgme_op_decrypt (ctx, cipher, plain); + +leave: + gpgme_data_release (cipher); + if (err) { + g_warning ("** decryption failed: %s", gpgme_strerror (err)); + gpgme_data_release (plain); + plain = NULL; + } + else + g_message ("** decryption succeeded"); + + gpgme_release (ctx); + return plain; +} + +MimeInfo * rfc2015_find_signature (MimeInfo *mimeinfo) +{ + MimeInfo *partinfo; + int n = 0; + + if (!mimeinfo) + return NULL; + if (g_strcasecmp (mimeinfo->content_type, "multipart/signed")) + return NULL; + + g_message ("** multipart/signed encountered"); + + /* check that we have at least 2 parts of the correct type */ + for (partinfo = mimeinfo->children; + partinfo != NULL; partinfo = partinfo->next) { + if (++n > 1 && !g_strcasecmp (partinfo->content_type, + "application/pgp-signature")) + break; + } + + return partinfo; +} + +gboolean rfc2015_has_signature (MimeInfo *mimeinfo) +{ + return rfc2015_find_signature (mimeinfo) != NULL; +} + +void rfc2015_check_signature (MimeInfo *mimeinfo, FILE *fp) +{ + MimeInfo *partinfo; + + partinfo = rfc2015_find_signature (mimeinfo); + if (!partinfo) + return; + +#if 0 + g_message ("** yep, it is a pgp signature"); + dump_mimeinfo ("gpg-signature", partinfo ); + dump_part (partinfo, fp ); + dump_mimeinfo ("signed text", mimeinfo->children ); + dump_part (mimeinfo->children, fp); +#endif + + check_signature (mimeinfo, partinfo, fp); +} + +int rfc2015_is_encrypted (MimeInfo *mimeinfo) +{ + if (!mimeinfo) + return 0; + if (strcasecmp (mimeinfo->content_type, "multipart/encrypted")) + return 0; + /* fixme: we should schek the protocol parameter */ + return 1; +} + +static int +name_cmp(const char *a, const char *b) +{ + for( ; *a && *b; a++, b++) { + if(*a != *b + && toupper(*(unsigned char *)a) != toupper(*(unsigned char *)b)) + return 1; + } + + return *a != *b; +} + +static int +headerp(char *p, char **names) +{ + int i, c; + char *p2; + + p2 = strchr(p, ':'); + if(!p2 || p == p2) { + return 0; + } + if(p2[-1] == ' ' || p2[-1] == '\t') { + return 0; + } + + if(!names[0]) + return 1; + + c = *p2; + *p2 = 0; + for(i = 0 ; names[i] != NULL; i++) { + if(!name_cmp (names[i], p)) + break; + } + *p2 = c; + + return names[i] != NULL; +} + + +void rfc2015_decrypt_message (MsgInfo *msginfo, MimeInfo *mimeinfo, FILE *fp) +{ + static int id; + MimeInfo *partinfo; + int n, found; + int ver_okay=0; + char *fname; + GpgmeData plain; + FILE *dstfp; + size_t nread; + char buf[BUFFSIZE]; + GpgmeError err; + + g_return_if_fail (mimeinfo->mime_type == MIME_MULTIPART); + + g_message ("** multipart/encrypted encountered"); + + /* skip headers */ + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) + perror("fseek"); + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + + procmime_scan_multipart_message(mimeinfo, fp); + + /* check that we have the 2 parts */ + n = found = 0; + for (partinfo = mimeinfo->children; partinfo; partinfo = partinfo->next) { + if (++n == 1 && !strcmp (partinfo->content_type, + "application/pgp-encrypted")) { + /* Fixme: check that the version is 1 */ + ver_okay = 1; + } + else if (n == 2 && !strcmp (partinfo->content_type, + "application/octet-stream")) { + if (partinfo->next) + g_warning ("** oops: pgp_encrypted with more than 2 parts"); + break; + } + } + + if (!ver_okay || !partinfo) { + msginfo->decryption_failed = 1; + /* fixme: remove the stuff, that the above procmime_scan_multiparts() + * has appended to mimeino */ + return; + } + + g_message ("** yep, it is pgp encrypted"); + + plain = pgp_decrypt (partinfo, fp); + if (!plain) { + msginfo->decryption_failed = 1; + return; + } + + fname = g_strdup_printf("%s%cplaintext.%08x", + get_mime_tmp_dir(), G_DIR_SEPARATOR, ++id); + + if ((dstfp = fopen(fname, "w")) == NULL) { + FILE_OP_ERROR(fname, "fopen"); + g_free(fname); + msginfo->decryption_failed = 1; + return; + } + + /* write the orginal header to the new file */ + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) + perror("fseek"); + + while (fgets(buf, sizeof(buf), fp)) { + if (headerp (buf, content_names)) + continue; + if (buf[0] == '\r' || buf[0] == '\n') + break; + fputs (buf, dstfp); + } + + err = gpgme_data_rewind (plain); + if (err) + g_message ("** gpgme_data_rewind failed: %s", gpgme_strerror (err)); + + while (!(err = gpgme_data_read (plain, buf, sizeof(buf), &nread))) { + fwrite (buf, nread, 1, dstfp); + } + + if (err != GPGME_EOF) { + g_warning ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + } + + fclose (dstfp); + + msginfo->plaintext_file = fname; + msginfo->decryption_failed = 0; +} + + +/* + * plain contains an entire mime object. + * Encrypt it and return an GpgmeData object with the encrypted version of + * the file or NULL in case of error. + */ +static GpgmeData +pgp_encrypt ( GpgmeData plain, GpgmeRecipients rset ) +{ + GpgmeCtx ctx = NULL; + GpgmeError err; + GpgmeData cipher = NULL; + + err = gpgme_new (&ctx); + if (!err) + err = gpgme_data_new (&cipher); + if (!err) { + gpgme_set_armor (ctx, 1); + err = gpgme_op_encrypt (ctx, rset, plain, cipher); + } + + if (err) { + g_warning ("** encryption failed: %s", gpgme_strerror (err)); + gpgme_data_release (cipher); + cipher = NULL; + } + else { + g_message ("** encryption succeeded"); + } + + gpgme_release (ctx); + return cipher; +} + + +/* + * Encrypt the file by extracting all recipients and finding the + * encryption keys for all of them. The file content is then replaced + * by the encrypted one. */ +int +rfc2015_encrypt (const char *file, GSList *recp_list) +{ + FILE *fp = NULL; + char buf[BUFFSIZE]; + int i, clineidx, saved_last; + char *clines[3] = {NULL}; + GpgmeError err; + GpgmeData header = NULL; + GpgmeData plain = NULL; + GpgmeData cipher = NULL; + GpgmeRecipients rset = NULL; + size_t nread; + int mime_version_seen = 0; + char *boundary = create_boundary (); + + /* Create the list of recipients */ + rset = gpgmegtk_recipient_selection (recp_list); + if (!rset) { + g_warning ("error creating recipient list" ); + goto failure; + } + + /* Open the source file */ + if ((fp = fopen(file, "rb")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + goto failure; + } + + err = gpgme_data_new (&header); + if (!err) + err = gpgme_data_new (&plain); + if (err) { + g_message ("gpgme_data_new failed: %s", gpgme_strerror (err)); + goto failure; + } + + /* get the content header lines from the source */ + clineidx=0; + saved_last = 0; + while (!err && fgets(buf, sizeof(buf), fp)) { + /* fixme: check for overlong lines */ + if (headerp (buf, content_names)) { + if (clineidx >= DIM (clines)) { + g_message ("rfc2015_encrypt: too many content lines"); + goto failure; + } + clines[clineidx++] = g_strdup (buf); + saved_last = 1; + continue; + } + if (saved_last) { + saved_last = 0; + if (*buf == ' ' || *buf == '\t') { + char *last = clines[clineidx-1]; + clines[clineidx-1] = g_strconcat (last, buf, NULL); + g_free (last); + continue; + } + } + + if (headerp (buf, mime_version_name)) + mime_version_seen = 1; + + if (buf[0] == '\r' || buf[0] == '\n') + break; + err = gpgme_data_write (header, buf, strlen (buf)); + } + if (ferror (fp)) { + FILE_OP_ERROR (file, "fgets"); + goto failure; + } + + /* write them to the temp data and add the rest of the message */ + for (i = 0; !err && i < clineidx; i++) { + g_message ("%% %s:%d: cline=`%s'", __FILE__ ,__LINE__, clines[i]); + err = gpgme_data_write (plain, clines[i], strlen (clines[i])); + } + if (!err) + err = gpgme_data_write (plain, "\r\n", 2); + while (!err && fgets(buf, sizeof(buf), fp)) { + err = gpgme_data_write (plain, buf, strlen (buf)); + } + if (ferror (fp)) { + FILE_OP_ERROR (file, "fgets"); + goto failure; + } + if (err) { + g_warning ("** gpgme_data_write failed: %s", gpgme_strerror (err)); + goto failure; + } + + cipher = pgp_encrypt (plain, rset); + gpgme_data_release (plain); plain = NULL; + gpgme_recipients_release (rset); rset = NULL; + if (!cipher) + goto failure; + + /* we have the encrypted message available in cipher and now we + * are going to rewrite the source file. To be sure that file has + * been truncated we use an approach which should work everywhere: + * close the file and then reopen it for writing. It is important + * that this works, otherwise it may happen that parts of the + * plaintext are still in the file (The encrypted stuff is, due to + * compression, usually shorter than the plaintext). + * + * Yes, there is a race condition here, but everyone, who is so + * stupid to store the temp file with the plaintext in a public + * directory has to live with this anyway. */ + if (fclose (fp)) { + FILE_OP_ERROR(file, "fclose"); + goto failure; + } + if ((fp = fopen(file, "wb")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + goto failure; + } + + /* Write the header, append new content lines, part 1 and part 2 header */ + err = gpgme_data_rewind (header); + if (err) { + g_message ("gpgme_data_rewind failed: %s", gpgme_strerror (err)); + goto failure; + } + while (!(err = gpgme_data_read (header, buf, BUFFSIZE, &nread))) { + fwrite (buf, nread, 1, fp); + } + if (err != GPGME_EOF) { + g_warning ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + goto failure; + } + if (ferror (fp)) { + FILE_OP_ERROR (file, "fwrite"); + goto failure; + } + gpgme_data_release (header); header = NULL; + + if (!mime_version_seen) + fputs ("MIME-Version: 1\r\n", fp); + + fprintf (fp, + "Content-Type: multipart/encrypted;" + " protocol=\"application/pgp-encrypted\";\r\n" + " boundary=\"%s\"\r\n" + "\r\n" + "--%s\r\n" + "Content-Type: application/pgp-encrypted\r\n" + "\r\n" + "Version: 1\r\n" + "\r\n" + "--%s\r\n" + "Content-Type: application/octet-stream\r\n" + "\r\n", + boundary, boundary, boundary); + + /* append the encrypted stuff */ + err = gpgme_data_rewind (cipher); + if (err) { + g_warning ("** gpgme_data_rewind on cipher failed: %s", + gpgme_strerror (err)); + goto failure; + } + + while (!(err = gpgme_data_read (cipher, buf, BUFFSIZE, &nread))) { + fwrite (buf, nread, 1, fp); + } + if (err != GPGME_EOF) { + g_warning ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + goto failure; + } + + /* and the final boundary */ + fprintf (fp, + "\r\n" + "--%s--\r\n" + "\r\n", + boundary); + fflush (fp); + if (ferror (fp)) { + FILE_OP_ERROR (file, "fwrite"); + goto failure; + } + fclose (fp); + gpgme_data_release (cipher); + return 0; + +failure: + if (fp) + fclose (fp); + gpgme_data_release (header); + gpgme_data_release (plain); + gpgme_data_release (cipher); + gpgme_recipients_release (rset); + g_free (boundary); + return -1; /* error */ +} + +/* + * plain contains an entire mime object. Sign it and return an + * GpgmeData object with the signature of it or NULL in case of error. + */ +static GpgmeData +pgp_sign (GpgmeData plain) +{ + GpgmeCtx ctx = NULL; + GpgmeError err; + GpgmeData sig = NULL; + struct passphrase_cb_info_s info; + + memset (&info, 0, sizeof info); + + err = gpgme_new (&ctx); + if (err) + goto leave; + err = gpgme_data_new (&sig); + if (err) + goto leave; + + if (!getenv("GPG_AGENT_INFO")) { + info.c = ctx; + gpgme_set_passphrase_cb (ctx, passphrase_cb, &info); + } + gpgme_set_textmode (ctx, 1); + gpgme_set_armor (ctx, 1); + err = gpgme_op_sign (ctx, plain, sig, GPGME_SIG_MODE_DETACH); + +leave: + if (err) { + g_message ("** signing failed: %s", gpgme_strerror (err)); + gpgme_data_release (sig); + sig = NULL; + } + else { + g_message ("** signing succeeded"); + } + + gpgme_release (ctx); + return sig; +} + +/* + * Sign the file and replace its content with the signed one. + */ +int +rfc2015_sign (const char *file) +{ + FILE *fp = NULL; + char buf[BUFFSIZE]; + int i, clineidx, saved_last; + char *clines[3] = {NULL}; + GpgmeError err; + GpgmeData header = NULL; + GpgmeData plain = NULL; + GpgmeData sigdata = NULL; + size_t nread; + int mime_version_seen = 0; + char *boundary = create_boundary (); + + /* Open the source file */ + if ((fp = fopen(file, "rb")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + goto failure; + } + + err = gpgme_data_new (&header); + if (!err) + err = gpgme_data_new (&plain); + if (err) { + g_message ("gpgme_data_new failed: %s", gpgme_strerror (err)); + goto failure; + } + + /* get the content header lines from the source */ + clineidx = 0; + saved_last = 0; + while (!err && fgets(buf, sizeof(buf), fp)) { + /* fixme: check for overlong lines */ + if (headerp (buf, content_names)) { + if (clineidx >= DIM (clines)) { + g_message ("rfc2015_sign: too many content lines"); + goto failure; + } + clines[clineidx++] = g_strdup (buf); + saved_last = 1; + continue; + } + if (saved_last) { + saved_last = 0; + if (*buf == ' ' || *buf == '\t') { + char *last = clines[clineidx - 1]; + clines[clineidx - 1] = g_strconcat (last, buf, NULL); + g_free (last); + continue; + } + } + + if (headerp (buf, mime_version_name)) + mime_version_seen = 1; + + if (buf[0] == '\r' || buf[0] == '\n') + break; + err = gpgme_data_write (header, buf, strlen (buf)); + } + if (ferror (fp)) { + FILE_OP_ERROR (file, "fgets"); + goto failure; + } + + /* write them to the temp data and add the rest of the message */ + for (i = 0; !err && i < clineidx; i++) { + err = gpgme_data_write (plain, clines[i], strlen (clines[i])); + } + if (!err) + err = gpgme_data_write (plain, "\r\n", 2 ); + while (!err && fgets(buf, sizeof(buf), fp)) { + err = gpgme_data_write (plain, buf, strlen (buf)); + } + if (ferror (fp)) { + FILE_OP_ERROR (file, "fgets"); + goto failure; + } + if (err) { + g_message ("** gpgme_data_write failed: %s", gpgme_strerror (err)); + goto failure; + } + + sigdata = pgp_sign (plain); + if (!sigdata) + goto failure; + + /* we have the signed message available in sigdata and now we are + * going to rewrite the original file. To be sure that file has + * been truncated we use an approach which should work everywhere: + * close the file and then reopen it for writing. */ + if (fclose (fp)) { + FILE_OP_ERROR(file, "fclose"); + goto failure; + } + if ((fp = fopen(file, "wb")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + goto failure; + } + + /* Write the rfc822 header and add new content lines */ + err = gpgme_data_rewind (header); + if (err) + g_message ("** gpgme_data_rewind failed: %s", gpgme_strerror (err)); + while (!(err = gpgme_data_read (header, buf, BUFFSIZE, &nread))) { + fwrite (buf, nread, 1, fp); + } + if (err != GPGME_EOF) { + g_message ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + goto failure; + } + if (ferror (fp)) { + FILE_OP_ERROR (file, "fwrite"); + goto failure; + } + gpgme_data_release (header); + header = NULL; + + if (!mime_version_seen) + fputs ("MIME-Version: 1\r\n", fp); + fprintf (fp, "Content-Type: multipart/signed; " + "protocol=\"application/pgp-signature\";\r\n" + " boundary=\"%s\"\r\n", boundary ); + + /* Part 1: signed material */ + fprintf (fp, "\r\n--%s\r\n", boundary); + err = gpgme_data_rewind (plain); + if (err) { + g_message ("** gpgme_data_rewind on plain failed: %s", + gpgme_strerror (err)); + goto failure; + } + while (!(err = gpgme_data_read (plain, buf, BUFFSIZE, &nread))) { + fwrite (buf, nread, 1, fp); + } + if (err != GPGME_EOF) { + g_message ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + goto failure; + } + + /* Part 2: signature */ + fprintf (fp, "\r\n--%s\r\n", boundary); + fputs ("Content-Type: application/pgp-signature\r\n" + "\r\n", fp); + + err = gpgme_data_rewind (sigdata); + if (err) { + g_message ("** gpgme_data_rewind on sigdata failed: %s", + gpgme_strerror (err)); + goto failure; + } + + while (!(err = gpgme_data_read (sigdata, buf, BUFFSIZE, &nread))) { + fwrite (buf, nread, 1, fp); + } + if (err != GPGME_EOF) { + g_message ("** gpgme_data_read failed: %s", gpgme_strerror (err)); + goto failure; + } + + /* Final boundary */ + fprintf (fp, "\r\n--%s--\r\n\r\n", boundary); + fflush (fp); + if (ferror (fp)) { + FILE_OP_ERROR (file, "fwrite"); + goto failure; + } + fclose (fp); + gpgme_data_release (header); + gpgme_data_release (plain); + gpgme_data_release (sigdata); + g_free (boundary); + return 0; + +failure: + if (fp) + fclose (fp); + gpgme_data_release (header); + gpgme_data_release (plain); + gpgme_data_release (sigdata); + g_free (boundary); + return -1; /* error */ +} + + +/**************** + * Create a new boundary in a way that it is very unlikely that this + * will occur in the following text. It would be easy to ensure + * uniqueness if everything is either quoted-printable or base64 + * encoded (note that conversion is allowed), but because MIME bodies + * may be nested, it may happen that the same boundary has already + * been used. We avoid scanning the message for conflicts and hope the + * best. + * + * boundary := 0*69<bchars> bcharsnospace + * bchars := bcharsnospace / " " + * bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / + * "+" / "_" / "," / "-" / "." / + * "/" / ":" / "=" / "?" + */ + +static char * +create_boundary (void) +{ + static char tbl[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "1234567890'()+_,./:=?"; + char buf[17]; + int i, equal; + int pid; + + pid = getpid(); + + /* We make the boundary depend on the pid, so that all running + * processed generate different values even when they have been + * started within the same second and srand48(time(NULL)) has been + * used. I can't see whether this is really an advantage but it + * doesn't do any harm. + */ + equal = -1; + for(i = 0; i < sizeof(buf) - 1; i++) { + buf[i] = tbl[(lrand48() ^ pid) % (sizeof(tbl) - 1)]; /* fill with random */ + if(buf[i] == '=' && equal == -1) + equal = i; + } + buf[i] = 0; + + /* now make sure that we do have the sequence "=." in it which cannot + * be matched by quoted-printable or base64 encoding */ + if(equal != -1 && (equal+1) < i) + buf[equal+1] = '.'; + else { + buf[0] = '='; + buf[1] = '.'; + } + + return g_strdup(buf); +} + +#endif /* USE_GPGME */ diff --git a/src/rfc2015.h b/src/rfc2015.h new file mode 100644 index 000000000..6fd192111 --- /dev/null +++ b/src/rfc2015.h @@ -0,0 +1,37 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 2001 Werner Koch (dd9jn) + * + * 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. + */ + +#ifndef __RFC2015_H__ +#define __RFC2015_H__ + +#include <glib.h> +#include <stdio.h> + +#include "procmime.h" + +void rfc2015_secure_remove (const char *fname); +MimeInfo * rfc2015_find_signature (MimeInfo *mimeinfo); +gboolean rfc2015_has_signature (MimeInfo *mimeinfo); +void rfc2015_check_signature (MimeInfo *mimeinfo, FILE *fp); +int rfc2015_is_encrypted (MimeInfo *mimeinfo); +void rfc2015_decrypt_message (MsgInfo *msginfo, MimeInfo *mimeinfo, FILE *fp); +int rfc2015_encrypt (const char *file, GSList *recp_list); +int rfc2015_sign (const char *file); + +#endif /* __RFC2015_H__ */ diff --git a/src/rfc822.c b/src/rfc822.c new file mode 100644 index 000000000..766029ac2 --- /dev/null +++ b/src/rfc822.c @@ -0,0 +1,424 @@ +/* + * rfc822.c -- code for slicing and dicing RFC822 mail headers + * + * Copyright 1997 by Eric S. Raymond + * For license terms, see the file COPYING in this directory. + * + * Modified by Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> + */ + +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> +#include <glib.h> +#include "rfc822.h" + +/* output noise level */ +#define O_SILENT 0 /* mute, max squelch, etc. */ +#define O_NORMAL 1 /* user-friendly */ +#define O_VERBOSE 2 /* chatty */ +#define O_DEBUG 3 /* prolix */ +#define O_MONITOR O_VERBOSE + +static int outlevel = O_SILENT; + +#define POPBUFSIZE 512 /* max length of response (RFC1939) */ + +#define HEADER_END(p) ((p)[0] == '\n' && ((p)[1] != ' ' && (p)[1] != '\t')) + +#ifdef TESTMAIN +static int verbose; +char *program_name = "rfc822"; +#endif /* TESTMAIN */ + +char *reply_hack(buf, host) +/* hack message headers so replies will work properly */ +char *buf; /* header to be hacked */ +const char *host; /* server hostname */ +{ + char *from, *cp, last_nws = '\0', *parens_from = NULL; + int parendepth, state, has_bare_name_part, has_host_part; +#ifndef TESTMAIN + int addresscount = 1; +#endif /* TESTMAIN */ + + if (strncasecmp("From: ", buf, 6) + && strncasecmp("To: ", buf, 4) + && strncasecmp("Reply-To: ", buf, 10) + && strncasecmp("Return-Path: ", buf, 13) + && strncasecmp("Cc: ", buf, 4) + && strncasecmp("Bcc: ", buf, 5) + && strncasecmp("Resent-From: ", buf, 13) + && strncasecmp("Resent-To: ", buf, 11) + && strncasecmp("Resent-Cc: ", buf, 11) + && strncasecmp("Resent-Bcc: ", buf, 12) + && strncasecmp("Apparently-From:", buf, 16) + && strncasecmp("Apparently-To:", buf, 14) + && strncasecmp("Sender:", buf, 7) + && strncasecmp("Resent-Sender:", buf, 14) + ) { + return(buf); + } + +#ifndef TESTMAIN + if (outlevel >= O_DEBUG) + fprintf(stdout, "About to rewrite %s", buf); + + /* make room to hack the address; buf must be malloced */ + for (cp = buf; *cp; cp++) + if (*cp == ',' || isspace(*cp)) + addresscount++; + buf = (char *)g_realloc(buf, strlen(buf) + addresscount * strlen(host) + 1); +#endif /* TESTMAIN */ + + /* + * This is going to foo up on some ill-formed addresses. + * Note that we don't rewrite the fake address <> in order to + * avoid screwing up bounce suppression with a null Return-Path. + */ + + parendepth = state = 0; + has_host_part = has_bare_name_part = FALSE; + for (from = buf; *from; from++) + { +#ifdef TESTMAIN + if (verbose) + { + printf("state %d: %s", state, buf); + printf("%*s^\n", from - buf + 10, " "); + } +#endif /* TESTMAIN */ + if (state != 2) { + if (*from == '(') + ++parendepth; + else if (*from == ')') + --parendepth; + } + + if (!parendepth && !has_host_part) + switch (state) + { + case 0: /* before header colon */ + if (*from == ':') + state = 1; + break; + + case 1: /* we've seen the colon, we're looking for addresses */ + if (!isspace(*from)) + last_nws = *from; + if (*from == '<') + state = 3; + else if (*from == '@') + has_host_part = TRUE; + else if (*from == '"') + state = 2; + /* + * Not expanding on last non-WS == ';' deals with groupnames, + * an obscure misfeature described in sections + * 6.1, 6.2.6, and A.1.5 of the RFC822 standard. + */ + else if ((*from == ',' || HEADER_END(from)) + && has_bare_name_part + && !has_host_part + && last_nws != ';') + { + int hostlen; + char *p; + + p = from; + if (parens_from) + from = parens_from; + while (isspace(*from) || (*from == ',')) + --from; + from++; + hostlen = strlen(host); + for (cp = from + strlen(from); cp >= from; --cp) + cp[hostlen+1] = *cp; + *from++ = '@'; + memcpy(from, host, hostlen); + from = p + hostlen + 1; + has_host_part = TRUE; + } + else if (from[1] == '(' + && has_bare_name_part + && !has_host_part + && last_nws != ';' && last_nws != ')') + { + parens_from = from; + } + else if (!isspace(*from)) + has_bare_name_part = TRUE; + break; + + case 2: /* we're in a string */ + if (*from == '"') + state = 1; + break; + + case 3: /* we're in a <>-enclosed address */ + if (*from == '@') + has_host_part = TRUE; + else if (*from == '>' && from[-1] != '<') + { + state = 1; + if (!has_host_part) + { + int hostlen; + + hostlen = strlen(host); + for (cp = from + strlen(from); cp >= from; --cp) + cp[hostlen+1] = *cp; + *from++ = '@'; + memcpy(from, host, hostlen); + from += hostlen; + has_host_part = TRUE; + } + } + break; + } + + /* + * If we passed a comma, reset everything. + */ + if (from[-1] == ',' && !parendepth) { + has_host_part = has_bare_name_part = FALSE; + parens_from = NULL; + } + } + +#ifndef TESTMAIN + if (outlevel >= O_DEBUG) + fprintf(stdout, "Rewritten version is %s\n", buf); +#endif /* TESTMAIN */ + return(buf); +} + +char *nxtaddr(hdr) +/* parse addresses in succession out of a specified RFC822 header */ +const char *hdr; /* header to be parsed, NUL to continue previous hdr */ +{ + static char *tp, address[POPBUFSIZE+1]; + static const char *hp; + static int state, oldstate; +#ifdef TESTMAIN + static const char *orighdr; +#endif /* TESTMAIN */ + int parendepth = 0; + +#define START_HDR 0 /* before header colon */ +#define SKIP_JUNK 1 /* skip whitespace, \n, and junk */ +#define BARE_ADDRESS 2 /* collecting address without delimiters */ +#define INSIDE_DQUOTE 3 /* inside double quotes */ +#define INSIDE_PARENS 4 /* inside parentheses */ +#define INSIDE_BRACKETS 5 /* inside bracketed address */ +#define ENDIT_ALL 6 /* after last address */ + + if (hdr) + { + hp = hdr; + state = START_HDR; +#ifdef TESTMAIN + orighdr = hdr; +#endif /* TESTMAIN */ + tp = address; + } + + for (; *hp; hp++) + { +#ifdef TESTMAIN + if (verbose) + { + printf("state %d: %s", state, orighdr); + printf("%*s^\n", hp - orighdr + 10, " "); + } +#endif /* TESTMAIN */ + + if (state == ENDIT_ALL) /* after last address */ + return(NULL); + else if (HEADER_END(hp)) + { + state = ENDIT_ALL; + if (tp > address) + { + while (isspace(*--tp)) + continue; + *++tp = '\0'; + } + return(tp > address ? (tp = address) : (char *)NULL); + } + else if (*hp == '\\') /* handle RFC822 escaping */ + { + if (state != INSIDE_PARENS) + { + *tp++ = *hp++; /* take the escape */ + *tp++ = *hp; /* take following char */ + } + } + else switch (state) + { + case START_HDR: /* before header colon */ + if (*hp == ':') + state = SKIP_JUNK; + break; + + case SKIP_JUNK: /* looking for address start */ + if (*hp == '"') /* quoted string */ + { + oldstate = SKIP_JUNK; + state = INSIDE_DQUOTE; + *tp++ = *hp; + } + else if (*hp == '(') /* address comment -- ignore */ + { + parendepth = 1; + oldstate = SKIP_JUNK; + state = INSIDE_PARENS; + } + else if (*hp == '<') /* begin <address> */ + { + state = INSIDE_BRACKETS; + tp = address; + } + else if (*hp != ',' && !isspace(*hp)) + { + --hp; + state = BARE_ADDRESS; + } + break; + + case BARE_ADDRESS: /* collecting address without delimiters */ + if (*hp == ',') /* end of address */ + { + if (tp > address) + { + *tp++ = '\0'; + state = SKIP_JUNK; + return(tp = address); + } + } + else if (*hp == '(') /* beginning of comment */ + { + parendepth = 1; + oldstate = BARE_ADDRESS; + state = INSIDE_PARENS; + } + else if (*hp == '<') /* beginning of real address */ + { + state = INSIDE_BRACKETS; + tp = address; + } + else if (!isspace(*hp)) /* just take it, ignoring whitespace */ + *tp++ = *hp; + break; + + case INSIDE_DQUOTE: /* we're in a quoted string, copy verbatim */ + if (*hp != '"') + *tp++ = *hp; + else + { + *tp++ = *hp; + state = oldstate; + } + break; + + case INSIDE_PARENS: /* we're in a parenthesized comment, ignore */ + if (*hp == '(') + ++parendepth; + else if (*hp == ')') + --parendepth; + if (parendepth == 0) + state = oldstate; + break; + + case INSIDE_BRACKETS: /* possible <>-enclosed address */ + if (*hp == '>') /* end of address */ + { + *tp++ = '\0'; + state = SKIP_JUNK; + ++hp; + return(tp = address); + } + else if (*hp == '<') /* nested <> */ + tp = address; + else if (*hp == '"') /* quoted address */ + { + *tp++ = *hp; + oldstate = INSIDE_BRACKETS; + state = INSIDE_DQUOTE; + } + else /* just copy address */ + *tp++ = *hp; + break; + } + } + + return(NULL); +} + +#ifdef TESTMAIN +static void parsebuf(char *longbuf, int reply) +{ + char *cp; + + if (reply) + { + reply_hack(longbuf, "HOSTNAME.NET"); + printf("Rewritten buffer: %s", longbuf); + } + else + if ((cp = nxtaddr(longbuf)) != (char *)NULL) + do { + printf("\t-> \"%s\"\n", cp); + } while + ((cp = nxtaddr((char *)NULL)) != (char *)NULL); +} + + + +main(int argc, char *argv[]) +{ + char buf[MSGBUFSIZE], longbuf[BUFSIZ]; + int ch, reply; + + verbose = reply = FALSE; + while ((ch = getopt(argc, argv, "rv")) != EOF) + switch(ch) + { + case 'r': + reply = TRUE; + break; + + case 'v': + verbose = TRUE; + break; + } + + while (fgets(buf, sizeof(buf)-1, stdin)) + { + if (buf[0] == ' ' || buf[0] == '\t') + strcat(longbuf, buf); + else if (!strncasecmp("From: ", buf, 6) + || !strncasecmp("To: ", buf, 4) + || !strncasecmp("Reply-", buf, 6) + || !strncasecmp("Cc: ", buf, 4) + || !strncasecmp("Bcc: ", buf, 5)) + strcpy(longbuf, buf); + else if (longbuf[0]) + { + if (verbose) + fputs(longbuf, stdout); + parsebuf(longbuf, reply); + longbuf[0] = '\0'; + } + } + if (longbuf[0]) + { + if (verbose) + fputs(longbuf, stdout); + parsebuf(longbuf, reply); + } +} +#endif /* TESTMAIN */ + +/* rfc822.c end */ diff --git a/src/rfc822.h b/src/rfc822.h new file mode 100644 index 000000000..75c0fed9b --- /dev/null +++ b/src/rfc822.h @@ -0,0 +1,3 @@ +/* rfc822.c: RFC822 header parsing */ +char *reply_hack(char *, const char *); +char *nxtaddr(const char *); diff --git a/src/select-keys.c b/src/select-keys.c new file mode 100644 index 000000000..04514be6c --- /dev/null +++ b/src/select-keys.c @@ -0,0 +1,375 @@ +/* select-keys.c - GTK+ based key selection + * Copyright (C) 2001 Werner Koch (dd9jn) + * + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#ifdef USE_GPGME +#include <stdio.h> +#include <stdlib.h> + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkmain.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkclist.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkprogressbar.h> +#include <gtk/gtksignal.h> + +#include "intl.h" +#include "select-keys.h" +#include "utils.h" +#include "gtkutils.h" + +enum col_titles { + COL_ALGO, + COL_KEYID, + COL_NAME, + COL_EMAIL, + COL_VALIDITY, + + N_COL_TITLES +}; + +static struct { + int okay; + GtkWidget *window; + GtkLabel *toplabel; + GtkCList *clist; + GtkProgress *progress; + const char *pattern; + GpgmeRecipients rset; +} select_keys; + + +static void set_row (GtkCList *clist, GpgmeKey key ); +static void fill_clist (GtkCList *clist, const char *pattern ); +static void create_dialog (void); +static void open_dialog (void); +static void close_dialog (void); +static void key_pressed_cb (GtkWidget *widget, + GdkEventKey *event, gpointer data); +static void select_btn_cb (GtkWidget *widget, gpointer data); +static void cancel_btn_cb (GtkWidget *widget, gpointer data); + + +static void +update_progress (void) +{ + if (select_keys.progress) { + gfloat val = gtk_progress_get_value (select_keys.progress); + + val += 1; + gtk_progress_set_value (select_keys.progress, val); + if ( !GTK_WIDGET_VISIBLE (select_keys.progress) ) + gtk_widget_show (GTK_WIDGET (select_keys.progress)); + } +} + + +/** + * select_keys_get_recipients: + * @recp_names: A list of email addresses + * + * Select a list of recipients from a given list of email addresses. + * This may pop up a window to present the user a choice, it will also + * check that the recipients key are all valid. + * + * Return value: NULL on error or a list of list of recipients. + **/ +GpgmeRecipients +gpgmegtk_recipient_selection (GSList *recp_names) +{ + GpgmeError err; + + err = gpgme_recipients_new (&select_keys.rset); + if (err) { + g_message ("** failed to allocate recipients set: %s", + gpgme_strerror (err) ); + return NULL; + } + + open_dialog (); + + do { + select_keys.pattern = recp_names? recp_names->data:NULL; + gtk_label_set_text (select_keys.toplabel, select_keys.pattern ); + gtk_clist_clear (select_keys.clist); + fill_clist (select_keys.clist, select_keys.pattern); + gtk_main (); + if (recp_names) + recp_names = recp_names->next; + } while (select_keys.okay && recp_names ); + + close_dialog (); + + { + GpgmeRecipients rset = select_keys.rset; + select_keys.rset = NULL; + if (!rset) { + gpgme_recipients_release (rset); + rset = NULL; + } + return rset; + } +} + +static void +destroy_key (gpointer data) +{ + GpgmeKey key = data; + gpgme_key_release (key); +} + +static void +set_row (GtkCList *clist, GpgmeKey key ) +{ + const char *s; + const char *text[N_COL_TITLES]; + char *algo_buf; + int row; + + algo_buf = g_strdup_printf ("%lu/%s", + gpgme_key_get_ulong_attr (key, GPGME_ATTR_LEN, NULL, 0 ), + gpgme_key_get_string_attr (key, GPGME_ATTR_ALGO, NULL, 0 ) ); + text[COL_ALGO] = algo_buf; + + s = gpgme_key_get_string_attr (key, GPGME_ATTR_KEYID, NULL, 0 ); + if ( strlen (s) == 16 ) + s += 8; /* show only the short keyID */ + text[COL_KEYID] = s; + + s = gpgme_key_get_string_attr (key, GPGME_ATTR_NAME, NULL, 0 ); + text[COL_NAME] = s; + + s = gpgme_key_get_string_attr (key, GPGME_ATTR_EMAIL, NULL, 0 ); + text[COL_EMAIL] = s; + + s = gpgme_key_get_string_attr (key, GPGME_ATTR_VALIDITY, NULL, 0 ); + text[COL_VALIDITY] = s; + + row = gtk_clist_append (clist, (gchar**)text); + g_free (algo_buf); + + gtk_clist_set_row_data_full (clist, row, key, destroy_key); +} + + +static void +fill_clist (GtkCList *clist, const char *pattern ) +{ + GpgmeCtx ctx; + GpgmeError err; + GpgmeKey key; + + debug_print ("select_keys:fill_clist: pattern `%s'\n", pattern ); + + /*gtk_clist_freeze (select_keys.clist);*/ + err = gpgme_new (&ctx); + g_assert (!err); + + while (gtk_events_pending ()) + gtk_main_iteration (); + + err = gpgme_op_keylist_start (ctx, pattern, 0 ); + if (err) { + g_message ("** gpgme_op_keylist_start(%s) failed: %s", + pattern, gpgme_strerror (err)); + return; + } + update_progress (); + while ( !(err = gpgme_op_keylist_next ( ctx, &key )) ) { + debug_print ("%% %s:%d: insert\n", __FILE__ ,__LINE__ ); + set_row (clist, key ); key = NULL; + update_progress (); + while (gtk_events_pending ()) + gtk_main_iteration (); + } + debug_print ("%% %s:%d: ready\n", __FILE__ ,__LINE__ ); + gtk_widget_hide (GTK_WIDGET (select_keys.progress)); + if ( err != GPGME_EOF ) + g_message ("** gpgme_op_keylist_next failed: %s", + gpgme_strerror (err)); + gpgme_release (ctx); + /*gtk_clist_thaw (select_keys.clist);*/ +} + + + + +static void +create_dialog () +{ + GtkWidget *window; + GtkWidget *vbox, *vbox2, *hbox; + GtkWidget *bbox; + GtkWidget *scrolledwin; + GtkWidget *clist; + GtkWidget *label; + GtkWidget *progress; + GtkWidget *select_btn, *cancel_btn; + gchar *titles[N_COL_TITLES]; + + g_assert (!select_keys.window); + window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_widget_set_usize (window, 500, 320); + gtk_container_set_border_width (GTK_CONTAINER (window), 8); + gtk_window_set_title (GTK_WINDOW (window), _("Select Keys")); + gtk_window_set_modal (GTK_WINDOW (window), TRUE); + gtk_signal_connect (GTK_OBJECT (window), "delete_event", + GTK_SIGNAL_FUNC (close_dialog), NULL); + gtk_signal_connect (GTK_OBJECT (window), "key_press_event", + GTK_SIGNAL_FUNC (key_pressed_cb), NULL); + + vbox = gtk_vbox_new (FALSE, 8); + gtk_container_add (GTK_CONTAINER (window), vbox); + + hbox = gtk_hbox_new(FALSE, 4); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + label = gtk_label_new ( _("Select key for: ") ); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + label = gtk_label_new ( "" ); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + + + hbox = gtk_hbox_new (FALSE, 8); + gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (hbox), 2); + + + scrolledwin = gtk_scrolled_window_new (NULL, NULL); + gtk_box_pack_start (GTK_BOX (hbox), scrolledwin, TRUE, TRUE, 0); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_AUTOMATIC); + + titles[COL_ALGO] = _("Size"); + titles[COL_KEYID] = _("Key ID"); + titles[COL_NAME] = _("Name"); + titles[COL_EMAIL] = _("Address"); + titles[COL_VALIDITY] = _("Val"); + + clist = gtk_clist_new_with_titles (N_COL_TITLES, titles); + gtk_container_add (GTK_CONTAINER (scrolledwin), clist); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_ALGO, 40); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_KEYID, 60); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_NAME, 100); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_EMAIL, 100); + gtk_clist_set_column_width (GTK_CLIST(clist), COL_VALIDITY, 20); + gtk_clist_set_selection_mode (GTK_CLIST(clist), GTK_SELECTION_BROWSE); + + hbox = gtk_hbox_new (FALSE, 8); + gtk_box_pack_end (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); + + gtkut_button_set_create (&bbox, &select_btn, _("Select"), + &cancel_btn, _("Cancel"), NULL, NULL); + gtk_box_pack_end (GTK_BOX (hbox), bbox, FALSE, FALSE, 0); + gtk_widget_grab_default (select_btn); + + gtk_signal_connect (GTK_OBJECT (select_btn), "clicked", + GTK_SIGNAL_FUNC (select_btn_cb), clist); + gtk_signal_connect (GTK_OBJECT(cancel_btn), "clicked", + GTK_SIGNAL_FUNC (cancel_btn_cb), NULL); + + vbox2 = gtk_vbox_new (FALSE, 4); + gtk_box_pack_start (GTK_BOX (hbox), vbox2, FALSE, FALSE, 0); + + progress = gtk_progress_bar_new (); + gtk_box_pack_start (GTK_BOX (vbox2), progress, FALSE, FALSE, 4); + gtk_progress_set_activity_mode (GTK_PROGRESS (progress), 1); + + gtk_widget_show_all (window); + select_keys.window = window; + select_keys.toplabel = GTK_LABEL (label); + select_keys.clist = GTK_CLIST (clist); + select_keys.progress = GTK_PROGRESS (progress); +} + + +static void +open_dialog () +{ + if ( !select_keys.window ) + create_dialog (); + select_keys.okay = 0; + gtk_widget_show (select_keys.window); +} + + +static void +close_dialog () +{ + gtk_widget_destroy (select_keys.window); + select_keys.window = NULL; +} + + +static void +key_pressed_cb (GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) { + select_keys.okay = 0; + gtk_main_quit (); + } +} + + +static void +select_btn_cb (GtkWidget *widget, gpointer data) +{ + GtkCList *clist = GTK_CLIST (data); + int row; + GpgmeKey key; + + if (!clist->selection) { + g_message ("** nothing selected"); + return; + } + row = GPOINTER_TO_INT(clist->selection->data); + key = gtk_clist_get_row_data(clist, row); + if (key) { + const char *s = gpgme_key_get_string_attr (key, + GPGME_ATTR_FPR, + NULL, 0 ); + g_message ("** FIXME: we are faking the trust calculation"); + if (!gpgme_recipients_add_name_with_validity (select_keys.rset, s, + GPGME_VALIDITY_FULL) ) { + select_keys.okay = 1; + gtk_main_quit (); + } + } +} + + +static void +cancel_btn_cb (GtkWidget *widget, gpointer data) +{ + select_keys.okay = 0; + gtk_main_quit (); +} + +#endif /*USE_GPGME*/ diff --git a/src/select-keys.h b/src/select-keys.h new file mode 100644 index 000000000..009afc109 --- /dev/null +++ b/src/select-keys.h @@ -0,0 +1,29 @@ +/* select-keys.h - GTK+ based key selection + * Copyright (C) 2001 Werner Koch (dd9jn) + * + * 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. + */ + +#ifndef GPGMEGTK_SELECT_KEYS_H +#define GPGMEGTK_SELECT_KEYS_H + +#include <glib.h> +#include <gpgme.h> + + +GpgmeRecipients gpgmegtk_recipient_selection (GSList *recp_names); + + +#endif /* GPGMEGTK_SELECT_KEYS_H */ diff --git a/src/send.c b/src/send.c new file mode 100644 index 000000000..3d9e0b692 --- /dev/null +++ b/src/send.c @@ -0,0 +1,256 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <string.h> + +#include "intl.h" +#include "send.h" +#include "socket.h" +#include "smtp.h" +#include "prefs_account.h" +#include "account.h" +#include "compose.h" +#include "procmsg.h" +#include "procheader.h" +#include "utils.h" + +#define SMTP_PORT 25 + +static gint send_message_smtp (GSList *to_list, const gchar *from, + const gchar *server, gushort port, + const gchar *domain, const gchar *userid, + const gchar *passwd, gboolean use_smtp_auth, + FILE *fp); +static gint send_smtp_open (const gchar *server, gushort port, + const gchar *domain, gboolean use_smtp_auth); + +#define SEND_EXIT_IF_ERROR(f, s) \ +{ \ + if ((f) < 0) { \ + log_warning("Error occurred while %s\n", s); \ + if (smtp_sock > 0) sock_close(smtp_sock); \ + return -1; \ + } \ +} + +#define SEND_EXIT_IF_NOTOK(f, s) \ +{ \ + if ((f) != SM_OK) { \ + log_warning("Error occurred while %s\n", s); \ + if (smtp_quit(smtp_sock) != SM_OK) \ + log_warning("Error occurred while sending QUIT\n"); \ + sock_close(smtp_sock); \ + return -1; \ + } \ +} + +gint send_message(const gchar *file, PrefsAccount *ac_prefs, GSList *to_list) +{ + FILE *fp; + gint val; + gushort port; + gchar *domain; + + g_return_val_if_fail(file != NULL, -1); + g_return_val_if_fail(ac_prefs != NULL, -1); + g_return_val_if_fail(to_list != NULL, -1); + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return -1; + } + + port = ac_prefs->set_smtpport ? ac_prefs->smtpport : SMTP_PORT; + domain = ac_prefs->set_domain ? ac_prefs->domain : NULL; + + val = send_message_smtp(to_list, ac_prefs->address, + ac_prefs->smtp_server, port, domain, + ac_prefs->userid, ac_prefs->passwd, + ac_prefs->use_smtp_auth, fp); + + fclose(fp); + return val; +} + +enum +{ + Q_SENDER = 0, + Q_SMTPSERVER = 1, + Q_RECIPIENTS = 2 +}; + +gint send_message_queue(const gchar *file) +{ + static HeaderEntry qentry[] = {{"S:", NULL, FALSE}, + {"SSV:", NULL, FALSE}, + {"R:", NULL, FALSE}, + {NULL, NULL, FALSE}}; + FILE *fp; + gint val; + gchar *from = NULL; + gchar *server = NULL; + GSList *to_list = NULL; + gchar buf[BUFFSIZE]; + gint hnum; + + g_return_val_if_fail(file != NULL, -1); + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return -1; + } + + while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, qentry)) + != -1) { + gchar *p = buf + strlen(qentry[hnum].name); + + switch (hnum) { + case Q_SENDER: + if (!from) from = g_strdup(p); + break; + case Q_SMTPSERVER: + if (!server) server = g_strdup(p); + break; + case Q_RECIPIENTS: + to_list = address_list_append(to_list, p); + break; + default: + } + } + + if (!to_list || !from || !server) { + g_warning(_("Queued message header is broken.\n")); + val = -1; + } else { + gushort port; + gchar *domain; + PrefsAccount *ac; + + ac = account_find_from_smtp_server(from, server); + if (!ac) { + g_warning(_("Account not found. Using current account...\n")); + ac = cur_account; + } + + if (ac) { + port = ac->set_smtpport ? ac->smtpport : SMTP_PORT; + domain = ac->set_domain ? ac->domain : NULL; + val = send_message_smtp + (to_list, from, server, port, domain, + ac->userid, ac->passwd, ac->use_smtp_auth, fp); + } else { + g_warning(_("Account not found.\n")); + val = send_message_smtp + (to_list, from, server, SMTP_PORT, NULL, + NULL, NULL, FALSE, fp); + } + } + + slist_free_strings(to_list); + g_slist_free(to_list); + g_free(from); + g_free(server); + fclose(fp); + + return val; +} + +static gint send_message_smtp(GSList *to_list, const gchar *from, + const gchar *server, gushort port, + const gchar *domain, const gchar *userid, + const gchar* passwd, gboolean use_smtp_auth, + FILE *fp) +{ + gint smtp_sock; + gchar buf[BUFFSIZE]; + GSList *cur; + + g_return_val_if_fail(to_list != NULL, -1); + g_return_val_if_fail(from != NULL, -1); + g_return_val_if_fail(server != NULL, -1); + g_return_val_if_fail(fp != NULL, -1); + + log_message(_("Connecting to SMTP server: %s ...\n"), server); + + SEND_EXIT_IF_ERROR((smtp_sock = send_smtp_open + (server, port, domain, use_smtp_auth)), + "connecting to server"); + SEND_EXIT_IF_NOTOK + (smtp_from(smtp_sock, from, userid, passwd, use_smtp_auth), + "sending MAIL FROM"); + for (cur = to_list; cur != NULL; cur = cur->next) + SEND_EXIT_IF_NOTOK(smtp_rcpt(smtp_sock, (gchar *)cur->data), + "sending RCPT TO"); + SEND_EXIT_IF_NOTOK(smtp_data(smtp_sock), "sending DATA"); + + /* send main part */ + while (fgets(buf, sizeof(buf), fp) != NULL) { + strretchomp(buf); + + /* escape when a dot appears on the top */ + if (buf[0] == '.') + SEND_EXIT_IF_ERROR(sock_write(smtp_sock, ".", 1), + "sending data"); + + SEND_EXIT_IF_ERROR(sock_puts(smtp_sock, buf), "sending data"); + } + + SEND_EXIT_IF_NOTOK(smtp_eom(smtp_sock), "terminating data"); + SEND_EXIT_IF_NOTOK(smtp_quit(smtp_sock), "sending QUIT"); + + sock_close(smtp_sock); + return 0; +} + +static gint send_smtp_open(const gchar *server, gushort port, + const gchar *domain, gboolean use_smtp_auth) +{ + SockInfo *sockinfo; + gint sock; + gint val; + + g_return_val_if_fail(server != NULL, -1); + + if ((sockinfo = sock_connect(server, port)) == NULL) { + log_warning(_("Can't connect to SMTP server: %s:%d\n"), + server, port); + return -1; + } + sock = sockinfo->sock; + sock_sockinfo_free(sockinfo); + + if (smtp_ok(sock) == SM_OK) { + val = smtp_helo(sock, domain ? domain : get_domain_name(), + use_smtp_auth); + if (val == SM_OK) return sock; + } + + log_warning(_("Error occurred while sending HELO\n")); + sock_close(sock); + + return -1; +} diff --git a/src/send.h b/src/send.h new file mode 100644 index 000000000..219dd4de3 --- /dev/null +++ b/src/send.h @@ -0,0 +1,31 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __SEND_H__ +#define __SEND_H__ + +#include <glib.h> + +#include "prefs_account.h" + +gint send_message (const gchar *file, PrefsAccount *ac_prefs, + GSList *to_list); +gint send_message_queue (const gchar *file); + +#endif /* __SEND_H__ */ diff --git a/src/session.c b/src/session.c new file mode 100644 index 000000000..170529a67 --- /dev/null +++ b/src/session.c @@ -0,0 +1,42 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> + +#include "session.h" +#include "imap.h" +#include "news.h" + +void session_destroy(Session *session) +{ + g_return_if_fail(session != NULL); + + switch (session->type) { + case SESSION_IMAP: + imap_session_destroy(IMAP_SESSION(session)); + break; + case SESSION_NEWS: + news_session_destroy(NNTP_SESSION(session)); + break; + default: + } + + g_free(session->server); + g_free(session); +} diff --git a/src/session.h b/src/session.h new file mode 100644 index 000000000..f1dba91f5 --- /dev/null +++ b/src/session.h @@ -0,0 +1,55 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __SESSION_H__ +#define __SESSION_H__ + +#include <glib.h> + +typedef struct _Session Session; + +#define SESSION(obj) ((Session *)obj) + +typedef enum { + SESSION_IMAP, + SESSION_NEWS +} SessionType; + +typedef enum { + SESSION_READY, + SESSION_SEND, + SESSION_RECV +} SessionPhase; + +struct _Session +{ + SessionType type; + + gint sock; + gchar *server; + + gboolean connected; + SessionPhase phase; + + gpointer data; +}; + +void session_destroy (Session *session); + +#endif /* __SESSION_H__ */ diff --git a/src/setup.c b/src/setup.c new file mode 100644 index 000000000..ccbb955ca --- /dev/null +++ b/src/setup.c @@ -0,0 +1,95 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gtk/gtkstatusbar.h> + +#include "intl.h" +#include "inputdialog.h" +#include "alertpanel.h" +#include "mainwindow.h" +#include "gtkutils.h" + +#define SETUP_DIALOG_WIDTH 540 + +static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data); + +void setup(MainWindow *mainwin) +{ + gchar *path; + Folder *folder; + + path = input_dialog + (_("Mailbox setting"), + _("First, you have to set the location of mailbox.\n" + "You can use existing mailbox in MH format\n" + "if you have the one.\n" + "If you're not sure, just select OK."), + "Mail"); + if (!path) return; + if (folder_find_from_path(path)) { + g_warning("The mailbox already exists.\n"); + g_free(path); + return; + } + + if (!strcmp(path, "Mail")) + folder = folder_new(F_MH, _("Mailbox"), path); + else + folder = folder_new(F_MH, g_basename(path), path); + g_free(path); + + if (folder->create_tree(folder) < 0) { + alertpanel_error(_("Creation of the mailbox failed.\n" + "Maybe some files already exist, or you don't have the permission to write there.")); + folder_destroy(folder); + return; + } + + folder_add(folder); + folder_set_ui_func(folder, scan_tree_func, mainwin); + folder->scan_tree(folder); + folder_set_ui_func(folder, NULL, NULL); +} + +static void scan_tree_func(Folder *folder, FolderItem *item, gpointer data) +{ + MainWindow *mainwin = (MainWindow *)data; + gchar *str; + + if (item->path) + str = g_strdup_printf(_("Scanning folder %s%c%s ..."), + LOCAL_FOLDER(folder)->rootpath, + G_DIR_SEPARATOR, + item->path); + else + str = g_strdup_printf(_("Scanning folder %s ..."), + LOCAL_FOLDER(folder)->rootpath); + + gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), + mainwin->mainwin_cid, str); + gtkut_widget_wait_for_draw(mainwin->hbox_stat); + gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), + mainwin->mainwin_cid); + g_free(str); +} diff --git a/src/setup.h b/src/setup.h new file mode 100644 index 000000000..5b889d33d --- /dev/null +++ b/src/setup.h @@ -0,0 +1,29 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __SETUP_H__ +#define __SETUP_H__ + +#include <glib.h> + +#include "mainwindow.h" + +void setup(MainWindow *mainwin); + +#endif /* __SETUP_H__ */ diff --git a/src/smtp.c b/src/smtp.c new file mode 100644 index 000000000..a3b5a3789 --- /dev/null +++ b/src/smtp.c @@ -0,0 +1,158 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <stdio.h> +#include <string.h> + +#include "smtp.h" +#include "esmtp.h" +#include "socket.h" +#include "utils.h" + +#define MSGBUFSIZE 8192 + +static gint verbose = 1; +static gchar smtp_response[MSGBUFSIZE]; + +gint smtp_helo(gint sock, const char *hostname, gboolean use_smtp_auth) +{ + if (use_smtp_auth) { + sock_printf(sock, "EHLO %s\r\n", hostname); + if (verbose) + log_print("ESMTP> EHLO %s\n", hostname); + + return esmtp_ok(sock); + } else { + sock_printf(sock, "HELO %s\r\n", hostname); + if (verbose) + log_print("SMTP> HELO %s\n", hostname); + + return smtp_ok(sock); + } +} + +gint smtp_from(gint sock, const gchar *from, + const gchar *userid, const gchar *passwd, + gboolean use_smtp_auth) +{ + gchar buf[MSGBUFSIZE]; + SMTPAuthType authtype; + + if (use_smtp_auth) { + /* exist AUTH-Type CRAM_MD5 */ + if (esmtp_auth_cram_md5(sock) == SM_ERROR) { + /* exist AUTH-Type LOGIN */ + if (esmtp_auth_login(sock) == SM_ERROR) + return SM_ERROR; + else + authtype = SMTPAUTH_LOGIN; + } else + authtype = SMTPAUTH_CRAM_MD5; + + esmtp_auth(sock, authtype, userid, passwd, use_smtp_auth); + } + + if (strchr(from, '<')) + g_snprintf(buf, sizeof(buf), "MAIL FROM: %s", from); + else + g_snprintf(buf, sizeof(buf), "MAIL FROM: <%s>", from); + + sock_printf(sock, "%s\r\n", buf); + if (verbose) + log_print("SMTP> %s\n", buf); + + return smtp_ok(sock); +} + +gint smtp_rcpt(gint sock, const gchar *to) +{ + gchar buf[MSGBUFSIZE]; + + if (strchr(to, '<')) + g_snprintf(buf, sizeof(buf), "RCPT TO: %s", to); + else + g_snprintf(buf, sizeof(buf), "RCPT TO: <%s>", to); + + sock_printf(sock, "%s\r\n", buf); + if (verbose) + log_print("SMTP> %s\n", buf); + + return smtp_ok(sock); +} + +gint smtp_data(gint sock) +{ + sock_printf(sock, "DATA\r\n"); + if (verbose) + log_print("SMTP> DATA\n"); + + return smtp_ok(sock); +} + +gint smtp_rset(gint sock) +{ + sock_printf(sock, "RSET\r\n"); + if (verbose) + log_print("SMTP> RSET\n"); + + return smtp_ok(sock); +} + +gint smtp_quit(gint sock) +{ + sock_printf(sock, "QUIT\r\n"); + if (verbose) + log_print("SMTP> QUIT\n"); + + return smtp_ok(sock); +} + +gint smtp_eom(gint sock) +{ + sock_printf(sock, ".\r\n"); + if (verbose) + log_print("SMTP> . (EOM)\n"); + + return smtp_ok(sock); +} + +gint smtp_ok(gint sock) +{ + while ((sock_read(sock, smtp_response, sizeof(smtp_response) - 1)) + != 1) { + if (strlen(smtp_response) < 4) + return SM_ERROR; + strretchomp(smtp_response); + + if (verbose) + log_print("SMTP< %s\n", smtp_response); + + if ((smtp_response[0] == '1' || smtp_response[0] == '2' || + smtp_response[0] == '3') && smtp_response[3] == ' ') + return SM_OK; + else if (smtp_response[3] != '-') + return SM_ERROR; + else if (smtp_response[0] == '5' && smtp_response[1] == '0' && + (smtp_response[3] == '4' || smtp_response[3] == '3' || smtp_response[3] == '1')) + return SM_ERROR; + } + + return SM_UNRECOVERABLE; +} diff --git a/src/smtp.h b/src/smtp.h new file mode 100644 index 000000000..ea4c88a8d --- /dev/null +++ b/src/smtp.h @@ -0,0 +1,45 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __SMTP_H__ +#define __SMTP_H__ + +#include <glib.h> + +#define SMTPBUFSIZE 256 + +#define SM_OK 0 +#define SM_ERROR 128 +#define SM_UNRECOVERABLE 129 + +#define ESMTP_8BITMIME 0x01 +#define ESMTP_SIZE 0x02 +#define ESMTP_ETRN 0x04 + +gint smtp_helo(gint sock, const char *hostname, gboolean use_smtp_auth); +gint smtp_from(gint sock, const gchar *from, const gchar *userid, + const gchar *passwd, gboolean use_smtp_auth); +gint smtp_rcpt(gint sock, const gchar *to); +gint smtp_data(gint sock); +gint smtp_rset(gint sock); +gint smtp_quit(gint sock); +gint smtp_eom(gint sock); +gint smtp_ok(gint sock); + +#endif /* __SMTP_H__ */ diff --git a/src/socket.c b/src/socket.c new file mode 100644 index 000000000..83012da23 --- /dev/null +++ b/src/socket.c @@ -0,0 +1,439 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <sys/time.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/un.h> +#include <netinet/in.h> +#include <arpa/inet.h> +#include <netdb.h> +#include <unistd.h> +#include <stdio.h> +#include <string.h> +#include <stdarg.h> +#include <fcntl.h> +#include <errno.h> + +#if USE_THREADS +# include <pthread.h> +#endif + +#include "socket.h" + +#define BUFFSIZE 8192 + +#ifndef INET6 +static gint sock_connect_by_hostname (gint sock, + const gchar *hostname, + gushort port); +#else +static gint sock_connect_by_getaddrinfo (const gchar *hostname, + gushort port); +#endif + +gint sock_connect_unix(const gchar *path) +{ + gint sock; + struct sockaddr_un addr; + + sock = socket(PF_UNIX, SOCK_STREAM, 0); + if (sock < 0) { + perror("sock_connect_unix(): socket"); + return -1; + } + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1); + + if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + close(sock); + return -1; + } + + return sock; +} + +gint sock_open_unix(const gchar *path) +{ + gint sock; + struct sockaddr_un addr; + + sock = socket(PF_UNIX, SOCK_STREAM, 0); + + if (sock < 0) { + perror("sock_open_unix(): socket"); + return -1; + } + + memset(&addr, 0, sizeof(addr)); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1); + + if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) { + perror("bind"); + close(sock); + return -1; + } + + if (listen(sock, 1) < 0) { + perror("listen"); + close(sock); + return -1; + } + + return sock; +} + +gint sock_accept(gint sock) +{ + struct sockaddr_in caddr; + gint caddr_len; + + caddr_len = sizeof(caddr); + return accept(sock, (struct sockaddr *)&caddr, &caddr_len); +} + +gint sock_set_nonblocking_mode(gint sock, gboolean nonblock) +{ + gint flags; + + flags = fcntl(sock, F_GETFL, 0); + if (flags < 0) { + perror("fcntl"); + return -1; + } + + if (nonblock) + flags |= O_NONBLOCK; + else + flags &= ~O_NONBLOCK; + + return fcntl(sock, F_SETFL, flags); +} + +gboolean sock_is_nonblocking_mode(gint sock) +{ + gint flags; + + flags = fcntl(sock, F_GETFL, 0); + if (flags < 0) { + perror("fcntl"); + return FALSE; + } + + return ((flags & O_NONBLOCK) != 0); +} + +#ifndef INET6 +static gint sock_connect_by_hostname(gint sock, const gchar *hostname, + gushort port) +{ + struct hostent *hp; + struct sockaddr_in ad; +#ifndef HAVE_INET_ATON +#if HAVE_INET_ADDR + guint32 inaddr; +#endif +#endif /* HAVE_INET_ATON */ + + memset(&ad, 0, sizeof(ad)); + ad.sin_family = AF_INET; + ad.sin_port = htons(port); + +#if HAVE_INET_ATON + if (!inet_aton(hostname, &ad.sin_addr)) { +#else +#if HAVE_INET_ADDR + inaddr = inet_addr(hostname); + if (inaddr != -1) + memcpy(&ad.sin_addr, &inaddr, sizeof(inaddr)); + else { +#else + { +#endif +#endif /* HAVE_INET_ATON */ + if ((hp = gethostbyname(hostname)) == NULL) { + fprintf(stderr, "%s: unknown host.\n", hostname); + errno = 0; + return -1; + } + + if (hp->h_length != 4 && hp->h_length != 8) { + h_errno = errno = 0; + fprintf(stderr, "illegal address length received for host %s\n", hostname); + return -1; + } + + memcpy(&ad.sin_addr, hp->h_addr, hp->h_length); + } + + return connect(sock, (struct sockaddr *)&ad, sizeof(ad)); +} + +#else /* INET6 */ +static gint sock_connect_by_getaddrinfo(const gchar *hostname, gushort port) +{ + gint sock = -1, gai_error; + struct addrinfo hints, *res, *ai; + gchar port_str[6]; + + memset(&hints, 0, sizeof(hints)); + /* hints.ai_flags = AI_CANONNAME; */ + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + + /* convert port from integer to string. */ + g_snprintf(port_str, sizeof(port_str), "%d", port); + + if ((gai_error = getaddrinfo(hostname, port_str, &hints, &res)) != 0) { + fprintf(stderr, "getaddrinfo for %s:%s failed: %s\n", + hostname, port_str, gai_strerror(gai_error)); + return -1; + } + + for (ai = res; ai != NULL; ai = ai->ai_next) { + sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (sock < 0) + continue; + + if (connect(sock, ai->ai_addr, ai->ai_addrlen) == 0) + break; + + close(sock); + } + + if (res != NULL) + freeaddrinfo(res); + + if (ai == NULL) + return -1; + + return sock; +} +#endif /* !INET6 */ + +SockInfo *sock_connect_nb(const gchar *hostname, gushort port) +{ + gint sock; + gint ret; + SockInfo *sockinfo; + +#ifdef INET6 + if ((sock = sock_connect_by_getaddrinfo(hostname, port)) < 0) + return NULL; + if (sock_set_nonblocking_mode(sock, TRUE) < 0) return NULL; + ret = sock; +#else + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + perror("socket"); + return NULL; + } + + if (sock_set_nonblocking_mode(sock, TRUE) < 0) return NULL; + + ret = sock_connect_by_hostname(sock, hostname, port); + + if (ret < 0 && errno != EINPROGRESS) { + if (errno != 0) perror("connect"); + sock_close(sock); + return NULL; + } +#endif /* INET6 */ + + sockinfo = g_new0(SockInfo, 1); + sockinfo->sock = sock; + sockinfo->hostname = g_strdup(hostname); + sockinfo->port = port; + sockinfo->state = CONN_LOOKUPSUCCESS; + + if (ret < 0 && errno == EINPROGRESS) return sockinfo; + + sockinfo->state = CONN_ESTABLISHED; + return sockinfo; +} + +SockInfo *sock_connect(const gchar *hostname, gushort port) +{ + gint sock; + SockInfo *sockinfo; + +#ifdef INET6 + if ((sock = sock_connect_by_getaddrinfo(hostname, port)) < 0) + return NULL; +#else + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + perror("socket"); + return NULL; + } + + if (sock_connect_by_hostname(sock, hostname, port) < 0) { + if (errno != 0) perror("connect"); + sock_close(sock); + return NULL; + } +#endif /* INET6 */ + + sockinfo = g_new0(SockInfo, 1); + sockinfo->sock = sock; + sockinfo->hostname = g_strdup(hostname); + sockinfo->port = port; + sockinfo->state = CONN_ESTABLISHED; + + usleep(100000); + + return sockinfo; +} + +#if USE_THREADS +static void sock_connect_thread(SockInfo *sockinfo) +{ +#ifdef INET6 + if ((sockinfo->sock = sock_connect_by_getaddrinfo + (sockinfo->hostname, sockinfo->port)) < 0) + pthread_exit((void *)1); +#else + if (sock_connect_by_hostname(sockinfo->sock, sockinfo->hostname, + sockinfo->port) < 0) { + if (errno != 0) perror("connect"); + sockinfo->state = CONN_FAILED; + pthread_exit((void *)1); + } +#endif /* INET6 */ + sockinfo->state = CONN_ESTABLISHED; + + pthread_exit(0); +} + +SockInfo *sock_connect_with_thread(const gchar *hostname, gushort port) +{ + gint sock = 0; + SockInfo *sockinfo; + +#ifndef INET6 + if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + perror("socket"); + return NULL; + } +#endif /* !INET6 */ + + sockinfo = g_new0(SockInfo, 1); + sockinfo->sock = sock; + sockinfo->hostname = g_strdup(hostname); + sockinfo->port = port; + sockinfo->state = CONN_READY; + + pthread_create(&sockinfo->connect_thr, NULL, + (void *)sock_connect_thread, + sockinfo); + pthread_mutex_init(&sockinfo->mutex, NULL); + pthread_detach(sockinfo->connect_thr); + + return sockinfo; +} +#endif + +void sock_sockinfo_free(SockInfo *sockinfo) +{ + g_free(sockinfo->hostname); + g_free(sockinfo); +} + +gint sock_printf(gint sock, const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + return sock_write(sock, buf, strlen(buf)); +} + +gint sock_write(gint sock, const gchar *buf, gint len) +{ + gint n, wrlen = 0; + + while (len) { + n = write(sock, buf, len); + if (n <= 0) + return -1; + len -= n; + wrlen += n; + buf += n; + } + + return wrlen; +} + +gint sock_read(gint sock, gchar *buf, gint len) +{ + gchar *newline, *bp = buf; + gint n; + + if (--len < 1) + return -1; + do { + if ((n = recv(sock, bp, len, MSG_PEEK)) <= 0) + return -1; + if ((newline = memchr(bp, '\n', n)) != NULL) + n = newline - bp + 1; + if ((n = read(sock, bp, n)) < 0) + return -1; + bp += n; + len -= n; + } while (!newline && len); + + *bp = '\0'; + return bp - buf; +} + +gint sock_puts(gint sock, const gchar *buf) +{ + gint ret; + + if ((ret = sock_write(sock, buf, strlen(buf))) < 0) + return ret; + return sock_write(sock, "\r\n", 2); +} + +/* peek at the next socket character without actually reading it */ +gint sock_peek(gint sock) +{ + gint n; + gchar ch; + + if ((n = recv(sock, &ch, 1, MSG_PEEK)) < 0) + return -1; + else + return ch; +} + +gint sock_close(gint sock) +{ + return close(sock); +} diff --git a/src/socket.h b/src/socket.h new file mode 100644 index 000000000..2522a9b2f --- /dev/null +++ b/src/socket.h @@ -0,0 +1,80 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __SOCKET_H__ +#define __SOCKET_H__ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> + +#if USE_THREADS +# include <pthread.h> +#endif + +typedef struct _SockInfo SockInfo; + +typedef enum +{ + CONN_READY, + CONN_LOOKUPSUCCESS, + CONN_ESTABLISHED, + CONN_LOOKUPFAILED, + CONN_FAILED +} ConnectionState; + +struct _SockInfo +{ + gint sock; + gchar *hostname; + gushort port; + ConnectionState state; + gpointer data; +#if USE_THREADS + pthread_t connect_thr; + pthread_mutex_t mutex; +#endif +}; + +gint sock_set_nonblocking_mode (gint sock, gboolean nonblock); +gboolean sock_is_nonblocking_mode (gint sock); + +SockInfo *sock_connect_nb (const gchar *hostname, gushort port); +SockInfo *sock_connect (const gchar *hostname, gushort port); + +gint sock_connect_unix (const gchar *path); +gint sock_open_unix (const gchar *path); +gint sock_accept (gint sock); + +#if USE_THREADS +SockInfo *sock_connect_with_thread (const gchar *hostname, gushort port); +#endif + +void sock_sockinfo_free (SockInfo *sockinfo); + +gint sock_printf (gint sock, const gchar *format, ...) + G_GNUC_PRINTF(2, 3); +gint sock_write (gint sock, const gchar *buf, gint len); +gint sock_read (gint sock, gchar *buf, gint len); +gint sock_puts (gint sock, const gchar *buf); +gint sock_close (gint sock); + +#endif /* __SOCKET_H__ */ diff --git a/src/sourcewindow.c b/src/sourcewindow.c new file mode 100644 index 000000000..0a8c9cf84 --- /dev/null +++ b/src/sourcewindow.c @@ -0,0 +1,174 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtksignal.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtktext.h> +#include <gtk/gtkstyle.h> +#include <stdio.h> +#include <stdlib.h> + +#include "intl.h" +#include "sourcewindow.h" +#include "procmsg.h" +#include "utils.h" +#include "gtkutils.h" +#include "prefs_common.h" + +static void source_window_destroy_cb (GtkWidget *widget, + SourceWindow *sourcewin); +static void key_pressed (GtkWidget *widget, + GdkEventKey *event, + SourceWindow *sourcewin); + +static GdkFont *msgfont = NULL; + +#define FONT_LOAD(font, s) \ +{ \ + gchar *fontstr, *p; \ + \ + Xstrdup_a(fontstr, s, ); \ + if ((p = strchr(fontstr, ',')) != NULL) *p = '\0'; \ + font = gdk_font_load(fontstr); \ +} + +static void source_window_init() +{ + if (msgfont != NULL || prefs_common.textfont == NULL) + return; + + if (MB_CUR_MAX == 1) { + FONT_LOAD(msgfont, prefs_common.textfont); + } else { + msgfont = gdk_fontset_load(prefs_common.textfont); + } +} + +SourceWindow *source_window_create(void) +{ + SourceWindow *sourcewin; + GtkWidget *window; + GtkWidget *scrolledwin; + GtkWidget *text; + + debug_print(_("Creating source window...\n")); + sourcewin = g_new0(SourceWindow, 1); + + window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_set_title(GTK_WINDOW(window), _("Source of the message")); + gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE); + gtk_widget_set_usize(window, 600, 500); + gtk_signal_connect(GTK_OBJECT(window), "destroy", + GTK_SIGNAL_FUNC(source_window_destroy_cb), + sourcewin); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), sourcewin); + gtk_widget_realize(window); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_NEVER, GTK_POLICY_ALWAYS); + gtk_container_add(GTK_CONTAINER(window), scrolledwin); + gtk_widget_show(scrolledwin); + + text = gtk_text_new(gtk_scrolled_window_get_hadjustment + (GTK_SCROLLED_WINDOW(scrolledwin)), + gtk_scrolled_window_get_vadjustment + (GTK_SCROLLED_WINDOW(scrolledwin))); + gtk_container_add(GTK_CONTAINER(scrolledwin), text); + gtk_widget_show(text); + + sourcewin->window = window; + sourcewin->scrolledwin = scrolledwin; + sourcewin->text = text; + + source_window_init(); + + return sourcewin; +} + +void source_window_show(SourceWindow *sourcewin) +{ + gtk_widget_show_all(sourcewin->window); +} + +void source_window_destroy(SourceWindow *sourcewin) +{ + g_free(sourcewin); +} + +void source_window_show_msg(SourceWindow *sourcewin, MsgInfo *msginfo) +{ + gchar *file; + gchar *title; + FILE *fp; + gchar buf[BUFFSIZE]; + + g_return_if_fail(msginfo != NULL); + + file = procmsg_get_message_file_path(msginfo); + g_return_if_fail(file != NULL); + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + g_free(file); + return; + } + + debug_print(_("Displaying the source of %s ...\n"), file); + + title = g_strdup_printf(_("%s - Source"), file); + gtk_window_set_title(GTK_WINDOW(sourcewin->window), title); + g_free(title); + g_free(file); + + gtk_text_freeze(GTK_TEXT(sourcewin->text)); + + while (fgets(buf, sizeof(buf), fp) != NULL) + source_window_append(sourcewin, buf); + + gtk_text_thaw(GTK_TEXT(sourcewin->text)); + + fclose(fp); +} + +void source_window_append(SourceWindow *sourcewin, const gchar *str) +{ + gtk_text_insert(GTK_TEXT(sourcewin->text), msgfont, NULL, NULL, + str, -1); +} + +static void source_window_destroy_cb(GtkWidget *widget, + SourceWindow *sourcewin) +{ + source_window_destroy(sourcewin); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, + SourceWindow *sourcewin) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_destroy(sourcewin->window); +} diff --git a/src/sourcewindow.h b/src/sourcewindow.h new file mode 100644 index 000000000..a50a1329b --- /dev/null +++ b/src/sourcewindow.h @@ -0,0 +1,45 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifndef __SOURCEWINDOW_H__ +#define __SOURCEWINDOW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +#include "procmsg.h" + +typedef struct _SourceWindow SourceWindow; + +struct _SourceWindow +{ + GtkWidget *window; + GtkWidget *scrolledwin; + GtkWidget *text; +}; + +SourceWindow *source_window_create (void); +void source_window_show (SourceWindow *sourcewin); +void source_window_destroy (SourceWindow *sourcewin); +void source_window_show_msg (SourceWindow *sourcewin, + MsgInfo *msginfo); +void source_window_append (SourceWindow *sourcewin, + const gchar *str); + +#endif /* __SOURCEWINDOW_H__ */ diff --git a/src/statusbar.c b/src/statusbar.c new file mode 100644 index 000000000..df55616a9 --- /dev/null +++ b/src/statusbar.c @@ -0,0 +1,124 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <gtk/gtkstatusbar.h> +#include <stdarg.h> + +#include "intl.h" +#include "statusbar.h" +#include "gtkutils.h" +#include "utils.h" + +#define BUFFSIZE 1024 + +static GList *statusbar_list = NULL; + +GtkWidget *statusbar_create(void) +{ + GtkWidget *statusbar; + + statusbar = gtk_statusbar_new(); + statusbar_list = g_list_append(statusbar_list, statusbar); + + return statusbar; +} + +void statusbar_puts(GtkStatusbar *statusbar, const gchar *str) +{ + gint cid; + gchar *buf; + + buf = g_strdup(str); + strretchomp(buf); + if (strlen(buf) > 76) { + wchar_t *wbuf; + + wbuf = strdup_mbstowcs(buf); + + if (wcslen(wbuf) > 60) { + gchar *tmp; + + g_free(buf); + wbuf[60] = (wchar_t)0; + tmp = strdup_wcstombs(wbuf); + buf = g_strconcat(tmp, "...", NULL); + g_free(tmp); + } + + g_free(wbuf); + } + + cid = gtk_statusbar_get_context_id(statusbar, "Standard Output"); + gtk_statusbar_pop(statusbar, cid); + gtk_statusbar_push(statusbar, cid, buf); + gtkut_widget_wait_for_draw(GTK_WIDGET(statusbar)->parent); + + g_free(buf); +} + +void statusbar_puts_all(const gchar *str) +{ + GList *cur; + + for (cur = statusbar_list; cur != NULL; cur = cur->next) + statusbar_puts(GTK_STATUSBAR(cur->data), str); +} + +void statusbar_print(GtkStatusbar *statusbar, const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + statusbar_puts(statusbar, buf); +} + +void statusbar_print_all(const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + GList *cur; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + for (cur = statusbar_list; cur != NULL; cur = cur->next) + statusbar_puts(GTK_STATUSBAR(cur->data), buf); +} + +void statusbar_pop_all(void) +{ + GList *cur; + gint cid; + + for (cur = statusbar_list; cur != NULL; cur = cur->next) { + cid = gtk_statusbar_get_context_id(GTK_STATUSBAR(cur->data), + "Standard Output"); + gtk_statusbar_pop(GTK_STATUSBAR(cur->data), cid); + } +} diff --git a/src/statusbar.h b/src/statusbar.h new file mode 100644 index 000000000..991b672b6 --- /dev/null +++ b/src/statusbar.h @@ -0,0 +1,38 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __STATUSBAR_H__ +#define __STATUSBAR_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkstatusbar.h> + +GtkWidget *statusbar_create (void); +void statusbar_puts (GtkStatusbar *statusbar, + const gchar *str); +void statusbar_puts_all (const gchar *str); +void statusbar_print (GtkStatusbar *statusbar, + const gchar *format, ...) + G_GNUC_PRINTF(2, 3); +void statusbar_print_all (const gchar *format, ...) + G_GNUC_PRINTF(1, 2); +void statusbar_pop_all (void); + +#endif /* __STATUSBAR_H__ */ diff --git a/src/summary_search.c b/src/summary_search.c new file mode 100644 index 000000000..d17c59702 --- /dev/null +++ b/src/summary_search.c @@ -0,0 +1,381 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtktable.h> +#include <gtk/gtklabel.h> +#include <gtk/gtkentry.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkcheckbutton.h> +#include <gtk/gtkhbbox.h> +#include <gtk/gtkbutton.h> +#include <gtk/gtkctree.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "intl.h" +#include "main.h" +#include "summary_search.h" +#include "summaryview.h" +#include "utils.h" +#include "gtkutils.h" +#include "manage_window.h" +#include "alertpanel.h" + +static GtkWidget *window; +static GtkWidget *from_entry; +static GtkWidget *to_entry; +static GtkWidget *subject_entry; +static GtkWidget *case_checkbtn; +static GtkWidget *backward_checkbtn; +static GtkWidget *all_checkbtn; +static GtkWidget *search_btn; +static GtkWidget *clear_btn; +static GtkWidget *close_btn; + +static void summary_search_create(SummaryView *summaryview); +static void summary_search_execute(GtkButton *button, gpointer data); +static void summary_search_clear(GtkButton *button, gpointer data); +static void from_activated(void); +static void to_activated(void); +static void subject_activated(void); +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data); + +void summary_search(SummaryView *summaryview) +{ + if (!window) + summary_search_create(summaryview); + + gtk_widget_grab_focus(search_btn); + gtk_widget_grab_focus(subject_entry); + gtk_widget_show(window); +} + +void summary_search_cb(gpointer data, guint action, GtkWidget *widget) +{ + MainWindow *mainwin = data; + + summary_search(mainwin->summaryview); +} + +static void summary_search_create(SummaryView *summaryview) +{ + GtkWidget *vbox1; + GtkWidget *table1; + GtkWidget *from_label; + GtkWidget *to_label; + GtkWidget *subject_label; + GtkWidget *checkbtn_hbox; + GtkWidget *confirm_area; + + window = gtk_window_new (GTK_WINDOW_DIALOG); + gtk_window_set_title (GTK_WINDOW (window), _("Search")); + gtk_widget_set_usize (window, 450, -1); + //gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); + gtk_window_set_policy(GTK_WINDOW(window), FALSE, TRUE, TRUE); + gtk_container_set_border_width (GTK_CONTAINER (window), 8); + gtk_signal_connect(GTK_OBJECT(window), "delete_event", + GTK_SIGNAL_FUNC(gtk_widget_hide_on_delete), NULL); + gtk_signal_connect(GTK_OBJECT(window), "key_press_event", + GTK_SIGNAL_FUNC(key_pressed), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_in_event", + GTK_SIGNAL_FUNC(manage_window_focus_in), NULL); + gtk_signal_connect(GTK_OBJECT(window), "focus_out_event", + GTK_SIGNAL_FUNC(manage_window_focus_out), NULL); + + vbox1 = gtk_vbox_new (FALSE, 0); + gtk_widget_show (vbox1); + gtk_container_add (GTK_CONTAINER (window), vbox1); + + table1 = gtk_table_new (3, 3, FALSE); + gtk_widget_show (table1); + gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (table1), 4); + gtk_table_set_row_spacings (GTK_TABLE (table1), 8); + gtk_table_set_col_spacings (GTK_TABLE (table1), 8); + + from_entry = gtk_entry_new (); + gtk_widget_show (from_entry); + gtk_table_attach (GTK_TABLE (table1), from_entry, 1, 3, 0, 1, + GTK_EXPAND|GTK_FILL, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT(from_entry), "activate", + GTK_SIGNAL_FUNC(from_activated), summaryview); + + to_entry = gtk_entry_new (); + gtk_widget_show (to_entry); + gtk_table_attach (GTK_TABLE (table1), to_entry, 1, 3, 1, 2, + GTK_EXPAND|GTK_FILL, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT(to_entry), "activate", + GTK_SIGNAL_FUNC(to_activated), summaryview); + + subject_entry = gtk_entry_new (); + gtk_widget_show (subject_entry); + gtk_table_attach (GTK_TABLE (table1), subject_entry, 1, 3, 2, 3, + GTK_EXPAND|GTK_FILL, 0, 0, 0); + gtk_signal_connect(GTK_OBJECT(subject_entry), "activate", + GTK_SIGNAL_FUNC(subject_activated), summaryview); + + from_label = gtk_label_new (_("From:")); + gtk_widget_show (from_label); + gtk_table_attach (GTK_TABLE (table1), from_label, 0, 1, 0, 1, + GTK_FILL, 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (from_label), GTK_JUSTIFY_RIGHT); + gtk_misc_set_alignment (GTK_MISC (from_label), 1, 0.5); + + to_label = gtk_label_new (_("To:")); + gtk_widget_show (to_label); + gtk_table_attach (GTK_TABLE (table1), to_label, 0, 1, 1, 2, + GTK_FILL, 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (to_label), GTK_JUSTIFY_RIGHT); + gtk_misc_set_alignment (GTK_MISC (to_label), 1, 0.5); + + subject_label = gtk_label_new (_("Subject:")); + gtk_widget_show (subject_label); + + gtk_table_attach (GTK_TABLE (table1), subject_label, 0, 1, 2, 3, + GTK_FILL, 0, 0, 0); + gtk_label_set_justify (GTK_LABEL (subject_label), GTK_JUSTIFY_RIGHT); + gtk_misc_set_alignment (GTK_MISC (subject_label), 1, 0.5); + + checkbtn_hbox = gtk_hbox_new (FALSE, 8); + gtk_widget_show (checkbtn_hbox); + gtk_box_pack_start (GTK_BOX (vbox1), checkbtn_hbox, TRUE, TRUE, 0); + gtk_container_set_border_width (GTK_CONTAINER (checkbtn_hbox), 8); + + case_checkbtn = gtk_check_button_new_with_label (_("Case sensitive")); + gtk_widget_show (case_checkbtn); + gtk_box_pack_start (GTK_BOX (checkbtn_hbox), case_checkbtn, + FALSE, FALSE, 0); + + backward_checkbtn = + gtk_check_button_new_with_label (_("Backward search")); + gtk_widget_show (backward_checkbtn); + gtk_box_pack_start (GTK_BOX (checkbtn_hbox), backward_checkbtn, + FALSE, FALSE, 0); + + all_checkbtn = + gtk_check_button_new_with_label (_("Select all matched")); + gtk_widget_show (all_checkbtn); + gtk_box_pack_start (GTK_BOX (checkbtn_hbox), all_checkbtn, + FALSE, FALSE, 0); + + gtkut_button_set_create(&confirm_area, + &search_btn, _("Search"), + &clear_btn, _("Clear"), + &close_btn, _("Close")); + gtk_widget_show (confirm_area); + gtk_box_pack_start (GTK_BOX (vbox1), confirm_area, FALSE, FALSE, 0); + gtk_widget_grab_default(search_btn); + + gtk_signal_connect(GTK_OBJECT(search_btn), "clicked", + GTK_SIGNAL_FUNC(summary_search_execute), + summaryview); + gtk_signal_connect(GTK_OBJECT(clear_btn), "clicked", + GTK_SIGNAL_FUNC(summary_search_clear), + summaryview); + gtk_signal_connect_object(GTK_OBJECT(close_btn), "clicked", + GTK_SIGNAL_FUNC(gtk_widget_hide), + GTK_OBJECT(window)); + +} + +#define STRDUP_MBSTOWCS(wcs, s) \ +{ \ + wcs = g_malloc((strlen(s) + 1) * sizeof(wchar_t)); \ + mbstowcs(wcs, s, strlen(s) + 1); \ +} + +static void summary_search_execute(GtkButton *button, gpointer data) +{ + SummaryView *summaryview = data; + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCTreeNode *node; + MsgInfo *msginfo; + gboolean case_sens; + gboolean backward; + gboolean search_all; + gboolean all_searched = FALSE; + gboolean from_matched; + gboolean to_matched; + gboolean subj_matched; + wchar_t *wcs_hs, *fromwcs, *towcs, *subjwcs; + wchar_t *(* WCSFindFunc) (const wchar_t *haystack, + const wchar_t *needle); + + case_sens = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON(case_checkbtn)); + backward = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON(backward_checkbtn)); + search_all = gtk_toggle_button_get_active + (GTK_TOGGLE_BUTTON(all_checkbtn)); + + if (case_sens) +#if HAVE_WCSSTR + WCSFindFunc = wcsstr; +#else +#if HAVE_WCSWCS + WCSFindFunc = wcswcs; +#else + WCSFindFunc = wcscasestr; +#endif +#endif /* HAVE_WCSSTR */ + else + WCSFindFunc = wcscasestr; + + fromwcs = (wchar_t *)GTK_ENTRY(from_entry)->text; + towcs = (wchar_t *)GTK_ENTRY(to_entry)->text; + subjwcs = (wchar_t *)GTK_ENTRY(subject_entry)->text; + + if (search_all) { + gtk_clist_freeze(GTK_CLIST(ctree)); + gtk_clist_unselect_all(GTK_CLIST(ctree)); + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + } else if (!summaryview->selected) { + if (backward) + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end); + else + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + + if (!node) return; + } else { + if (backward) + node = GTK_CTREE_NODE_PREV(summaryview->selected); + else + node = GTK_CTREE_NODE_NEXT(summaryview->selected); + } + + for (;;) { + if (!node) { + gchar *str; + AlertValue val; + + if (search_all) { + gtk_clist_thaw(GTK_CLIST(ctree)); + break; + } + + if (all_searched) { + alertpanel_message + (_("Search failed"), + _("Search string not found.")); + break; + } + + if (backward) + str = _("Beginning of list reached; continue from end?"); + else + str = _("End of list reached; continue from beginning?"); + + val = alertpanel(_("Search finished"), str, + _("Yes"), _("No"), NULL); + if (G_ALERTDEFAULT == val) { + if (backward) + node = GTK_CTREE_NODE + (GTK_CLIST(ctree)->row_list_end); + else + node = GTK_CTREE_NODE + (GTK_CLIST(ctree)->row_list); + + all_searched = TRUE; + + manage_window_focus_in(window, NULL, NULL); + } else + break; + } + + from_matched = to_matched = subj_matched = FALSE; + + msginfo = gtk_ctree_node_get_row_data(ctree, node); + + if (*fromwcs && msginfo->from) { + STRDUP_MBSTOWCS(wcs_hs, msginfo->from); + if (WCSFindFunc(wcs_hs, fromwcs) != NULL) + from_matched = TRUE; + g_free(wcs_hs); + } + if (*towcs && msginfo->to) { + STRDUP_MBSTOWCS(wcs_hs, msginfo->to); + if (WCSFindFunc(wcs_hs, towcs) != NULL) + to_matched = TRUE; + g_free(wcs_hs); + } + if (*subjwcs && msginfo->subject) { + STRDUP_MBSTOWCS(wcs_hs, msginfo->subject); + if (WCSFindFunc(wcs_hs, subjwcs) != NULL) + subj_matched = TRUE; + g_free(wcs_hs); + } + + if (from_matched || to_matched || subj_matched) { + if (search_all) + gtk_ctree_select(ctree, node); + else { + gtk_clist_freeze(GTK_CLIST(ctree)); + gtk_clist_unselect_all(GTK_CLIST(ctree)); + gtk_ctree_select(ctree, node); + gtk_ctree_node_moveto(ctree, node, 0, 0.5, 0); + gtkut_ctree_set_focus_row(ctree, node); + gtk_clist_thaw(GTK_CLIST(ctree)); + break; + } + } + + node = backward ? GTK_CTREE_NODE_PREV(node) + : GTK_CTREE_NODE_NEXT(node); + } +} + +static void summary_search_clear(GtkButton *button, gpointer data) +{ + gtk_editable_delete_text(GTK_EDITABLE(from_entry), 0, -1); + gtk_editable_delete_text(GTK_EDITABLE(to_entry), 0, -1); + gtk_editable_delete_text(GTK_EDITABLE(subject_entry), 0, -1); +} + +static void from_activated(void) +{ + gtk_widget_grab_focus(to_entry); +} + +static void to_activated(void) +{ + gtk_widget_grab_focus(subject_entry); +} + +static void subject_activated(void) +{ + gtk_button_clicked(GTK_BUTTON(search_btn)); +} + +static void key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event && event->keyval == GDK_Escape) + gtk_widget_hide(window); +} diff --git a/src/summary_search.h b/src/summary_search.h new file mode 100644 index 000000000..f2448fb06 --- /dev/null +++ b/src/summary_search.h @@ -0,0 +1,31 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __SUMMARY_SEARCH_H__ +#define __SUMMARY_SEARCH_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +#include "summaryview.h" + +void summary_search(SummaryView *summaryview); +void summary_search_cb(gpointer data, guint action, GtkWidget *widget); + +#endif __SUMMARY_SEARCH_H__ diff --git a/src/summaryview.c b/src/summaryview.c new file mode 100644 index 000000000..9afef154c --- /dev/null +++ b/src/summaryview.c @@ -0,0 +1,2935 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkpixmap.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkcontainer.h> +#include <gtk/gtksignal.h> +#include <gtk/gtktext.h> +#include <gtk/gtkmenu.h> +#include <gtk/gtkmenuitem.h> +#include <gtk/gtkitemfactory.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkhbox.h> +#include <gtk/gtkwindow.h> +#include <gtk/gtkstyle.h> +#include <gtk/gtkarrow.h> +#include <gtk/gtkeventbox.h> +#include <gtk/gtkstatusbar.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <unistd.h> + +#include "intl.h" +#include "main.h" +#include "menu.h" +#include "mainwindow.h" +#include "folderview.h" +#include "summaryview.h" +#include "messageview.h" +#include "foldersel.h" +#include "procmsg.h" +#include "procheader.h" +#include "headerwindow.h" +#include "sourcewindow.h" +#include "prefs_common.h" +#include "account.h" +#include "compose.h" +#include "utils.h" +#include "gtkutils.h" +#include "filesel.h" +#include "alertpanel.h" +#include "inputdialog.h" +#include "statusbar.h" +#include "filter.h" +#include "folder.h" + +#include "pixmaps/dir-open.xpm" +#include "pixmaps/mark.xpm" +#include "pixmaps/deleted.xpm" +#include "pixmaps/new.xpm" +#include "pixmaps/unread.xpm" +#include "pixmaps/replied.xpm" +#include "pixmaps/forwarded.xpm" +#include "pixmaps/clip.xpm" + +#define STATUSBAR_PUSH(mainwin, str) \ +{ \ + gtk_statusbar_push(GTK_STATUSBAR(mainwin->statusbar), \ + mainwin->summaryview_cid, str); \ + gtkut_widget_wait_for_draw(mainwin->hbox_stat); \ +} + +#define STATUSBAR_POP(mainwin) \ +{ \ + gtk_statusbar_pop(GTK_STATUSBAR(mainwin->statusbar), \ + mainwin->summaryview_cid); \ +} + +#define SUMMARY_COL_MARK_WIDTH 10 +#define SUMMARY_COL_UNREAD_WIDTH 13 +#define SUMMARY_COL_MIME_WIDTH 10 + +static GdkFont *smallfont; + +static GdkPixmap *folderxpm; +static GdkBitmap *folderxpmmask; + +static GdkPixmap *markxpm; +static GdkBitmap *markxpmmask; +static GdkPixmap *deletedxpm; +static GdkBitmap *deletedxpmmask; + +static GdkPixmap *newxpm; +static GdkBitmap *newxpmmask; +static GdkPixmap *unreadxpm; +static GdkBitmap *unreadxpmmask; +static GdkPixmap *repliedxpm; +static GdkBitmap *repliedxpmmask; +static GdkPixmap *forwardedxpm; +static GdkBitmap *forwardedxpmmask; + +static GdkPixmap *clipxpm; +static GdkBitmap *clipxpmmask; + +static void summary_free_msginfo_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); +static void summary_set_marks_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); +static void summary_write_cache_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); + +static void summary_set_menu_sensitive (SummaryView *summaryview); + +static GtkCTreeNode *summary_find_next_unread_msg + (SummaryView *summaryview, + GtkCTreeNode *current_node); +static GtkCTreeNode *summary_find_msg_by_msgnum + (SummaryView *summaryview, + guint msgnum); +#if 0 +static GtkCTreeNode *summary_find_prev_unread_msg + (SummaryView *summaryview, + GtkCTreeNode *current_node); +#endif + +static void summary_update_status (SummaryView *summaryview); + +/* display functions */ +static void summary_status_show (SummaryView *summaryview); +static void summary_set_ctree_from_list (SummaryView *summaryview, + GSList *mlist); +static void summary_set_header (gchar *text[], + MsgInfo *msginfo); +static void summary_display_msg (SummaryView *summaryview, + GtkCTreeNode *row, + gboolean new_window); +static void summary_toggle_view (SummaryView *summaryview); +static void summary_set_row_marks (SummaryView *summaryview, + GtkCTreeNode *row); + +/* message handling */ +static void summary_mark_row (SummaryView *summaryview, + GtkCTreeNode *row); +static void summary_mark_row_as_read (SummaryView *summaryview, + GtkCTreeNode *row); +static void summary_mark_row_as_unread (SummaryView *summaryview, + GtkCTreeNode *row); +static void summary_delete_row (SummaryView *summaryview, + GtkCTreeNode *row); +static void summary_unmark_row (SummaryView *summaryview, + GtkCTreeNode *row); +static void summary_move_row_to (SummaryView *summaryview, + GtkCTreeNode *row, + FolderItem *to_folder); +static void summary_copy_row_to (SummaryView *summaryview, + GtkCTreeNode *row, + FolderItem *to_folder); + +static void summary_delete_duplicated_func + (GtkCTree *ctree, + GtkCTreeNode *node, + SummaryView *summaryview); + +static void summary_execute_move (SummaryView *summaryview); +static void summary_execute_move_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); +static void summary_execute_copy (SummaryView *summaryview); +static void summary_execute_copy_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); +static void summary_execute_delete (SummaryView *summaryview); +static void summary_execute_delete_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); + +/* thread functions */ +static void summary_thread_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); +static void summary_unthread_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); +static void summary_unthread_for_exec (SummaryView *summaryview); +static void summary_unthread_for_exec_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); + +static void summary_filter_func (GtkCTree *ctree, + GtkCTreeNode *node, + gpointer data); + +/* callback functions */ +static void summary_toggle_pressed (GtkWidget *eventbox, + GdkEventButton *event, + SummaryView *summaryview); +static void summary_button_pressed (GtkWidget *ctree, + GdkEventButton *event, + SummaryView *summaryview); +static void summary_button_released (GtkWidget *ctree, + GdkEventButton *event, + SummaryView *summaryview); +static void summary_key_pressed (GtkWidget *ctree, + GdkEventKey *event, + SummaryView *summaryview); +static void summary_open_row (GtkSCTree *sctree, + SummaryView *summaryview); +static void summary_selected (GtkCTree *ctree, + GtkCTreeNode *row, + gint column, + SummaryView *summaryview); +static void summary_col_resized (GtkCList *clist, + gint column, + gint width, + SummaryView *summaryview); +static void summary_reply_cb (SummaryView *summaryview, + guint action, + GtkWidget *widget); +static void summary_show_all_header_cb (SummaryView *summaryview, + guint action, + GtkWidget *widget); + +static void summary_num_clicked (GtkWidget *button, + SummaryView *summaryview); +static void summary_size_clicked (GtkWidget *button, + SummaryView *summaryview); +static void summary_date_clicked (GtkWidget *button, + SummaryView *summaryview); +static void summary_from_clicked (GtkWidget *button, + SummaryView *summaryview); +static void summary_subject_clicked (GtkWidget *button, + SummaryView *summaryview); + +static void summary_start_drag (GtkWidget *widget, + int button, + GdkEvent *event, + SummaryView *summaryview); +static void summary_drag_data_get (GtkWidget *widget, + GdkDragContext *drag_context, + GtkSelectionData *selection_data, + guint info, + guint time, + SummaryView *summaryview); + +/* custom compare functions for sorting */ + +static gint summary_cmp_by_num (GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2); +static gint summary_cmp_by_size (GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2); +static gint summary_cmp_by_date (GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2); +static gint summary_cmp_by_from (GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2); +static gint summary_cmp_by_subject (GtkCList *clist, + gconstpointer ptr1, + gconstpointer ptr2); + +GtkTargetEntry summary_drag_types[1] = +{ + {"text/plain", GTK_TARGET_SAME_APP, TARGET_DUMMY} +}; + +static GtkItemFactoryEntry summary_popup_entries[] = +{ + {N_("/M_ove..."), NULL, summary_move_to, 0, NULL}, + {N_("/_Copy..."), NULL, summary_copy_to, 0, NULL}, + {N_("/_Delete"), NULL, summary_delete, 0, NULL}, + {N_("/E_xecute"), NULL, summary_execute, 0, NULL}, + {N_("/_Mark"), NULL, NULL, 0, "<Branch>"}, + {N_("/_Mark/_Mark"), NULL, summary_mark, 0, NULL}, + {N_("/_Mark/_Unmark"), NULL, summary_unmark, 0, NULL}, + {N_("/_Mark/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Mark/Mark as unr_ead"), NULL, summary_mark_as_unread, 0, NULL}, + {N_("/_Mark/Make it as _being read"), + NULL, summary_mark_as_read, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Reply"), NULL, summary_reply_cb, COMPOSE_REPLY, NULL}, + {N_("/Reply to a_ll"), NULL, summary_reply_cb, COMPOSE_REPLY_TO_ALL, NULL}, + {N_("/_Forward"), NULL, summary_reply_cb, COMPOSE_FORWARD, NULL}, + {N_("/Forward as an a_ttachment"), + NULL, summary_reply_cb, COMPOSE_FORWARD_AS_ATTACH, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/Open in new _window"), NULL, summary_open_msg, 0, NULL}, + {N_("/View so_urce"), NULL, summary_view_source, 0, NULL}, + {N_("/Show all _header"), NULL, summary_show_all_header_cb, 0, NULL}, + {N_("/Re_edit"), NULL, summary_reedit, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/_Save as..."), NULL, summary_save_as, 0, NULL}, + {N_("/_Print..."), NULL, summary_print, 0, NULL}, + {N_("/---"), NULL, NULL, 0, "<Separator>"}, + {N_("/Select _all"), NULL, summary_select_all, 0, NULL} +}; + +SummaryView *summary_create(void) +{ + SummaryView *summaryview; + gchar *titles[N_SUMMARY_COLS] = {_("M"), _("U")}; + GtkWidget *vbox; + GtkWidget *scrolledwin; + GtkWidget *ctree; + GtkWidget *hbox; + GtkWidget *statlabel_folder; + GtkWidget *statlabel_select; + GtkWidget *statlabel_msgs; + GtkWidget *toggle_eventbox; + GtkWidget *toggle_arrow; + GtkWidget *popupmenu; + GtkItemFactory *popupfactory; + gint n_entries; + gint i; + + debug_print(_("Creating summary view...\n")); + summaryview = g_new0(SummaryView, 1); + + vbox = gtk_vbox_new(FALSE, 2); + + scrolledwin = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_POLICY_AUTOMATIC, + GTK_POLICY_ALWAYS); + gtk_box_pack_start(GTK_BOX(vbox), scrolledwin, TRUE, TRUE, 0); + gtk_widget_set_usize(vbox, + prefs_common.summaryview_width, + prefs_common.summaryview_height); + + if (prefs_common.trans_hdr) { + titles[S_COL_NUMBER] = _("No."); + titles[S_COL_DATE] = _("Date"); + titles[S_COL_FROM] = _("From"); + titles[S_COL_SUBJECT] = _("Subject"); + } else { + titles[S_COL_NUMBER] = "No."; + titles[S_COL_DATE] = "Date"; + titles[S_COL_FROM] = "From"; + titles[S_COL_SUBJECT] = "Subject"; + } + titles[S_COL_SIZE] = _("Size"); + + ctree = gtk_sctree_new_with_titles(N_SUMMARY_COLS, S_COL_SUBJECT, titles); + gtk_scrolled_window_set_hadjustment(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_CLIST(ctree)->hadjustment); + gtk_scrolled_window_set_vadjustment(GTK_SCROLLED_WINDOW(scrolledwin), + GTK_CLIST(ctree)->vadjustment); + gtk_container_add(GTK_CONTAINER(scrolledwin), ctree); + gtk_clist_set_selection_mode(GTK_CLIST(ctree), GTK_SELECTION_EXTENDED); + gtk_clist_set_column_justification(GTK_CLIST(ctree), S_COL_MARK, + GTK_JUSTIFY_CENTER); + gtk_clist_set_column_justification(GTK_CLIST(ctree), S_COL_UNREAD, + GTK_JUSTIFY_CENTER); + gtk_clist_set_column_justification(GTK_CLIST(ctree), S_COL_MIME, + GTK_JUSTIFY_CENTER); + gtk_clist_set_column_justification(GTK_CLIST(ctree), S_COL_NUMBER, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_justification(GTK_CLIST(ctree), S_COL_SIZE, + GTK_JUSTIFY_RIGHT); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_MARK, + SUMMARY_COL_MARK_WIDTH); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_UNREAD, + SUMMARY_COL_UNREAD_WIDTH); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_MIME, + SUMMARY_COL_MIME_WIDTH); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_NUMBER, + prefs_common.summary_col_number); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_SIZE, + prefs_common.summary_col_size); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_DATE, + prefs_common.summary_col_date); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_FROM, + prefs_common.summary_col_from); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_SUBJECT, + prefs_common.summary_col_subject); + gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_DOTTED); + gtk_ctree_set_expander_style(GTK_CTREE(ctree), + GTK_CTREE_EXPANDER_SQUARE); +#if 0 + gtk_ctree_set_line_style(GTK_CTREE(ctree), GTK_CTREE_LINES_NONE); + gtk_ctree_set_expander_style(GTK_CTREE(ctree), + GTK_CTREE_EXPANDER_TRIANGLE); +#endif + gtk_ctree_set_indent(GTK_CTREE(ctree), 18); + gtk_object_set_user_data(GTK_OBJECT(ctree), summaryview); + + /* don't let title buttons take key focus */ + for (i = 0; i < N_SUMMARY_COLS; i++) + GTK_WIDGET_UNSET_FLAGS(GTK_CLIST(ctree)->column[i].button, + GTK_CAN_FOCUS); + + /* connect signal to the buttons for sorting */ + gtk_signal_connect + (GTK_OBJECT(GTK_CLIST(ctree)->column[S_COL_NUMBER].button), + "clicked", + GTK_SIGNAL_FUNC(summary_num_clicked), + summaryview); + gtk_signal_connect + (GTK_OBJECT(GTK_CLIST(ctree)->column[S_COL_SIZE].button), + "clicked", + GTK_SIGNAL_FUNC(summary_size_clicked), + summaryview); + gtk_signal_connect + (GTK_OBJECT(GTK_CLIST(ctree)->column[S_COL_DATE].button), + "clicked", + GTK_SIGNAL_FUNC(summary_date_clicked), + summaryview); + gtk_signal_connect + (GTK_OBJECT(GTK_CLIST(ctree)->column[S_COL_FROM].button), + "clicked", + GTK_SIGNAL_FUNC(summary_from_clicked), + summaryview); + gtk_signal_connect + (GTK_OBJECT(GTK_CLIST(ctree)->column[S_COL_SUBJECT].button), + "clicked", + GTK_SIGNAL_FUNC(summary_subject_clicked), + summaryview); + + /* create status label */ + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_end(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + statlabel_folder = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(hbox), statlabel_folder, FALSE, FALSE, 2); + statlabel_select = gtk_label_new(""); + gtk_box_pack_start(GTK_BOX(hbox), statlabel_select, FALSE, FALSE, 16); + + /* toggle view button */ + toggle_eventbox = gtk_event_box_new(); + gtk_box_pack_end(GTK_BOX(hbox), toggle_eventbox, FALSE, FALSE, 4); + toggle_arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT); + gtk_container_add(GTK_CONTAINER(toggle_eventbox), toggle_arrow); + + statlabel_msgs = gtk_label_new(""); + gtk_box_pack_end(GTK_BOX(hbox), statlabel_msgs, FALSE, FALSE, 4); + + /* create popup menu */ + n_entries = sizeof(summary_popup_entries) / + sizeof(summary_popup_entries[0]); + popupmenu = menu_create_items(summary_popup_entries, n_entries, + "<SummaryView>", &popupfactory, + summaryview); + + /* connect signals */ + gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", + GTK_SIGNAL_FUNC(summary_selected), summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", + GTK_SIGNAL_FUNC(summary_button_pressed), + summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", + GTK_SIGNAL_FUNC(summary_button_released), + summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", + GTK_SIGNAL_FUNC(summary_key_pressed), summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "resize_column", + GTK_SIGNAL_FUNC(summary_col_resized), summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "open_row", + GTK_SIGNAL_FUNC(summary_open_row), summaryview); + gtk_signal_connect(GTK_OBJECT(toggle_eventbox), "button_press_event", + GTK_SIGNAL_FUNC(summary_toggle_pressed), + summaryview); + + summaryview->vbox = vbox; + summaryview->scrolledwin = scrolledwin; + summaryview->ctree = ctree; + summaryview->hbox = hbox; + summaryview->statlabel_folder = statlabel_folder; + summaryview->statlabel_select = statlabel_select; + summaryview->statlabel_msgs = statlabel_msgs; + summaryview->toggle_eventbox = toggle_eventbox; + summaryview->toggle_arrow = toggle_arrow; + summaryview->popupmenu = popupmenu; + summaryview->popupfactory = popupfactory; + summaryview->msg_is_toggled_on = TRUE; + summaryview->sort_mode = SORT_BY_NONE; + summaryview->sort_type = GTK_SORT_ASCENDING; + + summary_change_display_item(summaryview); + + gtk_widget_show_all(vbox); + + return summaryview; +} + +void summary_init(SummaryView *summaryview) +{ + GtkStyle *style; + GtkWidget *pixmap; + + PIXMAP_CREATE(summaryview->ctree, markxpm, markxpmmask, mark_xpm); + PIXMAP_CREATE(summaryview->ctree, deletedxpm, deletedxpmmask, + deleted_xpm); + PIXMAP_CREATE(summaryview->ctree, newxpm, newxpmmask, new_xpm); + PIXMAP_CREATE(summaryview->ctree, unreadxpm, unreadxpmmask, unread_xpm); + PIXMAP_CREATE(summaryview->ctree, repliedxpm, repliedxpmmask, + replied_xpm); + PIXMAP_CREATE(summaryview->ctree, forwardedxpm, forwardedxpmmask, + forwarded_xpm); + PIXMAP_CREATE(summaryview->ctree, clipxpm, clipxpmmask, clip_xpm); + PIXMAP_CREATE(summaryview->hbox, folderxpm, folderxpmmask, + DIRECTORY_OPEN_XPM); + + pixmap = gtk_pixmap_new(clipxpm, clipxpmmask); + gtk_clist_set_column_widget(GTK_CLIST(summaryview->ctree), + S_COL_MIME, pixmap); + gtk_widget_show(pixmap); + + if (!smallfont) + smallfont = gdk_fontset_load(SMALL_FONT); + + style = gtk_style_copy(gtk_widget_get_style + (summaryview->statlabel_folder)); + if (smallfont) style->font = smallfont; + gtk_widget_set_style(summaryview->statlabel_folder, style); + gtk_widget_set_style(summaryview->statlabel_select, style); + gtk_widget_set_style(summaryview->statlabel_msgs, style); + + pixmap = gtk_pixmap_new(folderxpm, folderxpmmask); + gtk_box_pack_start(GTK_BOX(summaryview->hbox), pixmap, FALSE, FALSE, 4); + gtk_box_reorder_child(GTK_BOX(summaryview->hbox), pixmap, 0); + gtk_widget_show(pixmap); + + summary_clear_list(summaryview); + summary_set_menu_sensitive(summaryview); +} + +gboolean summary_show(SummaryView *summaryview, FolderItem *item, + gboolean update_cache) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCTreeNode *node; + GSList *mlist = NULL; + gchar *buf; + gboolean is_refresh; + guint prev_msgnum = 0; + + STATUSBAR_POP(summaryview->mainwin); + + is_refresh = (item == summaryview->folder_item) ? TRUE : FALSE; + if (is_refresh) + prev_msgnum = summary_get_current_msgnum(summaryview); + +#if 0 + /* process the marks if any */ + if (summaryview->deleted > 0 || summaryview->moved > 0) { + AlertValue val; + + val = alertpanel(_("Process mark"), + _("Some marks are left. Process it?"), + _("Yes"), _("No"), _("Cancel")); + if (G_ALERTDEFAULT == val) + summary_execute(summaryview); + else if (G_ALERTALTERNATE == val) + summary_write_cache(summaryview); + else + return FALSE; + } else +#endif + summary_write_cache(summaryview); + + gtk_clist_freeze(GTK_CLIST(ctree)); + + summary_clear_list(summaryview); + summary_set_menu_sensitive(summaryview); + messageview_clear(summaryview->messageview); + + buf = NULL; + if (!item || !item->path || !item->parent || + (item->folder->type == F_MH && + ((buf = folder_item_get_path(item)) == NULL || + change_dir(buf) < 0))) { + g_free(buf); + debug_print(_("empty folder\n\n")); + summary_clear_all(summaryview); + summaryview->folder_item = item; + gtk_clist_thaw(GTK_CLIST(ctree)); + return TRUE; + } + g_free(buf); + + summaryview->folder_item = item; + + gtk_signal_disconnect_by_data(GTK_OBJECT(ctree), summaryview); + + buf = g_strdup_printf(_("Scanning folder (%s)..."), item->path); + debug_print("%s\n", buf); + STATUSBAR_PUSH(summaryview->mainwin, buf); + g_free(buf); + + main_window_cursor_wait(summaryview->mainwin); + + mlist = item->folder->get_msg_list(item->folder, item, !update_cache); + + STATUSBAR_POP(summaryview->mainwin); + + /* set ctree and hash table from the msginfo list + creating thread, and count the number of messages */ + summary_set_ctree_from_list(summaryview, mlist); + + g_slist_free(mlist); + + summary_write_cache(summaryview); + + gtk_signal_connect(GTK_OBJECT(ctree), "tree_select_row", + GTK_SIGNAL_FUNC(summary_selected), summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_press_event", + GTK_SIGNAL_FUNC(summary_button_pressed), + summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "button_release_event", + GTK_SIGNAL_FUNC(summary_button_released), + summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "key_press_event", + GTK_SIGNAL_FUNC(summary_key_pressed), summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "resize_column", + GTK_SIGNAL_FUNC(summary_col_resized), summaryview); + gtk_signal_connect(GTK_OBJECT(ctree), "open_row", + GTK_SIGNAL_FUNC(summary_open_row), summaryview); + + /*connect drag and drop signal*/ + gtk_signal_connect (GTK_OBJECT (ctree),"start_drag", + GTK_SIGNAL_FUNC (summary_start_drag), + summaryview); + gtk_signal_connect (GTK_OBJECT (ctree),"drag_data_get", + GTK_SIGNAL_FUNC (summary_drag_data_get), + summaryview); + + gtk_clist_thaw(GTK_CLIST(ctree)); + + if (is_refresh) { + summary_select_by_msgnum(summaryview, prev_msgnum); + } else { + /* select first unread message */ + node = summary_find_next_unread_msg(summaryview, NULL); + if (node == NULL && GTK_CLIST(ctree)->row_list != NULL) + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end); + if (node) { + GTK_EVENTS_FLUSH(); + gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0); + gtk_widget_grab_focus(GTK_WIDGET(ctree)); + if (prefs_common.open_unread_on_enter) + summaryview->display_msg = TRUE; + gtk_sctree_select(GTK_SCTREE(ctree), node); + } + } + + summary_status_show(summaryview); + + summary_set_menu_sensitive(summaryview); + + main_window_set_toolbar_sensitive + (summaryview->mainwin, summaryview->selected ? TRUE : FALSE); + + debug_print("\n"); + STATUSBAR_PUSH(summaryview->mainwin, _("done.")); + + main_window_cursor_normal(summaryview->mainwin); + + return TRUE; +} + +void summary_clear_list(SummaryView *summaryview) +{ + GtkCList *clist = GTK_CLIST(summaryview->ctree); + gint optimal_width; + + gtk_clist_freeze(clist); + + gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), + NULL, summary_free_msginfo_func, NULL); + + summaryview->folder_item = NULL; + + summaryview->display_msg = FALSE; + + summaryview->selected = NULL; + summaryview->displayed = NULL; + summaryview->newmsgs = summaryview->unread = 0; + summaryview->messages = summaryview->total_size = 0; + summaryview->deleted = summaryview->moved = 0; + summaryview->copied = 0; + if (summaryview->msgid_table) { + g_hash_table_destroy(summaryview->msgid_table); + summaryview->msgid_table = NULL; + } + summaryview->mlist = NULL; + if (summaryview->folder_table) { + g_hash_table_destroy(summaryview->folder_table); + summaryview->folder_table = NULL; + } + summaryview->sort_mode = SORT_BY_NONE; + summaryview->sort_type = GTK_SORT_ASCENDING; + + gtk_clist_clear(clist); + optimal_width = gtk_clist_optimal_column_width(clist, S_COL_SUBJECT); + gtk_clist_set_column_width(clist, S_COL_SUBJECT, optimal_width); + + gtk_clist_thaw(clist); +} + +void summary_clear_all(SummaryView *summaryview) +{ + summary_clear_list(summaryview); + summary_set_menu_sensitive(summaryview); + main_window_set_toolbar_sensitive(summaryview->mainwin, FALSE); + summary_status_show(summaryview); +} + +static void summary_set_menu_sensitive(SummaryView *summaryview) +{ + GtkItemFactory *ifactory = summaryview->popupfactory; + GtkCList *clist = GTK_CLIST(summaryview->ctree); + gboolean sens; + SummarySelection selection; + + if (!clist->row_list) + selection = SUMMARY_NONE; + else if (!clist->selection) + selection = SUMMARY_SELECTED_NONE; + else if (!clist->selection->next) + selection = SUMMARY_SELECTED_SINGLE; + else + selection = SUMMARY_SELECTED_MULTIPLE; + + main_window_set_menu_sensitive(summaryview->mainwin, selection); + + if (selection == SUMMARY_NONE) { + GtkWidget *submenu; + + submenu = gtk_item_factory_get_widget + (summaryview->popupfactory, "/Mark"); + menu_set_insensitive_all(GTK_MENU_SHELL(submenu)); + menu_set_insensitive_all + (GTK_MENU_SHELL(summaryview->popupmenu)); + return; + } + + if (summaryview->folder_item->folder->type != F_NEWS) { + if (summaryview->folder_item->stype != F_TRASH) + menu_set_sensitive(ifactory, "/Delete", TRUE); + menu_set_sensitive(ifactory, "/Move...", TRUE); + menu_set_sensitive(ifactory, "/Copy...", TRUE); + } + menu_set_sensitive(ifactory, "/Execute", TRUE); + + sens = (selection == SUMMARY_SELECTED_MULTIPLE) ? FALSE : TRUE; + menu_set_sensitive(ifactory, "/Reply", sens); + menu_set_sensitive(ifactory, "/Reply to all", sens); + menu_set_sensitive(ifactory, "/Forward", sens); + menu_set_sensitive(ifactory, "/Forward as an attachment", sens); + + menu_set_sensitive(ifactory, "/Open in new window", sens); + menu_set_sensitive(ifactory, "/View source", sens); + menu_set_sensitive(ifactory, "/Show all header", sens); + if (summaryview->folder_item->stype == F_DRAFT) + menu_set_sensitive(ifactory, "/Reedit", sens); + + menu_set_sensitive(ifactory, "/Save as...", sens); + menu_set_sensitive(ifactory, "/Print...", TRUE); + + menu_set_sensitive(ifactory, "/Mark", TRUE); + + menu_set_sensitive(ifactory, "/Mark/Mark", TRUE); + menu_set_sensitive(ifactory, "/Mark/Unmark", TRUE); + + menu_set_sensitive(ifactory, "/Mark/Mark as unread", TRUE); + menu_set_sensitive(ifactory, "/Mark/Make it as being read", TRUE); + + menu_set_sensitive(ifactory, "/Select all", TRUE); +} + +void summary_select_next_unread(SummaryView *summaryview) +{ + GtkCTreeNode *node; + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + + node = summary_find_next_unread_msg(summaryview, + summaryview->selected); + + if (node) { + gtk_sctree_unselect_all(GTK_SCTREE(ctree)); + gtk_sctree_select(GTK_SCTREE(ctree), node); + if (summaryview->displayed == node) + summaryview->displayed = NULL; + summary_display_msg(summaryview, node, FALSE); + } else { + AlertValue val; + + val = alertpanel(_("No unread message"), + _("No unread message found. Go to next folder?"), + _("Yes"), _("No"), NULL); + if (val == G_ALERTDEFAULT) { + if (gtk_signal_n_emissions_by_name + (GTK_OBJECT(ctree), "key_press_event") > 0) + gtk_signal_emit_stop_by_name + (GTK_OBJECT(ctree), + "key_press_event"); + folderview_select_next_unread(summaryview->folderview); + } + } +} + +void summary_select_by_msgnum(SummaryView *summaryview, guint msgnum) +{ + GtkCTreeNode *node; + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + + node = summary_find_msg_by_msgnum(summaryview, msgnum); + + if (node) { + gtk_sctree_unselect_all(GTK_SCTREE(ctree)); + gtk_sctree_select(GTK_SCTREE(ctree), node); + if (summaryview->displayed == node) + summaryview->displayed = NULL; + summary_display_msg(summaryview, node, FALSE); + } +} + +guint summary_get_current_msgnum(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + if (!summaryview->selected) + return 0; + msginfo = gtk_ctree_node_get_row_data(ctree, summaryview->selected); + return msginfo->msgnum; +} + +static GtkCTreeNode *summary_find_next_unread_msg(SummaryView *summaryview, + GtkCTreeNode *current_node) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCTreeNode *node; + MsgInfo *msginfo; + + if (current_node) + node = current_node; + //node = GTK_CTREE_NODE_NEXT(current_node); + else + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + + for (; node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { + msginfo = gtk_ctree_node_get_row_data(ctree, node); + if (MSG_IS_UNREAD(msginfo->flags)) break; + } + + return node; +} + +static GtkCTreeNode *summary_find_msg_by_msgnum(SummaryView *summaryview, + guint msgnum) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCTreeNode *node; + MsgInfo *msginfo; + + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + + for (; node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { + msginfo = gtk_ctree_node_get_row_data(ctree, node); + if (msginfo->msgnum == msgnum) break; + } + + return node; +} + +#if 0 +static GtkCTreeNode *summary_find_prev_unread_msg(SummaryView *summaryview, + GtkCTreeNode *current_node) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCTreeNode *node; + MsgInfo *msginfo; + + if (current_node) + node = current_node; + //node = GTK_CTREE_NODE_PREV(current_node); + else + node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list_end); + + for (; node != NULL; node = GTK_CTREE_NODE_PREV(node)) { + msginfo = gtk_ctree_node_get_row_data(ctree, node); + if (MSG_IS_UNREAD(msginfo->flags)) break; + } + + return node; +} +#endif + +static guint attract_hash_func(gconstpointer key) +{ + gchar *str; + gchar *p; + guint h; + + Xstrdup_a(str, (const gchar *)key, return 0); + trim_subject(str); + + p = str; + h = *p; + + if (h) { + for (p += 1; *p != '\0'; p++) + h = (h << 5) - h + *p; + } + + return h; +} + +static gint attract_compare_func(gconstpointer a, gconstpointer b) +{ + return subject_compare((const gchar *)a, (const gchar *)b) == 0; +} + +void summary_attract_by_subject(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCList *clist = GTK_CLIST(ctree); + GtkCTreeNode *src_node; + GtkCTreeNode *dst_node, *sibling; + GtkCTreeNode *tmp; + MsgInfo *src_msginfo, *dst_msginfo; + GHashTable *subject_table; + + debug_print(_("Attracting messages by subject...")); + STATUSBAR_PUSH(summaryview->mainwin, + _("Attracting messages by subject...")); + + main_window_cursor_wait(summaryview->mainwin); + gtk_clist_freeze(clist); + + subject_table = g_hash_table_new(attract_hash_func, + attract_compare_func); + + for (src_node = GTK_CTREE_NODE(clist->row_list); + src_node != NULL; + src_node = tmp) { + tmp = GTK_CTREE_ROW(src_node)->sibling; + src_msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(src_node); + if (!src_msginfo) continue; + if (!src_msginfo->subject) continue; + + /* find attracting node */ + dst_node = g_hash_table_lookup(subject_table, + src_msginfo->subject); + + if (dst_node) { + dst_msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(dst_node); + + /* if the time difference is more than 20 days, + don't attract */ + if (ABS(src_msginfo->date_t - dst_msginfo->date_t) + > 60 * 60 * 24 * 20) + continue; + + sibling = GTK_CTREE_ROW(dst_node)->sibling; + if (src_node != sibling) + gtk_ctree_move(ctree, src_node, NULL, sibling); + } + + g_hash_table_insert(subject_table, + src_msginfo->subject, src_node); + } + + g_hash_table_destroy(subject_table); + + gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0); + + gtk_clist_thaw(clist); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + + main_window_cursor_normal(summaryview->mainwin); +} + +static void summary_free_msginfo_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, node); + + if (msginfo) + procmsg_msginfo_free(msginfo); +} + +static void summary_set_marks_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + SummaryView *summaryview = data; + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(ctree, node); + + if (MSG_IS_NEW(msginfo->flags)) + summaryview->newmsgs++; + if (MSG_IS_UNREAD(msginfo->flags)) + summaryview->unread++; + if (MSG_IS_DELETED(msginfo->flags)) + summaryview->deleted++; + + summaryview->messages++; + summaryview->total_size += msginfo->size; + + summary_set_row_marks(summaryview, node); +} + +static void summary_update_status(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCTreeNode *node; + MsgInfo *msginfo; + + summaryview->newmsgs = summaryview->unread = + summaryview->messages = summaryview->total_size = + summaryview->deleted = summaryview->moved = summaryview->copied = 0; + + for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { + msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + + if (MSG_IS_NEW(msginfo->flags)) + summaryview->newmsgs++; + if (MSG_IS_UNREAD(msginfo->flags)) + summaryview->unread++; + if (MSG_IS_DELETED(msginfo->flags)) + summaryview->deleted++; + if (MSG_IS_MOVE(msginfo->flags)) + summaryview->moved++; + if (MSG_IS_COPY(msginfo->flags)) + summaryview->copied++; + summaryview->messages++; + summaryview->total_size += msginfo->size; + } +} + +static void summary_status_show(SummaryView *summaryview) +{ + gchar *str; + gchar *del, *mv, *cp; + gchar *sel; + gchar *spc; + GList *rowlist, *cur; + guint n_selected = 0; + off_t sel_size = 0; + MsgInfo *msginfo; + + if (!summaryview->folder_item) { + gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), ""); + gtk_label_set(GTK_LABEL(summaryview->statlabel_select), ""); + gtk_label_set(GTK_LABEL(summaryview->statlabel_msgs), ""); + return; + } + + rowlist = GTK_CLIST(summaryview->ctree)->selection; + for (cur = rowlist; cur != NULL; cur = cur->next) { + msginfo = gtk_ctree_node_get_row_data + (GTK_CTREE(summaryview->ctree), + GTK_CTREE_NODE(cur->data)); + sel_size += msginfo->size; + n_selected++; + } + + gtk_label_set(GTK_LABEL(summaryview->statlabel_folder), + summaryview->folder_item && + summaryview->folder_item->folder->type == F_NEWS + ? g_basename(summaryview->folder_item->path) + : summaryview->folder_item->path); + + if (summaryview->deleted) + del = g_strdup_printf(_("%d deleted"), summaryview->deleted); + else + del = g_strdup(""); + if (summaryview->moved) + mv = g_strdup_printf(_("%s%d moved"), + summaryview->deleted ? _(", ") : "", + summaryview->moved); + else + mv = g_strdup(""); + if (summaryview->copied) + cp = g_strdup_printf(_("%s%d copied"), + summaryview->deleted || + summaryview->moved ? _(", ") : "", + summaryview->copied); + else + cp = g_strdup(""); + + if (summaryview->deleted || summaryview->moved || summaryview->copied) + spc = " "; + else + spc = ""; + + if (n_selected) + sel = g_strdup_printf(" (%s)", to_human_readable(sel_size)); + else + sel = g_strdup(""); + str = g_strconcat(n_selected ? itos(n_selected) : "", + n_selected ? _(" item(s) selected") : "", + sel, spc, del, mv, cp, NULL); + gtk_label_set(GTK_LABEL(summaryview->statlabel_select), str); + g_free(str); + g_free(sel); + g_free(del); + g_free(mv); + g_free(cp); + + if (summaryview->folder_item && + summaryview->folder_item->folder->type == F_MH) { + str = g_strdup_printf(_("%d new, %d unread, %d total (%s)"), + summaryview->newmsgs, + summaryview->unread, + summaryview->messages, + to_human_readable(summaryview->total_size)); + } else { + str = g_strdup_printf(_("%d new, %d unread, %d total"), + summaryview->newmsgs, + summaryview->unread, + summaryview->messages); + } + gtk_label_set(GTK_LABEL(summaryview->statlabel_msgs), str); + g_free(str); + + folderview_update_msg_num(summaryview->folderview, + summaryview->folderview->opened, + summaryview->newmsgs, + summaryview->unread, + summaryview->messages); +} + +void summary_sort(SummaryView *summaryview, SummarySortType type) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCList *clist = GTK_CLIST(summaryview->ctree); + GtkCListCompareFunc cmp_func; + + switch (type) { + case SORT_BY_NUMBER: + cmp_func = (GtkCListCompareFunc)summary_cmp_by_num; + break; + case SORT_BY_SIZE: + cmp_func = (GtkCListCompareFunc)summary_cmp_by_size; + break; + case SORT_BY_DATE: + cmp_func = (GtkCListCompareFunc)summary_cmp_by_date; + break; + case SORT_BY_FROM: + cmp_func = (GtkCListCompareFunc)summary_cmp_by_from; + break; + case SORT_BY_SUBJECT: + cmp_func = (GtkCListCompareFunc)summary_cmp_by_subject; + break; + default: + return; + } + + debug_print(_("Sorting summary...")); + STATUSBAR_PUSH(summaryview->mainwin, _("Sorting summary...")); + + main_window_cursor_wait(summaryview->mainwin); + + gtk_clist_set_compare_func(clist, cmp_func); + + /* toggle sort type if the same column is selected */ + if (summaryview->sort_mode == type) + summaryview->sort_type = + summaryview->sort_type == GTK_SORT_ASCENDING + ? GTK_SORT_DESCENDING : GTK_SORT_ASCENDING; + else + summaryview->sort_type = GTK_SORT_ASCENDING; + gtk_clist_set_sort_type(clist, summaryview->sort_type); + summaryview->sort_mode = type; + + gtk_ctree_sort_node(ctree, NULL); + + gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0); + //gtkut_ctree_set_focus_row(ctree, summaryview->selected); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + + main_window_cursor_normal(summaryview->mainwin); +} + +static void summary_set_ctree_from_list(SummaryView *summaryview, + GSList *mlist) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + GtkCTreeNode *node, *parent; + gchar *text[N_SUMMARY_COLS]; + GHashTable *msgid_table; + + if (!mlist) return; + + debug_print(_("\tSetting summary from message data...")); + STATUSBAR_PUSH(summaryview->mainwin, + _("Setting summary from message data...")); + + msgid_table = g_hash_table_new(g_str_hash, g_str_equal); + summaryview->msgid_table = msgid_table; + + if (prefs_common.enable_thread) { + for (; mlist != NULL; mlist = mlist->next) { + msginfo = (MsgInfo *)mlist->data; + parent = NULL; + + summary_set_header(text, msginfo); + + /* search parent node for threading */ + if (msginfo->inreplyto && *msginfo->inreplyto) + parent = g_hash_table_lookup + (msgid_table, msginfo->inreplyto); + + node = gtk_ctree_insert_node + (ctree, parent, NULL, text, 2, + NULL, NULL, NULL, NULL, FALSE, TRUE); + GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo); + summary_set_marks_func(ctree, node, summaryview); + + /* preserve previous node if the message is + duplicated */ + if (msginfo->msgid && *msginfo->msgid && + g_hash_table_lookup(msgid_table, msginfo->msgid) + == NULL) + g_hash_table_insert(msgid_table, + msginfo->msgid, node); + } + + /* complete the thread */ + summary_thread_build(summaryview); + } else { + for (; mlist != NULL; mlist = mlist->next) { + msginfo = (MsgInfo *)mlist->data; + + summary_set_header(text, msginfo); + + node = gtk_ctree_insert_node + (ctree, NULL, NULL, text, 2, + NULL, NULL, NULL, NULL, FALSE, TRUE); + GTKUT_CTREE_NODE_SET_ROW_DATA(node, msginfo); + summary_set_marks_func(ctree, node, summaryview); + + if (msginfo->msgid && *msginfo->msgid && + g_hash_table_lookup(msgid_table, msginfo->msgid) + == NULL) + g_hash_table_insert(msgid_table, + msginfo->msgid, node); + } + } + + if (prefs_common.enable_hscrollbar) { + gint optimal_width; + + optimal_width = gtk_clist_optimal_column_width + (GTK_CLIST(ctree), S_COL_SUBJECT); + gtk_clist_set_column_width(GTK_CLIST(ctree), S_COL_SUBJECT, + optimal_width); + } + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + if (debug_mode) + debug_print("\tmsgid hash table size = %d\n", + g_hash_table_size(msgid_table)); +} + +struct wcachefp +{ + FILE *cache_fp; + FILE *mark_fp; +}; + +gint summary_write_cache(SummaryView *summaryview) +{ + struct wcachefp fps; + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + gint ver = CACHE_VERSION; + gchar *buf; + gchar *cachefile, *markfile; + + if (!summaryview->folder_item || !summaryview->folder_item->path) + return -1; + + cachefile = folder_item_get_cache_file(summaryview->folder_item); + g_return_val_if_fail(cachefile != NULL, -1); + if ((fps.cache_fp = fopen(cachefile, "w")) == NULL) { + FILE_OP_ERROR(cachefile, "fopen"); + g_free(cachefile); + return -1; + } + if (change_file_mode_rw(fps.cache_fp, cachefile) < 0) + FILE_OP_ERROR(cachefile, "chmod"); + g_free(cachefile); + + markfile = folder_item_get_mark_file(summaryview->folder_item); + if ((fps.mark_fp = fopen(markfile, "w")) == NULL) { + FILE_OP_ERROR(markfile, "fopen"); + fclose(fps.cache_fp); + g_free(markfile); + return -1; + } + if (change_file_mode_rw(fps.mark_fp, markfile) < 0) + FILE_OP_ERROR(markfile, "chmod"); + g_free(markfile); + + buf = g_strdup_printf(_("Writing summary cache (%s)..."), + summaryview->folder_item->path); + debug_print(buf); + STATUSBAR_PUSH(summaryview->mainwin, buf); + g_free(buf); + + WRITE_CACHE_DATA_INT(ver, fps.cache_fp); + ver = MARK_VERSION; + WRITE_CACHE_DATA_INT(ver, fps.mark_fp); + + gtk_ctree_pre_recursive(ctree, NULL, summary_write_cache_func, &fps); + + fclose(fps.cache_fp); + fclose(fps.mark_fp); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + + return 0; +} + +static void summary_write_cache_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + struct wcachefp *fps = data; + MsgInfo *msginfo = gtk_ctree_node_get_row_data(ctree, node); + + if (msginfo == NULL) return; + + procmsg_write_cache(msginfo, fps->cache_fp); + procmsg_write_flags(msginfo, fps->mark_fp); +} + +static void summary_set_header(gchar *text[], MsgInfo *msginfo) +{ + static gchar date_modified[80]; + static gchar *to = NULL; + + text[S_COL_MARK] = NULL; + text[S_COL_UNREAD] = NULL; + text[S_COL_MIME] = NULL; + text[S_COL_NUMBER] = itos(msginfo->msgnum); + text[S_COL_SIZE] = to_human_readable(msginfo->size); + + if (msginfo->date_t) { + procheader_date_get_localtime(date_modified, + sizeof(date_modified), + msginfo->date_t); + text[S_COL_DATE] = date_modified; + } else if (msginfo->date) + text[S_COL_DATE] = msginfo->date; + else + text[S_COL_DATE] = _("(No Date)"); + + text[S_COL_FROM] = msginfo->fromname ? msginfo->fromname : + _("(No From)"); + if (prefs_common.swap_from && msginfo->from && msginfo->to && + cur_account && cur_account->address) { + gchar *from; + + Xalloca(from, strlen(msginfo->from) + 1, return); + strcpy(from, msginfo->from); + extract_address(from); + if (!strcmp(from, cur_account->address)) { + g_free(to); + to = g_strconcat("-->", msginfo->to, NULL); + text[S_COL_FROM] = to; + } + } + + text[S_COL_SUBJECT] = msginfo->subject ? msginfo->subject : + _("(No Subject)"); +} + +static void summary_display_msg(SummaryView *summaryview, GtkCTreeNode *row, + gboolean new_window) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + gchar *filename; + static gboolean lock = FALSE; + + if (!new_window && summaryview->displayed == row) return; + g_return_if_fail(row != NULL); + + if (lock) return; + lock = TRUE; + + STATUSBAR_POP(summaryview->mainwin); + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + + filename = procmsg_get_message_file(msginfo); + if (!filename) { + lock = FALSE; + return; + } + g_free(filename); + + if (MSG_IS_NEW(msginfo->flags)) + summaryview->newmsgs--; + if (MSG_IS_UNREAD(msginfo->flags)) + summaryview->unread--; + if (MSG_IS_NEW(msginfo->flags) || MSG_IS_UNREAD(msginfo->flags)) { + MSG_UNSET_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD); + summary_set_row_marks(summaryview, row); + gtk_clist_thaw(GTK_CLIST(ctree)); + summary_status_show(summaryview); + } + + if (new_window) { + MessageView *msgview; + + msgview = messageview_create_with_new_window(); + messageview_show(msgview, msginfo); + } else { + MessageView *msgview; + + msgview = summaryview->messageview; + + summaryview->displayed = row; + if (!summaryview->msg_is_toggled_on) + summary_toggle_view(summaryview); + messageview_show(msgview, msginfo); + if (msgview->type == MVIEW_TEXT || + (msgview->type == MVIEW_MIME && + GTK_CLIST(msgview->mimeview->ctree)->row_list == NULL)) + gtk_widget_grab_focus(summaryview->ctree); + GTK_EVENTS_FLUSH(); + gtkut_ctree_node_move_if_on_the_edge(ctree, row); + } + + if (GTK_WIDGET_VISIBLE(summaryview->headerwin->window)) + header_window_show(summaryview->headerwin, msginfo); + + lock = FALSE; +} + +void summary_redisplay_msg(SummaryView *summaryview) +{ + GtkCTreeNode *node; + + if (summaryview->displayed) { + node = summaryview->displayed; + summaryview->displayed = NULL; + summary_display_msg(summaryview, node, FALSE); + } +} + +void summary_open_msg(SummaryView *summaryview) +{ + if (!summaryview->selected) return; + + summary_display_msg(summaryview, summaryview->selected, TRUE); +} + +void summary_view_source(SummaryView * summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + SourceWindow *srcwin; + + if (!summaryview->selected) return; + + srcwin = source_window_create(); + msginfo = gtk_ctree_node_get_row_data(ctree, summaryview->selected); + source_window_show_msg(srcwin, msginfo); + source_window_show(srcwin); +} + +void summary_reedit(SummaryView *summaryview) +{ + MsgInfo *msginfo; + + if (!summaryview->selected) return; + if (!summaryview->folder_item || + summaryview->folder_item->stype != F_DRAFT) return; + + msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree), + summaryview->selected); + if (!msginfo) return; + + compose_reedit(msginfo); +} + +void summary_step(SummaryView *summaryview, GtkScrollType type) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + + gtk_signal_emit_by_name(GTK_OBJECT(ctree), "scroll_vertical", + type, 0.0); + + if (summaryview->msg_is_toggled_on) + summary_display_msg(summaryview, summaryview->selected, FALSE); +} + +static void summary_toggle_view(SummaryView *summaryview) +{ + MainWindow *mainwin = summaryview->mainwin; + union CompositeWin *cwin = &mainwin->win; + GtkWidget *vpaned = NULL; + GtkWidget *container = NULL; + + switch (mainwin->type) { + case SEPARATE_NONE: + vpaned = cwin->sep_none.vpaned; + container = cwin->sep_none.hpaned; + break; + case SEPARATE_FOLDER: + vpaned = cwin->sep_folder.vpaned; + container = mainwin->vbox_body; + break; + case SEPARATE_MESSAGE: + case SEPARATE_BOTH: + return; + } + + if (vpaned->parent != NULL) { + summaryview->msg_is_toggled_on = FALSE; + summaryview->displayed = NULL; + gtk_widget_ref(vpaned); + gtk_container_remove(GTK_CONTAINER(container), vpaned); + gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), container); + gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow), + GTK_ARROW_UP, GTK_SHADOW_OUT); + } else { + summaryview->msg_is_toggled_on = TRUE; + gtk_widget_reparent(GTK_WIDGET_PTR(summaryview), vpaned); + gtk_container_add(GTK_CONTAINER(container), vpaned); + gtk_widget_unref(vpaned); + gtk_arrow_set(GTK_ARROW(summaryview->toggle_arrow), + GTK_ARROW_DOWN, GTK_SHADOW_OUT); + } + + gtk_widget_grab_focus(summaryview->ctree); +} + +static void summary_set_row_marks(SummaryView *summaryview, GtkCTreeNode *row) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + MsgFlags flags; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + if (!msginfo) return; + + flags = msginfo->flags; + + gtk_ctree_node_set_foreground(ctree, row, &summaryview->color_normal); + + /* set new/unread column */ + if (MSG_IS_NEW(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_UNREAD, + newxpm, newxpmmask); + } else if (MSG_IS_UNREAD(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_UNREAD, + unreadxpm, unreadxpmmask); + } else if (MSG_IS_REPLIED(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_UNREAD, + repliedxpm, repliedxpmmask); + } else if (MSG_IS_FORWARDED(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_UNREAD, + forwardedxpm, forwardedxpmmask); + } else { + gtk_ctree_node_set_text(ctree, row, S_COL_UNREAD, NULL); + } + + /* set mark column */ + if (MSG_IS_DELETED(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_MARK, + deletedxpm, deletedxpmmask); + gtk_ctree_node_set_foreground(ctree, row, + &summaryview->color_dim); + } else if (MSG_IS_MARKED(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_MARK, + markxpm, markxpmmask); + } else if (MSG_IS_MOVE(flags)) { + gtk_ctree_node_set_text(ctree, row, S_COL_MARK, "o"); + gtk_ctree_node_set_foreground(ctree, row, + &summaryview->color_marked); + } else if (MSG_IS_COPY(flags)) { + gtk_ctree_node_set_text(ctree, row, S_COL_MARK, "O"); + gtk_ctree_node_set_foreground(ctree, row, + &summaryview->color_marked); + } else { + gtk_ctree_node_set_text(ctree, row, S_COL_MARK, NULL); + } + + if (MSG_IS_MIME(flags)) { + gtk_ctree_node_set_pixmap(ctree, row, S_COL_MIME, + clipxpm, clipxpmmask); + } else { + gtk_ctree_node_set_text(ctree, row, S_COL_MIME, NULL); + } +} + +void summary_set_marks_selected(SummaryView *summaryview) +{ + summary_set_row_marks(summaryview, summaryview->selected); +} + +static void summary_mark_row(SummaryView *summaryview, GtkCTreeNode *row) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + msginfo->to_folder = NULL; + if (MSG_IS_DELETED(msginfo->flags)) + summaryview->deleted--; + if (MSG_IS_MOVE(msginfo->flags)) + summaryview->moved--; + if (MSG_IS_COPY(msginfo->flags)) + summaryview->copied--; + MSG_UNSET_FLAGS(msginfo->flags, MSG_DELETED | MSG_MOVE | MSG_COPY); + MSG_SET_FLAGS(msginfo->flags, MSG_MARKED); + summary_set_row_marks(summaryview, row); + debug_print(_("Message %d is marked\n"), msginfo->msgnum); +} + +void summary_mark(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GList *cur; + + for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) + summary_mark_row(summaryview, GTK_CTREE_NODE(cur->data)); + + /* summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); */ +} + +static void summary_mark_row_as_read(SummaryView *summaryview, + GtkCTreeNode *row) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + if (MSG_IS_NEW(msginfo->flags)) + summaryview->newmsgs--; + if (MSG_IS_UNREAD(msginfo->flags)) + summaryview->unread--; + if (MSG_IS_NEW(msginfo->flags) || + MSG_IS_UNREAD(msginfo->flags)) { + MSG_UNSET_FLAGS(msginfo->flags, MSG_NEW | MSG_UNREAD); + summary_set_row_marks(summaryview, row); + debug_print(_("Message %d is marked as being read\n"), + msginfo->msgnum); + } +} + +void summary_mark_as_read(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GList *cur; + + for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) + summary_mark_row_as_read(summaryview, + GTK_CTREE_NODE(cur->data)); + + summary_status_show(summaryview); +} + +static void summary_mark_row_as_unread(SummaryView *summaryview, + GtkCTreeNode *row) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + if (MSG_IS_DELETED(msginfo->flags)) { + msginfo->to_folder = NULL; + MSG_UNSET_FLAGS(msginfo->flags, MSG_DELETED); + summaryview->deleted--; + } + MSG_UNSET_FLAGS(msginfo->flags, MSG_REPLIED | MSG_FORWARDED); + if (!MSG_IS_UNREAD(msginfo->flags)) { + MSG_SET_FLAGS(msginfo->flags, MSG_UNREAD); + gtk_ctree_node_set_pixmap(ctree, row, S_COL_UNREAD, + unreadxpm, unreadxpmmask); + summaryview->unread++; + debug_print(_("Message %d is marked as unread\n"), + msginfo->msgnum); + } + summary_set_row_marks(summaryview, row); +} + +void summary_mark_as_unread(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GList *cur; + + for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) + summary_mark_row_as_unread(summaryview, + GTK_CTREE_NODE(cur->data)); + + summary_status_show(summaryview); +} + +static void summary_delete_row(SummaryView *summaryview, GtkCTreeNode *row) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + + if (MSG_IS_DELETED(msginfo->flags)) return; + + msginfo->to_folder = NULL; + if (MSG_IS_MOVE(msginfo->flags)) + summaryview->moved--; + if (MSG_IS_COPY(msginfo->flags)) + summaryview->copied--; + MSG_UNSET_FLAGS(msginfo->flags, + MSG_MARKED | + MSG_MOVE | + MSG_COPY); + MSG_SET_FLAGS(msginfo->flags, MSG_DELETED); + summaryview->deleted++; + + if (!prefs_common.immediate_exec) + summary_set_row_marks(summaryview, row); + + debug_print(_("Message %s/%d is set to delete\n"), + msginfo->folder->path, msginfo->msgnum); +} + +void summary_delete(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GList *cur; + + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + + /* if current folder is trash, don't delete */ + if (summaryview->folder_item->stype == F_TRASH) { + alertpanel_notice(_("Current folder is Trash.")); + return; + } + + for (cur = GTK_CLIST(ctree)->selection; cur != NULL; cur = cur->next) + summary_delete_row(summaryview, GTK_CTREE_NODE(cur->data)); + + summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); + + if (prefs_common.immediate_exec) + summary_execute(summaryview); + else + summary_status_show(summaryview); +} + +void summary_delete_duplicated(SummaryView *summaryview) +{ + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + if (summaryview->folder_item->stype == F_TRASH) return; + + main_window_cursor_wait(summaryview->mainwin); + debug_print(_("Deleting duplicated messages...")); + STATUSBAR_PUSH(summaryview->mainwin, + _("Deleting duplicated messages...")); + + gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL, + GTK_CTREE_FUNC(summary_delete_duplicated_func), + summaryview); + + if (prefs_common.immediate_exec) + summary_execute(summaryview); + else + summary_status_show(summaryview); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + main_window_cursor_normal(summaryview->mainwin); +} + +static void summary_delete_duplicated_func(GtkCTree *ctree, GtkCTreeNode *node, + SummaryView *summaryview) +{ + GtkCTreeNode *found; + MsgInfo *msginfo = GTK_CTREE_ROW(node)->row.data; + + if (!msginfo->msgid || !*msginfo->msgid) return; + + found = g_hash_table_lookup(summaryview->msgid_table, msginfo->msgid); + + if (found && found != node) + summary_delete_row(summaryview, node); +} + +static void summary_unmark_row(SummaryView *summaryview, GtkCTreeNode *row) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + msginfo->to_folder = NULL; + if (MSG_IS_DELETED(msginfo->flags)) + summaryview->deleted--; + if (MSG_IS_MOVE(msginfo->flags)) + summaryview->moved--; + if (MSG_IS_COPY(msginfo->flags)) + summaryview->copied--; + MSG_UNSET_FLAGS(msginfo->flags, + MSG_MARKED | + MSG_DELETED | + MSG_MOVE | + MSG_COPY); + summary_set_row_marks(summaryview, row); + + debug_print(_("Message %s/%d is unmarked\n"), + msginfo->folder->path, msginfo->msgnum); +} + +void summary_unmark(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GList *cur; + + for (cur = GTK_CLIST(ctree)->selection; cur != NULL; + cur = cur->next) + summary_unmark_row(summaryview, GTK_CTREE_NODE(cur->data)); + + summary_status_show(summaryview); +} + +static void summary_move_row_to(SummaryView *summaryview, GtkCTreeNode *row, + FolderItem *to_folder) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + g_return_if_fail(to_folder != NULL); + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + msginfo->to_folder = to_folder; + if (MSG_IS_DELETED(msginfo->flags)) + summaryview->deleted--; + MSG_UNSET_FLAGS(msginfo->flags, + MSG_MARKED | MSG_DELETED | MSG_COPY); + if (!MSG_IS_MOVE(msginfo->flags)) { + MSG_SET_FLAGS(msginfo->flags, MSG_MOVE); + summaryview->moved++; + } + if (!prefs_common.immediate_exec) + summary_set_row_marks(summaryview, row); + + debug_print(_("Message %d is set to move to %s\n"), + msginfo->msgnum, to_folder->path); +} + +void summary_move_selected_to(SummaryView *summaryview, FolderItem *to_folder) +{ + GList *cur; + + if (!to_folder) return; + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + if (summaryview->folder_item == to_folder) { + alertpanel_notice(_("Destination is same as current folder.")); + return; + } + + for (cur = GTK_CLIST(summaryview->ctree)->selection; + cur != NULL; cur = cur->next) + summary_move_row_to + (summaryview, GTK_CTREE_NODE(cur->data), to_folder); + + summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); + + if (prefs_common.immediate_exec) + summary_execute(summaryview); + else + summary_status_show(summaryview); +} + +void summary_move_to(SummaryView *summaryview) +{ + FolderItem *to_folder; + + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + + to_folder = foldersel_folder_sel(NULL); + summary_move_selected_to(summaryview, to_folder); +} + +static void summary_copy_row_to(SummaryView *summaryview, GtkCTreeNode *row, + FolderItem *to_folder) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + + g_return_if_fail(to_folder != NULL); + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + msginfo->to_folder = to_folder; + if (MSG_IS_DELETED(msginfo->flags)) + summaryview->deleted--; + MSG_UNSET_FLAGS(msginfo->flags, + MSG_MARKED | MSG_DELETED | MSG_MOVE); + if (!MSG_IS_COPY(msginfo->flags)) { + MSG_SET_FLAGS(msginfo->flags, MSG_COPY); + summaryview->copied++; + } + if (!prefs_common.immediate_exec) + summary_set_row_marks(summaryview, row); + + debug_print(_("Message %d is set to copy to %s\n"), + msginfo->msgnum, to_folder->path); +} + +void summary_copy_selected_to(SummaryView *summaryview, FolderItem *to_folder) +{ + GList *cur; + + if (!to_folder) return; + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + if (summaryview->folder_item == to_folder) { + alertpanel_notice + (_("Destination to copy is same as current folder.")); + return; + } + + for (cur = GTK_CLIST(summaryview->ctree)->selection; + cur != NULL; cur = cur->next) + summary_copy_row_to + (summaryview, GTK_CTREE_NODE(cur->data), to_folder); + + summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); + + if (prefs_common.immediate_exec) + summary_execute(summaryview); + else + summary_status_show(summaryview); +} + +void summary_copy_to(SummaryView *summaryview) +{ + FolderItem *to_folder; + + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + + to_folder = foldersel_folder_sel(NULL); + summary_copy_selected_to(summaryview, to_folder); +} + +void summary_select_all(SummaryView *summaryview) +{ + if (summaryview->messages >= 500) { + STATUSBAR_PUSH(summaryview->mainwin, + _("Selecting all messages...")); + main_window_cursor_wait(summaryview->mainwin); + } + + gtk_clist_select_all(GTK_CLIST(summaryview->ctree)); + + if (summaryview->messages >= 500) { + STATUSBAR_POP(summaryview->mainwin); + main_window_cursor_normal(summaryview->mainwin); + } +} + +void summary_unselect_all(SummaryView *summaryview) +{ + gtk_sctree_unselect_all(GTK_SCTREE(summaryview->ctree)); +} + +void summary_save_as(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + MsgInfo *msginfo; + gchar *src, *dest; + + if (!summaryview->selected) return; + msginfo = gtk_ctree_node_get_row_data(ctree, summaryview->selected); + if (!msginfo) return; + + dest = filesel_select_file(_("Save as"), NULL); + if (!dest) return; + if (is_file_exist(dest)) { + AlertValue aval; + + aval = alertpanel(_("Overwrite"), + _("Overwrite existing file?"), + _("OK"), _("Cancel"), NULL); + if (G_ALERTDEFAULT != aval) return; + } + + src = procmsg_get_message_file(msginfo); + copy_file(src, dest); + g_free(src); +} + +void summary_print(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCList *clist = GTK_CLIST(summaryview->ctree); + MsgInfo *msginfo; + GList *cur; + gchar *cmdline; + gchar *p; + + if (clist->selection == NULL) return; + + cmdline = input_dialog(_("Print"), + _("Enter the print command line:\n" + "(`%s' will be replaced with file name)"), + prefs_common.print_cmd); + if (!cmdline) return; + if (!(p = strchr(cmdline, '%')) || *(p + 1) != 's' || + strchr(p + 2, '%')) { + alertpanel_error(_("Print command line is invalid:\n`%s'"), + cmdline); + return; + } + + for (cur = clist->selection; cur != NULL; cur = cur->next) { + msginfo = gtk_ctree_node_get_row_data + (ctree, GTK_CTREE_NODE(cur->data)); + if (msginfo) procmsg_print_message(msginfo, cmdline); + } +} + +void summary_execute(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GtkCList *clist = GTK_CLIST(summaryview->ctree); + GtkCTreeNode *node, *next; + + if (!summaryview->folder_item || + summaryview->folder_item->folder->type == F_NEWS) return; + + gtk_clist_freeze(clist); + + if (prefs_common.enable_thread) + summary_unthread_for_exec(summaryview); + + summary_execute_move(summaryview); + summary_execute_copy(summaryview); + summary_execute_delete(summaryview); + + node = GTK_CTREE_NODE(clist->row_list); + while (node != NULL) { + next = GTK_CTREE_NODE_NEXT(node); + if (gtk_ctree_node_get_row_data(ctree, node) == NULL) { + if (node == summaryview->displayed) { + messageview_clear(summaryview->messageview); + summaryview->displayed = NULL; + } + if (GTK_CTREE_ROW(node)->children != NULL) + g_warning("summary_execute(): children != NULL\n"); + else + gtk_ctree_remove_node(ctree, node); + } + node = next; + } + + if (prefs_common.enable_thread) + summary_thread_build(summaryview); + + summaryview->selected = clist->selection ? + GTK_CTREE_NODE(clist->selection->data) : NULL; + + if (!GTK_CLIST(summaryview->ctree)->row_list) { + menu_set_insensitive_all + (GTK_MENU_SHELL(summaryview->popupmenu)); + gtk_widget_grab_focus(summaryview->folderview->ctree); + } else + gtk_widget_grab_focus(summaryview->ctree); + + summary_update_status(summaryview); + summary_status_show(summaryview); + + summary_write_cache(summaryview); + + gtk_ctree_node_moveto(ctree, summaryview->selected, -1, 0.5, 0); + + gtk_clist_thaw(clist); +} + +static void summary_execute_move(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GSList *cur; + + summaryview->folder_table = g_hash_table_new(NULL, NULL); + + /* search moving messages and execute */ + gtk_ctree_pre_recursive(ctree, NULL, summary_execute_move_func, + summaryview); + + if (summaryview->mlist) { + procmsg_move_messages(summaryview->mlist); + + folder_item_scan_foreach(summaryview->folder_table); + folderview_update_item_foreach(summaryview->folder_table); + + for (cur = summaryview->mlist; cur != NULL; cur = cur->next) + procmsg_msginfo_free((MsgInfo *)cur->data); + g_slist_free(summaryview->mlist); + summaryview->mlist = NULL; + } + + g_hash_table_destroy(summaryview->folder_table); + summaryview->folder_table = NULL; +} + +static void summary_execute_move_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + SummaryView *summaryview = data; + MsgInfo *msginfo; + + msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + + if (msginfo && MSG_IS_MOVE(msginfo->flags) && msginfo->to_folder) { + g_hash_table_insert(summaryview->folder_table, + msginfo->to_folder, GINT_TO_POINTER(1)); + + summaryview->mlist = + g_slist_append(summaryview->mlist, msginfo); + gtk_ctree_node_set_row_data(ctree, node, NULL); + + if (msginfo->msgid && *msginfo->msgid && + node == g_hash_table_lookup(summaryview->msgid_table, + msginfo->msgid)) + g_hash_table_remove(summaryview->msgid_table, + msginfo->msgid); + } +} + +static void summary_execute_copy(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + + summaryview->folder_table = g_hash_table_new(NULL, NULL); + + /* search copying messages and execute */ + gtk_ctree_pre_recursive(ctree, NULL, summary_execute_copy_func, + summaryview); + + if (summaryview->mlist) { + procmsg_copy_messages(summaryview->mlist); + + folder_item_scan_foreach(summaryview->folder_table); + folderview_update_item_foreach(summaryview->folder_table); + + g_slist_free(summaryview->mlist); + summaryview->mlist = NULL; + } + + g_hash_table_destroy(summaryview->folder_table); + summaryview->folder_table = NULL; +} + +static void summary_execute_copy_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + SummaryView *summaryview = data; + MsgInfo *msginfo; + + msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + + if (msginfo && MSG_IS_COPY(msginfo->flags) && msginfo->to_folder) { + g_hash_table_insert(summaryview->folder_table, + msginfo->to_folder, GINT_TO_POINTER(1)); + + summaryview->mlist = + g_slist_append(summaryview->mlist, msginfo); + + MSG_UNSET_FLAGS(msginfo->flags, MSG_COPY); + summary_set_row_marks(summaryview, node); + } +} + +static void summary_execute_delete(SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + FolderItem *trash; + GSList *cur; + + trash = summaryview->folder_item->folder->trash; + g_return_if_fail(trash != NULL); + if (summaryview->folder_item == trash) return; + + /* search deleting messages and execute */ + gtk_ctree_pre_recursive + (ctree, NULL, summary_execute_delete_func, summaryview); + + if (!summaryview->mlist) return; + + folder_item_move_msgs_with_dest(trash, summaryview->mlist); + + for (cur = summaryview->mlist; cur != NULL; cur = cur->next) + procmsg_msginfo_free((MsgInfo *)cur->data); + + g_slist_free(summaryview->mlist); + summaryview->mlist = NULL; + + folder_item_scan(trash); + folderview_update_item(trash, FALSE); +} + +static void summary_execute_delete_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + SummaryView *summaryview = data; + MsgInfo *msginfo; + + msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + + if (msginfo && MSG_IS_DELETED(msginfo->flags)) { + summaryview->mlist = + g_slist_append(summaryview->mlist, msginfo); + gtk_ctree_node_set_row_data(ctree, node, NULL); + + if (msginfo->msgid && *msginfo->msgid && + node == g_hash_table_lookup(summaryview->msgid_table, + msginfo->msgid)) + g_hash_table_remove(summaryview->msgid_table, + msginfo->msgid); + } +} + +/* thread functions */ + +void summary_thread_build(SummaryView *summaryview) +{ + debug_print(_("Building threads...")); + STATUSBAR_PUSH(summaryview->mainwin, _("Building threads...")); + main_window_cursor_wait(summaryview->mainwin); + + gtk_clist_freeze(GTK_CLIST(summaryview->ctree)); + + gtk_ctree_pre_recursive_to_depth + (GTK_CTREE(summaryview->ctree), NULL, 1, + GTK_CTREE_FUNC(summary_thread_func), + summaryview->msgid_table); + + gtk_clist_thaw(GTK_CLIST(summaryview->ctree)); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + main_window_cursor_normal(summaryview->mainwin); +} + +void summary_unthread(SummaryView *summaryview) +{ + GtkCTreeNode *node; + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + + debug_print(_("Unthreading...")); + STATUSBAR_PUSH(summaryview->mainwin, _("Unthreading...")); + main_window_cursor_wait(summaryview->mainwin); + + gtk_clist_freeze(GTK_CLIST(ctree)); + + for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { + summary_unthread_func(ctree, node, NULL); + } + + gtk_clist_thaw(GTK_CLIST(ctree)); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + main_window_cursor_normal(summaryview->mainwin); +} + +static void summary_unthread_for_exec(SummaryView *summaryview) +{ + GtkCTreeNode *node; + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + + debug_print(_("Unthreading for execution...")); + + gtk_clist_freeze(GTK_CLIST(ctree)); + + for (node = GTK_CTREE_NODE(GTK_CLIST(ctree)->row_list); + node != NULL; node = GTK_CTREE_NODE_NEXT(node)) { + summary_unthread_for_exec_func(ctree, node, NULL); + } + + gtk_clist_thaw(GTK_CLIST(ctree)); + + debug_print(_("done.\n")); +} + +static void summary_thread_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + MsgInfo *msginfo; + GtkCTreeNode *parent; + GHashTable *msgid_table = (GHashTable *)data; + + msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + + if (!msginfo || !msginfo->inreplyto) return; + + parent = g_hash_table_lookup(msgid_table, msginfo->inreplyto); + + if (parent && parent != node) { + gtk_ctree_move(ctree, node, parent, NULL); + gtk_ctree_expand(ctree, parent); + } +} + +static void summary_unthread_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + GtkCTreeNode *child; + GtkCTreeNode *sibling; + + child = GTK_CTREE_ROW(node)->children; + sibling = GTK_CTREE_ROW(node)->sibling; + + while (child != NULL) { + GtkCTreeNode *next_child; + + next_child = GTK_CTREE_ROW(child)->sibling; + gtk_ctree_move(ctree, child, NULL, sibling); + child = next_child; + } +} + +static void summary_unthread_for_exec_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + MsgInfo *msginfo; + GtkCTreeNode *top_parent; + GtkCTreeNode *child; + GtkCTreeNode *sibling; + + msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + + if (!msginfo || + (!MSG_IS_MOVE(msginfo->flags) && + !MSG_IS_DELETED(msginfo->flags))) + return; + child = GTK_CTREE_ROW(node)->children; + if (!child) return; + + for (top_parent = node; + GTK_CTREE_ROW(top_parent)->parent != NULL; + top_parent = GTK_CTREE_ROW(top_parent)->parent) + ; + sibling = GTK_CTREE_ROW(top_parent)->sibling; + + while (child != NULL) { + GtkCTreeNode *next_child; + + next_child = GTK_CTREE_ROW(child)->sibling; + gtk_ctree_move(ctree, child, NULL, sibling); + child = next_child; + } +} + +void summary_filter(SummaryView *summaryview) +{ + if (!prefs_common.fltlist) return; + + debug_print(_("filtering...")); + STATUSBAR_PUSH(summaryview->mainwin, _("Filtering...")); + main_window_cursor_wait(summaryview->mainwin); + + gtk_clist_freeze(GTK_CLIST(summaryview->ctree)); + + gtk_ctree_pre_recursive(GTK_CTREE(summaryview->ctree), NULL, + GTK_CTREE_FUNC(summary_filter_func), + summaryview); + + gtk_clist_thaw(GTK_CLIST(summaryview->ctree)); + + if (prefs_common.immediate_exec) + summary_execute(summaryview); + else + summary_status_show(summaryview); + + debug_print(_("done.\n")); + STATUSBAR_POP(summaryview->mainwin); + main_window_cursor_normal(summaryview->mainwin); +} + +static void summary_filter_func(GtkCTree *ctree, GtkCTreeNode *node, + gpointer data) +{ + MsgInfo *msginfo = GTKUT_CTREE_NODE_GET_ROW_DATA(node); + SummaryView *summaryview = data; + gchar *file; + FolderItem *dest; + + file = procmsg_get_message_file_path(msginfo); + dest = filter_get_dest_folder(prefs_common.fltlist, file); + g_free(file); + + if (dest && strcmp2(dest->path, FILTER_NOT_RECEIVE) != 0 && + summaryview->folder_item != dest) + summary_move_row_to(summaryview, node, dest); +} + +/* callback functions */ + +static void summary_toggle_pressed(GtkWidget *eventbox, GdkEventButton *event, + SummaryView *summaryview) +{ + if (!event) + return; + + if (!summaryview->msg_is_toggled_on && summaryview->selected) + summary_display_msg(summaryview, summaryview->selected, FALSE); + else + summary_toggle_view(summaryview); +} + +static void summary_button_pressed(GtkWidget *ctree, GdkEventButton *event, + SummaryView *summaryview) +{ + if (!event) return; + + if (event->button == 3) { + /* right clicked */ + gtk_menu_popup(GTK_MENU(summaryview->popupmenu), NULL, NULL, + NULL, NULL, event->button, event->time); + } else if (event->button == 2) { + summaryview->display_msg = TRUE; + } else if (event->button == 1) { + if (!prefs_common.emulate_emacs && + summaryview->msg_is_toggled_on) + summaryview->display_msg = TRUE; + } +} + +static void summary_button_released(GtkWidget *ctree, GdkEventButton *event, + SummaryView *summaryview) +{ +} + +void summary_pass_key_press_event(SummaryView *summaryview, GdkEventKey *event) +{ + summary_key_pressed(summaryview->ctree, event, summaryview); +} + +#define BREAK_ON_MODIFIER_KEY() \ + if ((event->state & (GDK_MOD1_MASK|GDK_CONTROL_MASK)) != 0) break + +static void summary_key_pressed(GtkWidget *widget, GdkEventKey *event, + SummaryView *summaryview) +{ + GtkCTree *ctree = GTK_CTREE(widget); + GtkCTreeNode *node; + FolderItem *to_folder; + + if (!event) return; + + switch (event->keyval) { + case GDK_g: /* Go */ + case GDK_G: + BREAK_ON_MODIFIER_KEY(); + + if (gtk_signal_n_emissions_by_name + (GTK_OBJECT(ctree), "key_press_event") > 0) + gtk_signal_emit_stop_by_name(GTK_OBJECT(ctree), + "key_press_event"); + + to_folder = foldersel_folder_sel(NULL); + if (to_folder) { + debug_print(_("Go to %s\n"), to_folder->path); + folderview_select(summaryview->folderview, to_folder); + } + return; + case GDK_w: /* Write new message */ + BREAK_ON_MODIFIER_KEY(); + if (summaryview->folder_item) + compose_new(summaryview->folder_item->folder->account); + else + compose_new(NULL); + return; + case GDK_D: /* Empty trash */ + BREAK_ON_MODIFIER_KEY(); + if (gtk_signal_n_emissions_by_name + (GTK_OBJECT(ctree), "key_press_event") > 0) + gtk_signal_emit_stop_by_name(GTK_OBJECT(ctree), + "key_press_event"); + main_window_empty_trash(summaryview->mainwin, TRUE); + return; + case GDK_Q: /* Quit */ + BREAK_ON_MODIFIER_KEY(); + + if (prefs_common.confirm_on_exit) { + if (alertpanel(_("Exit"), _("Exit this program?"), + _("OK"), _("Cancel"), NULL) + == G_ALERTDEFAULT) { + app_will_exit(NULL, summaryview->mainwin); + } + } + return; + case GDK_Left: /* Move focus */ + case GDK_Escape: + gtk_widget_grab_focus(summaryview->folderview->ctree); + return; + default: + } + + if (!summaryview->selected) { + node = gtk_ctree_node_nth(ctree, 0); + if (node) + gtk_ctree_select(ctree, node); + else + return; + } + + switch (event->keyval) { + case GDK_space: /* Page down or go to the next */ + if (summaryview->displayed != summaryview->selected) { + summary_display_msg(summaryview, + summaryview->selected, FALSE); + break; + } + if (!textview_scroll_page(summaryview->messageview->textview, + FALSE)) + summary_select_next_unread(summaryview); + break; + case GDK_n: /* Next */ + case GDK_N: + BREAK_ON_MODIFIER_KEY(); + summary_step(summaryview, GTK_SCROLL_STEP_FORWARD); + break; + case GDK_BackSpace: /* Page up */ + case GDK_Delete: + textview_scroll_page(summaryview->messageview->textview, TRUE); + break; + case GDK_p: /* Prev */ + case GDK_P: + BREAK_ON_MODIFIER_KEY(); + summary_step(summaryview, GTK_SCROLL_STEP_BACKWARD); + break; + case GDK_v: /* Toggle summary mode / message mode */ + case GDK_V: + BREAK_ON_MODIFIER_KEY(); + + if (!summaryview->msg_is_toggled_on && summaryview->selected) + summary_display_msg(summaryview, + summaryview->selected, FALSE); + else + summary_toggle_view(summaryview); + break; + case GDK_Return: /* Scroll up/down one line */ + if (summaryview->displayed != summaryview->selected) { + summary_display_msg(summaryview, + summaryview->selected, FALSE); + break; + } + textview_scroll_one_line(summaryview->messageview->textview, + (event->state & GDK_MOD1_MASK) != 0); + break; + case GDK_asterisk: /* Mark */ + summary_mark(summaryview); + break; + case GDK_exclam: /* Mark as unread */ + summary_mark_as_unread(summaryview); + break; + case GDK_d: /* Delete */ + BREAK_ON_MODIFIER_KEY(); + summary_delete(summaryview); + break; + case GDK_u: /* Unmark */ + case GDK_U: + BREAK_ON_MODIFIER_KEY(); + summary_unmark(summaryview); + break; + case GDK_o: /* Move */ + BREAK_ON_MODIFIER_KEY(); + summary_move_to(summaryview); + break; + case GDK_O: /* Copy */ + BREAK_ON_MODIFIER_KEY(); + summary_copy_to(summaryview); + break; + case GDK_x: /* Execute */ + case GDK_X: + BREAK_ON_MODIFIER_KEY(); + summary_execute(summaryview); + break; + case GDK_a: /* Reply to the message */ + BREAK_ON_MODIFIER_KEY(); + summary_reply_cb(summaryview, + COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE, NULL); + break; + case GDK_A: /* Reply to the message with quotation */ + BREAK_ON_MODIFIER_KEY(); + summary_reply_cb(summaryview, + COMPOSE_REPLY_TO_ALL_WITH_QUOTE, NULL); + break; + case GDK_f: /* Forward the message */ + BREAK_ON_MODIFIER_KEY(); + summary_reply_cb(summaryview, COMPOSE_FORWARD, NULL); + break; + case GDK_F: + BREAK_ON_MODIFIER_KEY(); + summary_reply_cb(summaryview, COMPOSE_FORWARD_AS_ATTACH, NULL); + break; + case GDK_y: /* Save the message */ + BREAK_ON_MODIFIER_KEY(); + summary_save_as(summaryview); + break; + default: + } +} + +static void summary_open_row(GtkSCTree *sctree, SummaryView *summaryview) +{ + if (summaryview->folder_item->stype == F_DRAFT) + summary_reedit(summaryview); + else + summary_open_msg(summaryview); + + summaryview->display_msg = FALSE; +} + +static void summary_selected(GtkCTree *ctree, GtkCTreeNode *row, + gint column, SummaryView *summaryview) +{ + MsgInfo *msginfo; + + summary_status_show(summaryview); + summary_set_menu_sensitive(summaryview); + + if (GTK_CLIST(ctree)->selection && + GTK_CLIST(ctree)->selection->next) { + summaryview->display_msg = FALSE; + return; + } + + summaryview->selected = row; + + msginfo = gtk_ctree_node_get_row_data(ctree, row); + + switch (column) { + case S_COL_MARK: + if (MSG_IS_MARKED(msginfo->flags)) { + MSG_UNSET_FLAGS(msginfo->flags, MSG_MARKED); + summary_set_row_marks(summaryview, row); + } else + summary_mark_row(summaryview, row); + break; + case S_COL_UNREAD: + if (MSG_IS_UNREAD(msginfo->flags)) { + summary_mark_row_as_read(summaryview, row); + summary_status_show(summaryview); + } else if (!MSG_IS_REPLIED(msginfo->flags) && + !MSG_IS_FORWARDED(msginfo->flags)) { + summary_mark_row_as_unread(summaryview, row); + summary_status_show(summaryview); + } + break; + default: + } + + if (summaryview->display_msg) + summary_display_msg(summaryview, row, FALSE); + + summaryview->display_msg = FALSE; +} + +static void summary_col_resized(GtkCList *clist, gint column, gint width, + SummaryView *summaryview) +{ + switch (column) { + case S_COL_MARK: + prefs_common.summary_col_mark = width; + break; + case S_COL_UNREAD: + prefs_common.summary_col_unread = width; + break; + case S_COL_MIME: + prefs_common.summary_col_mime = width; + break; + case S_COL_NUMBER: + prefs_common.summary_col_number = width; + break; + case S_COL_SIZE: + prefs_common.summary_col_size = width; + break; + case S_COL_DATE: + prefs_common.summary_col_date = width; + break; + case S_COL_FROM: + prefs_common.summary_col_from = width; + break; + case S_COL_SUBJECT: + prefs_common.summary_col_subject = width; + break; + default: + } +} + +static void summary_reply_cb(SummaryView *summaryview, guint action, + GtkWidget *widget) +{ + MsgInfo *msginfo; + + msginfo = gtk_ctree_node_get_row_data(GTK_CTREE(summaryview->ctree), + summaryview->selected); + if (!msginfo) return; + + switch ((ComposeReplyMode)action) { + case COMPOSE_REPLY: + compose_reply(msginfo, prefs_common.reply_with_quote, FALSE); + break; + case COMPOSE_REPLY_WITH_QUOTE: + compose_reply(msginfo, TRUE, FALSE); + break; + case COMPOSE_REPLY_WITHOUT_QUOTE: + compose_reply(msginfo, FALSE, FALSE); + break; + case COMPOSE_REPLY_TO_ALL: + compose_reply(msginfo, prefs_common.reply_with_quote, TRUE); + break; + case COMPOSE_REPLY_TO_ALL_WITH_QUOTE: + compose_reply(msginfo, TRUE, TRUE); + break; + case COMPOSE_REPLY_TO_ALL_WITHOUT_QUOTE: + compose_reply(msginfo, FALSE, TRUE); + break; + case COMPOSE_FORWARD: + compose_forward(msginfo, FALSE); + break; + case COMPOSE_FORWARD_AS_ATTACH: + compose_forward(msginfo, TRUE); + break; + default: + compose_reply(msginfo, prefs_common.reply_with_quote, FALSE); + } + + summary_set_marks_selected(summaryview); +} + +static void summary_show_all_header_cb(SummaryView *summaryview, + guint action, GtkWidget *widget) +{ + header_window_show_cb(summaryview->mainwin, action, widget); +} + +static void summary_num_clicked(GtkWidget *button, SummaryView *summaryview) +{ + summary_sort(summaryview, SORT_BY_NUMBER); +} + +static void summary_size_clicked(GtkWidget *button, SummaryView *summaryview) +{ + summary_sort(summaryview, SORT_BY_SIZE); +} + +static void summary_date_clicked(GtkWidget *button, SummaryView *summaryview) +{ + summary_sort(summaryview, SORT_BY_DATE); +} + +static void summary_from_clicked(GtkWidget *button, SummaryView *summaryview) +{ + summary_sort(summaryview, SORT_BY_FROM); +} + +static void summary_subject_clicked(GtkWidget *button, + SummaryView *summaryview) +{ + summary_sort(summaryview, SORT_BY_SUBJECT); +} + +void summary_change_display_item(SummaryView *summaryview) +{ + GtkCList *clist = GTK_CLIST(summaryview->ctree); + + gtk_clist_set_column_visibility(clist, S_COL_MARK, prefs_common.show_mark); + gtk_clist_set_column_visibility(clist, S_COL_UNREAD, prefs_common.show_unread); + gtk_clist_set_column_visibility(clist, S_COL_MIME, prefs_common.show_mime); + gtk_clist_set_column_visibility(clist, S_COL_NUMBER, prefs_common.show_number); + gtk_clist_set_column_visibility(clist, S_COL_SIZE, prefs_common.show_size); + gtk_clist_set_column_visibility(clist, S_COL_DATE, prefs_common.show_date); + gtk_clist_set_column_visibility(clist, S_COL_FROM, prefs_common.show_from); + gtk_clist_set_column_visibility(clist, S_COL_SUBJECT, prefs_common.show_subject); +} + +static void summary_start_drag (GtkWidget *widget, + gint button, + GdkEvent *event, + SummaryView *summaryview) +{ + GtkTargetList *list; + GdkDragContext *context; + + g_return_if_fail(summaryview != NULL); + g_return_if_fail(summaryview->folder_item != NULL); + g_return_if_fail(summaryview->folder_item->folder != NULL); + if (summaryview->folder_item->folder->type == F_NEWS || + summaryview->selected == NULL) + return; + + list = gtk_target_list_new(summary_drag_types, 1); + + context = gtk_drag_begin(widget, list, + GDK_ACTION_MOVE, button, event); + gtk_drag_set_icon_default(context); +} + +static void summary_drag_data_get(GtkWidget *widget, + GdkDragContext *drag_context, + GtkSelectionData *selection_data, + guint info, + guint time, + SummaryView *summaryview) +{ + if (info == TARGET_MAIL_URI_LIST) { + GtkCTree *ctree = GTK_CTREE(summaryview->ctree); + GList *cur; + MsgInfo *msginfo; + gchar *mail_list = NULL, *tmp1, *tmp2; + + for (cur = GTK_CLIST(ctree)->selection; + cur != NULL; cur = cur->next) { + msginfo = gtk_ctree_node_get_row_data + (ctree, GTK_CTREE_NODE(cur->data)); + tmp2 = procmsg_get_message_file_path(msginfo); + if (!tmp2) continue; + tmp1 = g_strconcat("file:/", tmp2, NULL); + g_free(tmp2); + + if (!mail_list) { + mail_list = tmp1; + } else { + tmp2 = g_strconcat(mail_list, tmp1, NULL); + g_free(mail_list); + g_free(tmp1); + mail_list = tmp2; + } + } + + if (mail_list != NULL) { + gtk_selection_data_set(selection_data, + selection_data->target, 8, + mail_list, strlen(mail_list)); + g_free(mail_list); + } + } else if (info == TARGET_DUMMY) { + if (GTK_CLIST(summaryview->ctree)->selection) + gtk_selection_data_set(selection_data, + selection_data->target, 8, + "Dummy", 6); + } +} + + +/* custom compare functions for sorting */ + +static gint summary_cmp_by_num(GtkCList *clist, + gconstpointer ptr1, gconstpointer ptr2) +{ + MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; + MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; + + return msginfo1->msgnum - msginfo2->msgnum; +} + +static gint summary_cmp_by_size(GtkCList *clist, + gconstpointer ptr1, gconstpointer ptr2) +{ + MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; + MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; + + return msginfo1->size - msginfo2->size; +} + +static gint summary_cmp_by_date(GtkCList *clist, + gconstpointer ptr1, gconstpointer ptr2) +{ + MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; + MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; + + return msginfo1->date_t - msginfo2->date_t; +} + +static gint summary_cmp_by_from(GtkCList *clist, + gconstpointer ptr1, gconstpointer ptr2) +{ + MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; + MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; + + if (!msginfo1->fromname) + return (msginfo2->fromname != NULL); + if (!msginfo2->fromname) + return -1; + + return strcasecmp(msginfo1->fromname, msginfo2->fromname); +} + +static gint summary_cmp_by_subject(GtkCList *clist, + gconstpointer ptr1, gconstpointer ptr2) +{ + MsgInfo *msginfo1 = ((GtkCListRow *)ptr1)->data; + MsgInfo *msginfo2 = ((GtkCListRow *)ptr2)->data; + + if (!msginfo1->subject) + return (msginfo2->subject != NULL); + if (!msginfo2->subject) + return -1; + + return strcasecmp(msginfo1->subject, msginfo2->subject); +} diff --git a/src/summaryview.h b/src/summaryview.h new file mode 100644 index 000000000..496ce903f --- /dev/null +++ b/src/summaryview.h @@ -0,0 +1,190 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifndef __SUMMARY_H__ +#define __SUMMARY_H__ + +#include <glib.h> +#include <gdk/gdk.h> +#include <gtk/gtkwidget.h> +#include <gtk/gtkitemfactory.h> +#include <gtk/gtkctree.h> +#include <gtk/gtkdnd.h> + +typedef struct _SummaryView SummaryView; + +#include "mainwindow.h" +#include "folderview.h" +#include "headerview.h" +#include "messageview.h" +#include "headerwindow.h" +#include "folder.h" +#include "gtksctree.h" + +typedef enum +{ + S_COL_MARK = 0, + S_COL_UNREAD = 1, + S_COL_MIME = 2, + S_COL_NUMBER = 3, + S_COL_SIZE = 4, + S_COL_DATE = 5, + S_COL_FROM = 6, + S_COL_SUBJECT = 7 +} SummaryColumnPos; + +#define N_SUMMARY_COLS 8 + +typedef enum +{ + SORT_BY_NONE, + SORT_BY_NUMBER, + SORT_BY_SIZE, + SORT_BY_DATE, + SORT_BY_FROM, + SORT_BY_SUBJECT +} SummarySortType; + +typedef enum +{ + SUMMARY_NONE, + SUMMARY_SELECTED_NONE, + SUMMARY_SELECTED_SINGLE, + SUMMARY_SELECTED_MULTIPLE +} SummarySelection; + +typedef enum +{ + TARGET_MAIL_URI_LIST, + TARGET_DUMMY +} TargetInfo; + +extern GtkTargetEntry summary_drag_types[1]; + +struct _SummaryView +{ + GtkWidget *vbox; + GtkWidget *scrolledwin; + GtkWidget *ctree; + GtkWidget *hbox; + GtkWidget *statlabel_folder; + GtkWidget *statlabel_select; + GtkWidget *statlabel_msgs; + GtkWidget *toggle_eventbox; + GtkWidget *toggle_arrow; + GtkWidget *popupmenu; + + GtkItemFactory *popupfactory; + + GtkWidget *window; + + GtkCTreeNode *selected; + GtkCTreeNode *displayed; + + gboolean msg_is_toggled_on; + gboolean display_msg; + + GdkColor color_marked; + GdkColor color_dim; + GdkColor color_normal; + + MainWindow *mainwin; + FolderView *folderview; + HeaderView *headerview; + MessageView *messageview; + HeaderWindow *headerwin; + + FolderItem *folder_item; + + /* current message status */ + gint newmsgs; + gint unread; + gint messages; + off_t total_size; + gint deleted; + gint moved; + gint copied; + +/* +private: +*/ + /* table for looking up message-id */ + GHashTable *msgid_table; + + /* list for moving/deleting messages */ + GSList *mlist; + /* table for updating folder tree */ + GHashTable *folder_table; + + /* current sorting state */ + SummarySortType sort_mode; + GtkSortType sort_type; +}; + +SummaryView *summary_create(void); + +void summary_init (SummaryView *summaryview); +gboolean summary_show (SummaryView *summaryview, + FolderItem *fitem, + gboolean update_cache); +void summary_clear_list (SummaryView *summaryview); +void summary_clear_all (SummaryView *summaryview); + +void summary_select_next_unread (SummaryView *summaryview); +void summary_select_by_msgnum (SummaryView *summaryview, + guint msgnum); +guint summary_get_current_msgnum (SummaryView *summaryview); +void summary_thread_build (SummaryView *summaryview); +void summary_unthread (SummaryView *summaryview); +void summary_filter (SummaryView *summaryview); +void summary_sort (SummaryView *summaryview, + SummarySortType type); + +void summary_delete (SummaryView *summaryview); +void summary_delete_duplicated (SummaryView *summaryview); +void summary_execute (SummaryView *summaryview); +void summary_attract_by_subject (SummaryView *summaryview); +gint summary_write_cache (SummaryView *summaryview); +void summary_pass_key_press_event (SummaryView *summaryview, + GdkEventKey *event); +void summary_change_display_item (SummaryView *summaryview); +void summary_redisplay_msg (SummaryView *summaryview); +void summary_open_msg (SummaryView *summaryview); +void summary_view_source (SummaryView *summaryview); +void summary_reedit (SummaryView *summaryview); +void summary_step (SummaryView *summaryview, + GtkScrollType type); +void summary_set_marks_selected (SummaryView *summaryview); + +void summary_move_selected_to (SummaryView *summaryview, + FolderItem *to_folder); +void summary_move_to (SummaryView *summaryview); +void summary_copy_selected_to (SummaryView *summaryview, + FolderItem *to_folder); +void summary_copy_to (SummaryView *summaryview); +void summary_save_as (SummaryView *summaryview); +void summary_print (SummaryView *summaryview); +void summary_mark (SummaryView *summaryview); +void summary_unmark (SummaryView *summaryview); +void summary_mark_as_unread (SummaryView *summaryview); +void summary_mark_as_read (SummaryView *summaryview); +void summary_select_all (SummaryView *summaryview); +void summary_unselect_all (SummaryView *summaryview); + +#endif /* __SUMMARY_H__ */ diff --git a/src/textview.c b/src/textview.c new file mode 100644 index 000000000..ce2ad8d90 --- /dev/null +++ b/src/textview.c @@ -0,0 +1,1200 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <gdk/gdk.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtkvbox.h> +#include <gtk/gtkscrolledwindow.h> +#include <gtk/gtktext.h> +#include <gtk/gtksignal.h> +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <stdlib.h> + +#include "intl.h" +#include "main.h" +#include "summaryview.h" +#include "procheader.h" +#include "prefs_common.h" +#include "codeconv.h" +#include "utils.h" +#include "gtkutils.h" +#include "procmime.h" +#include "html.h" +#include "compose.h" + +#define FONT_LOAD(font, s) \ +{ \ + gchar *fontstr, *p; \ + \ + Xstrdup_a(fontstr, s, ); \ + if ((p = strchr(fontstr, ',')) != NULL) *p = '\0'; \ + font = gdk_font_load(fontstr); \ +} + +typedef struct _RemoteURI RemoteURI; + +struct _RemoteURI +{ + gchar *uri; + + guint start; + guint end; +}; + +static GdkColor quote_colors[3] = { + {(gulong)0, (gushort)0, (gushort)0, (gushort)0}, + {(gulong)0, (gushort)0, (gushort)0, (gushort)0}, + {(gulong)0, (gushort)0, (gushort)0, (gushort)0} +}; + +static GdkColor uri_color = { + (gulong)0, + (gushort)0, + (gushort)0, + (gushort)0 +}; + +static GdkColor emphasis_color = { + (gulong)0, + (gushort)0, + (gushort)0, + (gushort)0xcfff +}; + +static GdkColor error_color = { + (gulong)0, + (gushort)0xefff, + (gushort)0, + (gushort)0 +}; + +static GdkFont *spacingfont; + +static void textview_show_html (TextView *textview, + FILE *fp, + CodeConverter *conv); +static void textview_write_line (TextView *textview, + const gchar *str, + CodeConverter *conv); +static GPtrArray *textview_scan_header (TextView *textview, + FILE *fp); +static void textview_show_header (TextView *textview, + GPtrArray *headers); + +static void textview_key_pressed (GtkWidget *widget, + GdkEventKey *event, + TextView *textview); +static void textview_button_pressed (GtkWidget *widget, + GdkEventButton *event, + TextView *textview); + +static void textview_uri_list_remove_all(GSList *uri_list); + +static void textview_smooth_scroll_do (TextView *textview, + gfloat old_value, + gfloat last_value, + gint step); +static void textview_smooth_scroll_one_line (TextView *textview, + gboolean up); +static gboolean textview_smooth_scroll_page (TextView *textview, + gboolean up); + + +TextView *textview_create(void) +{ + TextView *textview; + GtkWidget *vbox; + GtkWidget *scrolledwin_sb; + GtkWidget *scrolledwin_mb; + GtkWidget *text_sb; + GtkWidget *text_mb; + + debug_print(_("Creating text view...\n")); + textview = g_new0(TextView, 1); + + scrolledwin_sb = gtk_scrolled_window_new(NULL, NULL); + scrolledwin_mb = gtk_scrolled_window_new(NULL, NULL); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin_sb), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwin_mb), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); + gtk_widget_set_usize(scrolledwin_sb, prefs_common.mainview_width, -1); + gtk_widget_set_usize(scrolledwin_mb, prefs_common.mainview_width, -1); + + /* create GtkText widgets for single-byte and multi-byte character */ + text_sb = gtk_text_new(NULL, NULL); + text_mb = gtk_text_new(NULL, NULL); + gtk_widget_show(text_sb); + gtk_widget_show(text_mb); + gtk_text_set_word_wrap(GTK_TEXT(text_sb), TRUE); + gtk_text_set_word_wrap(GTK_TEXT(text_mb), TRUE); + gtk_widget_ensure_style(text_sb); + gtk_widget_ensure_style(text_mb); + if (text_sb->style && text_sb->style->font->type == GDK_FONT_FONTSET) { + GtkStyle *style; + + style = gtk_style_copy(text_sb->style); + gdk_font_unref(style->font); + FONT_LOAD(style->font, NORMAL_FONT); + gtk_widget_set_style(text_sb, style); + } + if (text_mb->style && text_mb->style->font->type == GDK_FONT_FONT) { + GtkStyle *style; + + style = gtk_style_copy(text_mb->style); + gdk_font_unref(style->font); + style->font = gdk_fontset_load(NORMAL_FONT); + gtk_widget_set_style(text_mb, style); + } + gtk_widget_ref(scrolledwin_sb); + gtk_widget_ref(scrolledwin_mb); + + gtk_container_add(GTK_CONTAINER(scrolledwin_sb), text_sb); + gtk_container_add(GTK_CONTAINER(scrolledwin_mb), text_mb); + gtk_signal_connect(GTK_OBJECT(text_sb), "key_press_event", + GTK_SIGNAL_FUNC(textview_key_pressed), + textview); + gtk_signal_connect(GTK_OBJECT(text_sb), "button_press_event", + GTK_SIGNAL_FUNC(textview_button_pressed), + textview); + gtk_signal_connect(GTK_OBJECT(text_mb), "key_press_event", + GTK_SIGNAL_FUNC(textview_key_pressed), + textview); + gtk_signal_connect(GTK_OBJECT(text_mb), "button_press_event", + GTK_SIGNAL_FUNC(textview_button_pressed), + textview); + + gtk_widget_show(scrolledwin_sb); + gtk_widget_show(scrolledwin_mb); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), scrolledwin_sb, TRUE, TRUE, 0); + + textview->vbox = vbox; + textview->scrolledwin = scrolledwin_sb; + textview->scrolledwin_sb = scrolledwin_sb; + textview->scrolledwin_mb = scrolledwin_mb; + textview->text = text_sb; + textview->text_sb = text_sb; + textview->text_mb = text_mb; + textview->text_is_mb = FALSE; + textview->uri_list = NULL; + + return textview; +} + +void textview_init(TextView *textview) +{ + gtkut_widget_disable_theme_engine(textview->text_sb); + gtkut_widget_disable_theme_engine(textview->text_mb); + textview_update_message_colors(); + textview_set_font(textview, NULL); +} + +void textview_update_message_colors(void) +{ + GdkColor black = {0, 0, 0, 0}; + + if (prefs_common.enable_color) { + /* grab the quote colors, converting from an int to a GdkColor */ + gtkut_convert_int_to_gdk_color(prefs_common.quote_level1_col, + "e_colors[0]); + gtkut_convert_int_to_gdk_color(prefs_common.quote_level2_col, + "e_colors[1]); + gtkut_convert_int_to_gdk_color(prefs_common.quote_level3_col, + "e_colors[2]); + gtkut_convert_int_to_gdk_color(prefs_common.uri_col, + &uri_color); + } else { + quote_colors[0] = quote_colors[1] = quote_colors[2] = + uri_color = emphasis_color = black; + } +} + +void textview_show_message(TextView *textview, MimeInfo *mimeinfo, + const gchar *file) +{ + FILE *fp; + + if ((fp = fopen(file, "r")) == NULL) { + FILE_OP_ERROR(file, "fopen"); + return; + } + + textview_show_part(textview, mimeinfo, fp); + + fclose(fp); +} + +void textview_show_part(TextView *textview, MimeInfo *mimeinfo, FILE *fp) +{ + GtkText *text; + gchar buf[BUFFSIZE]; + const gchar *boundary = NULL; + gint boundary_len = 0; + const gchar *charset = NULL; + FILE *tmpfp; + GPtrArray *headers = NULL; + CodeConverter *conv; + + g_return_if_fail(mimeinfo != NULL); + g_return_if_fail(fp != NULL); + + if (mimeinfo->mime_type == MIME_MULTIPART) { + if (mimeinfo->sub) { + mimeinfo = mimeinfo->sub; + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) { + perror("fseek"); + return; + } + } else + return; + } + if (mimeinfo->parent && mimeinfo->parent->boundary) { + boundary = mimeinfo->parent->boundary; + boundary_len = strlen(boundary); + } + + if (!boundary && mimeinfo->mime_type == MIME_TEXT) { + if (fseek(fp, mimeinfo->fpos, SEEK_SET) < 0) + perror("fseek"); + headers = textview_scan_header(textview, fp); + } else { + if (mimeinfo->mime_type == MIME_TEXT && mimeinfo->parent) { + glong fpos; + + if ((fpos = ftell(fp)) < 0) + perror("ftell"); + else if (fseek(fp, mimeinfo->parent->fpos, SEEK_SET) + < 0) + perror("fseek"); + else { + headers = textview_scan_header(textview, fp); + if (fseek(fp, fpos, SEEK_SET) < 0) + perror("fseek"); + } + } + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + } + + /* display attached RFC822 single text message */ + if (mimeinfo->parent && mimeinfo->mime_type == MIME_MESSAGE_RFC822) { + if (!mimeinfo->sub || mimeinfo->sub->children) return; + headers = textview_scan_header(textview, fp); + mimeinfo = mimeinfo->sub; + } else if (!mimeinfo->parent && + mimeinfo->mime_type == MIME_MESSAGE_RFC822) { + if (!mimeinfo->sub) return; + headers = textview_scan_header(textview, fp); + mimeinfo = mimeinfo->sub; + } + + if (prefs_common.force_charset) + charset = prefs_common.force_charset; + else if (mimeinfo->charset) + charset = mimeinfo->charset; + textview_set_font(textview, charset); + + conv = conv_code_converter_new(charset); + + textview_clear(textview); + text = GTK_TEXT(textview->text); + gtk_text_freeze(text); + + if (headers) { + gint i; + + textview_show_header(textview, headers); + for (i = 0; i < headers->len; i++) { + Header *header = g_ptr_array_index(headers, i); + g_free(header->body); + g_free(header->name); + g_free(header); + } + g_ptr_array_free(headers, TRUE); + } + + tmpfp = procmime_decode_content(NULL, fp, mimeinfo); + if (tmpfp) { + if (mimeinfo->mime_type == MIME_TEXT_HTML) + textview_show_html(textview, tmpfp, conv); + else + while (fgets(buf, sizeof(buf), tmpfp) != NULL) + textview_write_line(textview, buf, conv); + fclose(tmpfp); + } + + conv_code_converter_destroy(conv); + + gtk_text_thaw(text); +} + +void textview_show_mime_part(TextView *textview, MimeInfo *partinfo) +{ + GtkText *text; + + if (!partinfo) return; + + textview_set_font(textview, NULL); + text = GTK_TEXT(textview->text); + textview_clear(textview); + + gtk_text_freeze(text); + + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("To save this part, pop up the context menu with\n"), -1); + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("right click and select `Save as...', or press `y' key.\n\n"), -1); + + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("To display this part as a text message, select\n"), -1); + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("`Display as text', or press `t' key.\n\n"), -1); + + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("To open this part with external program, select `Open',\n"), -1); + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("or double-click, or click the center button, or press `l' key."), -1); + + gtk_text_thaw(text); +} + +#if USE_GPGME +void textview_show_signature_part(TextView *textview, MimeInfo *partinfo) +{ + GtkText *text; + + if (!partinfo) return; + + textview_set_font(textview, NULL); + text = GTK_TEXT(textview->text); + textview_clear(textview); + + gtk_text_freeze(text); + + if (partinfo->sigstatus_full == NULL) { + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("This signature has not been checked yet.\n"), -1); + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("To check it, pop up the context menu with\n"), -1); + gtk_text_insert + (text, textview->msgfont, NULL, NULL, + _("right click and select `Check signature'.\n"), -1); + } else { + gtk_text_insert(text, textview->msgfont, NULL, NULL, + partinfo->sigstatus_full, -1); + } + + gtk_text_thaw(text); +} +#endif /* USE_GPGME */ + +static void textview_show_html(TextView *textview, FILE *fp, + CodeConverter *conv) +{ + HTMLParser *parser; + gchar *str; + + parser = html_parser_new(fp, conv); + g_return_if_fail(parser != NULL); + + while ((str = html_parse(parser)) != NULL) { + textview_write_line(textview, str, NULL); + } + html_parser_destroy(parser); +} + +/* get_uri_part() - retrieves a URI starting from scanpos. + Returns TRUE if succesful */ +static gboolean get_uri_part(const gchar *start, const gchar *scanpos, + const gchar **bp, const gchar **ep) +{ + const gchar *ep_; + + g_return_val_if_fail(start != NULL, FALSE); + g_return_val_if_fail(scanpos != NULL, FALSE); + g_return_val_if_fail(bp != NULL, FALSE); + g_return_val_if_fail(ep != NULL, FALSE); + + *bp = scanpos; + + /* find end point of URI */ + for (ep_ = scanpos; *ep_ != '\0'; ep_++) { + if (!isgraph(*ep_) || !isascii(*ep_) || strchr("()<>\"", *ep_)) + break; + } + + /* no punctuation at end of string */ + + /* FIXME: this stripping of trailing punctuations may bite with other URIs. + * should pass some URI type to this function and decide on that whether + * to perform punctuation stripping */ + +#define IS_REAL_PUNCT(ch) \ + (ispunct(ch) && ((ch) != '/')) + + for (; ep_ - 1 > scanpos + 1 && IS_REAL_PUNCT(*(ep_ - 1)); ep_--) + ; + +#undef IS_REAL_PUNCT + + *ep = ep_; + + return TRUE; +} + +static gchar *make_uri_string(const gchar *bp, const gchar *ep) +{ + return g_strndup(bp, ep - bp); +} + +/* valid mail address characters */ +#define IS_RFC822_CHAR(ch) \ + (isascii(ch) && \ + (ch) > 32 && \ + (ch) != 127 && \ + !isspace(ch) && \ + !strchr("()<>\"", (ch))) + +/* get_email_part() - retrieves an email address. Returns TRUE if succesful */ +static gboolean get_email_part(const gchar *start, const gchar *scanpos, + const gchar **bp, const gchar **ep) +{ + /* more complex than the uri part because we need to scan back and forward starting from + * the scan position. */ + gboolean result = FALSE; + const gchar *bp_; + const gchar *ep_; + + g_return_val_if_fail(start != NULL, FALSE); + g_return_val_if_fail(scanpos != NULL, FALSE); + g_return_val_if_fail(bp != NULL, FALSE); + g_return_val_if_fail(ep != NULL, FALSE); + + /* scan start of address */ + for (bp_ = scanpos - 1; bp_ >= start && IS_RFC822_CHAR(*bp_); bp_--) + ; + + /* TODO: should start with an alnum? */ + bp_++; + for (; bp_ < scanpos && !isalnum(*bp_); bp_++) + ; + + if (bp_ != scanpos) { + /* scan end of address */ + for (ep_ = scanpos + 1; *ep_ && IS_RFC822_CHAR(*ep_); ep_++) + ; + + /* TODO: really should terminate with an alnum? */ + for (; ep_ > scanpos && !isalnum(*ep_); --ep_) + ; + ep_++; + + if (ep_ > scanpos + 1) { + *ep = ep_; + *bp = bp_; + result = TRUE; + } + } + + return result; +} + +#undef IS_RFC822_CHAR + +static gchar *make_email_string(const gchar *bp, const gchar *ep) +{ + /* returns a mailto: URI; mailto: is also used to detect the + * uri type later on in the button_pressed signal handler */ + gchar *tmp; + gchar *result; + + tmp = g_strndup(bp, ep - bp); + result = g_strconcat("mailto:", tmp, NULL); + g_free(tmp); + + return result; +} + +#define ADD_TXT_POS(bp_, ep_, pti_) \ + if ((last->next = alloca(sizeof(struct txtpos))) != NULL) { \ + last = last->next; \ + last->bp = (bp_); last->ep = (ep_); last->pti = (pti_); \ + last->next = NULL; \ + } else { \ + g_warning("alloc error scanning URIs\n"); \ + gtk_text_insert(text, textview->msgfont, fg_color, NULL, \ + linebuf, -1); \ + return; \ + } + +/* textview_make_clickable_parts() - colorizes clickable parts */ +static void textview_make_clickable_parts(TextView *textview, GtkText *text, + GdkColor *fg_color, + GdkColor *uri_color, + const gchar *linebuf) +{ + /* parse table - in order of priority */ + struct table { + const gchar *needle; /* token */ + + /* token search function */ + gchar *(*search) (const gchar *haystack, + const gchar *needle); + /* part parsing function */ + gboolean (*parse) (const gchar *start, + const gchar *scanpos, + const gchar **bp_, + const gchar **ep_); + /* part to URI function */ + gchar *(*build_uri) (const gchar *bp, + const gchar *ep); + }; + + static struct table parser[] = { + {"http://", strcasestr, get_uri_part, make_uri_string}, + {"https://", strcasestr, get_uri_part, make_uri_string}, + {"ftp://", strcasestr, get_uri_part, make_uri_string}, + {"mailto:", strcasestr, get_uri_part, make_uri_string}, + {"@", strcasestr, get_email_part, make_email_string} + }; + const gint PARSE_ELEMS = sizeof parser / sizeof parser[0]; + + gint n; + const gchar *walk, *bp, *ep; + + struct txtpos { + const gchar *bp, *ep; /* text position */ + gint pti; /* index in parse table */ + struct txtpos *next; /* next */ + } head = {NULL, NULL, 0, NULL}, *last = &head; + + /* parse for clickable parts, and build a list of begin and end positions */ + for (walk = linebuf, n = 0;;) { + gint last_index = PARSE_ELEMS; + gchar *scanpos = NULL; + + /* FIXME: this looks phony. scanning for anything in the parse table */ + for (n = 0; n < PARSE_ELEMS; n++) { + gchar *tmp; + + tmp = parser[n].search(walk, parser[n].needle); + if (tmp) { + if (scanpos == NULL || tmp < scanpos) { + scanpos = tmp; + last_index = n; + } + } + } + + if (scanpos) { + /* check if URI can be parsed */ + if (parser[last_index].parse(linebuf, scanpos, &bp, &ep) + && (ep - bp - 1) > strlen(parser[n].needle)) { + ADD_TXT_POS(bp, ep, last_index); + walk = ep; + } else + walk = scanpos + + strlen(parser[last_index].needle); + } else + break; + } + + /* colorize this line */ + if (head.next) { + const gchar *normal_text = linebuf; + + /* insert URIs */ + for (last = head.next; last != NULL; + normal_text = last->ep, last = last->next) { + RemoteURI *uri; + + uri = g_new(RemoteURI, 1); + if (last->bp - normal_text > 0) + gtk_text_insert(text, textview->msgfont, + fg_color, NULL, + normal_text, + last->bp - normal_text); + uri->uri = parser[last->pti].build_uri(last->bp, last->ep); + uri->start = gtk_text_get_point(text); + gtk_text_insert(text, textview->msgfont, uri_color, + NULL, last->bp, last->ep - last->bp); + uri->end = gtk_text_get_point(text); + textview->uri_list = + g_slist_append(textview->uri_list, uri); + } + + if (*normal_text) + gtk_text_insert(text, textview->msgfont, fg_color, + NULL, normal_text, -1); + } else + gtk_text_insert(text, textview->msgfont, fg_color, NULL, + linebuf, -1); +} + +#undef ADD_TXT_POS + +static void textview_write_line(TextView *textview, const gchar *str, + CodeConverter *conv) +{ + GtkText *text = GTK_TEXT(textview->text); + gchar buf[BUFFSIZE]; + size_t len; + GdkColor *fg_color; + gint quotelevel = -1; + + if (!conv) + strncpy2(buf, str, sizeof(buf)); + else if (conv_convert(conv, buf, sizeof(buf), str) < 0) { + gtk_text_insert(text, textview->msgfont, + prefs_common.enable_color + ? &error_color : NULL, NULL, + "*** Warning: code conversion failed ***\n", + -1); + return; + } + + len = strlen(buf); + if (len > 1 && buf[len - 1] == '\n' && buf[len - 2] == '\r') { + buf[len - 2] = '\n'; + buf[len - 1] = '\0'; + } + if (prefs_common.conv_mb_alnum) conv_mb_alnum(buf); + fg_color = NULL; + + /* change color of quotation + >, foo>, _> ... ok, <foo>, foo bar>, foo-> ... ng + Up to 3 levels of quotations are detected, and each + level is colored using a different color. */ + if (prefs_common.enable_color && strchr(buf, '>')) { + quotelevel = get_quote_level(buf); + + /* set up the correct foreground color */ + if (quotelevel > 2) { + /* recycle colors */ + if (prefs_common.recycle_quote_colors) + quotelevel %= 3; + else + quotelevel = 2; + } + } + + if (quotelevel == -1) + fg_color = NULL; + else + fg_color = "e_colors[quotelevel]; + + if (prefs_common.head_space && spacingfont && buf[0] != '\n') + gtk_text_insert(text, spacingfont, NULL, NULL, " ", 1); + + if (prefs_common.enable_color) + textview_make_clickable_parts(textview, text, + fg_color, &uri_color, buf); + else + gtk_text_insert(text, textview->msgfont, fg_color, NULL, + buf, -1); +} + +void textview_clear(TextView *textview) +{ + GtkText *text = GTK_TEXT(textview->text); + + gtk_text_freeze(text); + gtk_text_backward_delete(text, gtk_text_get_length(text)); + gtk_text_thaw(text); + + textview_uri_list_remove_all(textview->uri_list); + textview->uri_list = NULL; +} + +void textview_destroy(TextView *textview) +{ + textview_uri_list_remove_all(textview->uri_list); + textview->uri_list = NULL; + + if (!textview->scrolledwin_sb->parent) + gtk_widget_destroy(textview->scrolledwin_sb); + if (!textview->scrolledwin_mb->parent) + gtk_widget_destroy(textview->scrolledwin_mb); + + if (textview->msgfont) { + textview->msgfont->ascent = textview->prev_ascent; + textview->msgfont->descent = textview->prev_descent; + gdk_font_unref(textview->msgfont); + } + if (textview->boldfont) + gdk_font_unref(textview->boldfont); + + g_free(textview); +} + +void textview_set_font(TextView *textview, const gchar *codeset) +{ + gboolean use_fontset = TRUE; + + /* In multi-byte mode, GtkText can't display 8bit characters + correctly, so it must be single-byte mode. */ + if (MB_CUR_MAX > 1) { + if (codeset) { + if (!strncasecmp(codeset, "ISO-8859-", 9) || + !strncasecmp(codeset, "KOI8-", 5) || + !strncasecmp(codeset, "CP", 2) || + !strncasecmp(codeset, "WINDOWS-", 8) || + !strcasecmp(codeset, "BALTIC")) + use_fontset = FALSE; + } + } else + use_fontset = FALSE; + + if (textview->text_is_mb && !use_fontset) { + GtkWidget *parent; + + parent = textview->scrolledwin_mb->parent; + gtk_editable_select_region + (GTK_EDITABLE(textview->text_mb), 0, 0); + gtk_container_remove(GTK_CONTAINER(parent), + textview->scrolledwin_mb); + gtk_container_add(GTK_CONTAINER(parent), + textview->scrolledwin_sb); + + textview->text = textview->text_sb; + textview->text_is_mb = FALSE; + } else if (!textview->text_is_mb && use_fontset) { + GtkWidget *parent; + + parent = textview->scrolledwin_sb->parent; + gtk_editable_select_region + (GTK_EDITABLE(textview->text_sb), 0, 0); + gtk_container_remove(GTK_CONTAINER(parent), + textview->scrolledwin_sb); + gtk_container_add(GTK_CONTAINER(parent), + textview->scrolledwin_mb); + + textview->text = textview->text_mb; + textview->text_is_mb = TRUE; + } + + if (prefs_common.textfont) { + if (textview->msgfont) { + textview->msgfont->ascent = textview->prev_ascent; + textview->msgfont->descent = textview->prev_descent; + gdk_font_unref(textview->msgfont); + textview->msgfont = NULL; + } + if (use_fontset) + textview->msgfont = + gdk_fontset_load(prefs_common.textfont); + else { + if (MB_CUR_MAX > 1) { + FONT_LOAD(textview->msgfont, + "-*-courier-medium-r-normal--14-*-*-*-*-*-iso8859-1"); + } else { + FONT_LOAD(textview->msgfont, + prefs_common.textfont); + } + } + + if (textview->msgfont) { + gint ascent, descent; + + textview->prev_ascent = textview->msgfont->ascent; + textview->prev_descent = textview->msgfont->descent; + descent = prefs_common.line_space / 2; + ascent = prefs_common.line_space - descent; + textview->msgfont->ascent += ascent; + textview->msgfont->descent += descent; + } + } + + if (!textview->boldfont) + FONT_LOAD(textview->boldfont, BOLD_FONT); + if (!spacingfont) + spacingfont = gdk_font_load("-*-*-medium-r-normal--6-*"); +} + +enum +{ + H_DATE = 0, + H_FROM = 1, + H_TO = 2, + H_NEWSGROUPS = 3, + H_SUBJECT = 4, + H_CC = 5, + H_REPLY_TO = 6, + H_FOLLOWUP_TO = 7, + H_X_MAILER = 8, + H_X_NEWSREADER = 9, + H_USER_AGENT = 10, + H_ORGANIZATION = 11, +}; + +static GPtrArray *textview_scan_header(TextView *textview, FILE *fp) +{ + static HeaderEntry hentry[] = {{"Date:", NULL, FALSE}, + {"From:", NULL, TRUE}, + {"To:", NULL, FALSE}, + {"Newsgroups:", NULL, FALSE}, + {"Subject:", NULL, TRUE}, + {"Cc:", NULL, FALSE}, + {"Reply-To:", NULL, FALSE}, + {"Followup-To:", NULL, FALSE}, + {"X-Mailer:", NULL, TRUE}, + {"X-Newsreader:", NULL, TRUE}, + {"User-Agent:", NULL, TRUE}, + {"Organization:", NULL, TRUE}, + {NULL, NULL, FALSE}}; + gchar buf[BUFFSIZE], tmp[BUFFSIZE]; + gint hnum; + HeaderEntry *hp; + GPtrArray *headers; + + g_return_val_if_fail(fp != NULL, NULL); + + if (!prefs_common.display_header) { + while (fgets(buf, sizeof(buf), fp) != NULL) + if (buf[0] == '\r' || buf[0] == '\n') break; + return NULL; + } + + headers = g_ptr_array_new(); + + while ((hnum = procheader_get_one_field(buf, sizeof(buf), fp, hentry)) + != -1) { + Header *header; + + hp = hentry + hnum; + + header = g_new(Header, 1); + header->name = g_strndup(buf, strlen(hp->name)); + conv_unmime_header(tmp, sizeof(tmp), buf + strlen(hp->name), + NULL); + header->body = g_strdup(tmp); + + g_ptr_array_add(headers, header); + } + + return headers; +} + +static void textview_show_header(TextView *textview, GPtrArray *headers) +{ + GtkText *text = GTK_TEXT(textview->text); + Header *header; + gint i; + + g_return_if_fail(headers != NULL); + + gtk_text_freeze(text); + + for (i = 0; i < headers->len; i++) { + header = g_ptr_array_index(headers, i); + g_return_if_fail(header->name != NULL); + + gtk_text_insert(text, textview->boldfont, NULL, NULL, + header->name, -1); + if (prefs_common.enable_color && + (strncmp(header->name, "X-Mailer", 8) == 0 || + strncmp(header->name, "X-Newsreader", 12) == 0) && + strstr(header->body, "Sylpheed") != NULL) + gtk_text_insert(text, NULL, &emphasis_color, NULL, + header->body, -1); + else + gtk_text_insert(text, NULL, NULL, NULL, + header->body, -1); + gtk_text_insert(text, textview->msgfont, NULL, NULL, "\n", 1); + } + + gtk_text_insert(text, textview->msgfont, NULL, NULL, "\n", 1); + gtk_text_thaw(text); +} + +void textview_scroll_one_line(TextView *textview, gboolean up) +{ + GtkText *text = GTK_TEXT(textview->text); + gfloat upper; + + if (prefs_common.enable_smooth_scroll) { + textview_smooth_scroll_one_line(textview, up); + return; + } + + if (!up) { + upper = text->vadj->upper - text->vadj->page_size; + if (text->vadj->value < upper) { + text->vadj->value += + text->vadj->step_increment * 4; + text->vadj->value = + MIN(text->vadj->value, upper); + gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), + "value_changed"); + } + } else { + if (text->vadj->value > 0.0) { + text->vadj->value -= + text->vadj->step_increment * 4; + text->vadj->value = + MAX(text->vadj->value, 0.0); + gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), + "value_changed"); + } + } +} + +gboolean textview_scroll_page(TextView *textview, gboolean up) +{ + GtkText *text = GTK_TEXT(textview->text); + gfloat upper; + gfloat page_incr; + + if (prefs_common.enable_smooth_scroll) + return textview_smooth_scroll_page(textview, up); + + if (prefs_common.scroll_halfpage) + page_incr = text->vadj->page_increment / 2; + else + page_incr = text->vadj->page_increment; + + if (!up) { + upper = text->vadj->upper - text->vadj->page_size; + if (text->vadj->value < upper) { + text->vadj->value += page_incr; + text->vadj->value = MIN(text->vadj->value, upper); + gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), + "value_changed"); + } else + return FALSE; + } else { + if (text->vadj->value > 0.0) { + text->vadj->value -= page_incr; + text->vadj->value = MAX(text->vadj->value, 0.0); + gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), + "value_changed"); + } else + return FALSE; + } + + return TRUE; +} + +static void textview_smooth_scroll_do(TextView *textview, + gfloat old_value, gfloat last_value, + gint step) +{ + GtkText *text = GTK_TEXT(textview->text); + gint change_value; + gboolean up; + gint i; + + if (old_value < last_value) { + change_value = last_value - old_value; + up = FALSE; + } else { + change_value = old_value - last_value; + up = TRUE; + } + + gdk_key_repeat_disable(); + + for (i = step; i <= change_value; i += step) { + text->vadj->value = old_value + (up ? -i : i); + gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), + "value_changed"); + } + + text->vadj->value = last_value; + gtk_signal_emit_by_name(GTK_OBJECT(text->vadj), "value_changed"); + + gdk_key_repeat_restore(); +} + +static void textview_smooth_scroll_one_line(TextView *textview, gboolean up) +{ + GtkText *text = GTK_TEXT(textview->text); + gfloat upper; + gfloat old_value; + gfloat last_value; + + if (!up) { + upper = text->vadj->upper - text->vadj->page_size; + if (text->vadj->value < upper) { + old_value = text->vadj->value; + last_value = text->vadj->value + + text->vadj->step_increment * 4; + last_value = MIN(last_value, upper); + + textview_smooth_scroll_do(textview, old_value, + last_value, + prefs_common.scroll_step); + } + } else { + if (text->vadj->value > 0.0) { + old_value = text->vadj->value; + last_value = text->vadj->value - + text->vadj->step_increment * 4; + last_value = MAX(last_value, 0.0); + + textview_smooth_scroll_do(textview, old_value, + last_value, + prefs_common.scroll_step); + } + } +} + +static gboolean textview_smooth_scroll_page(TextView *textview, gboolean up) +{ + GtkText *text = GTK_TEXT(textview->text); + gfloat upper; + gfloat page_incr; + gfloat old_value; + gfloat last_value; + + if (prefs_common.scroll_halfpage) + page_incr = text->vadj->page_increment / 2; + else + page_incr = text->vadj->page_increment; + + if (!up) { + upper = text->vadj->upper - text->vadj->page_size; + if (text->vadj->value < upper) { + old_value = text->vadj->value; + last_value = text->vadj->value + page_incr; + last_value = MIN(last_value, upper); + + textview_smooth_scroll_do(textview, old_value, + last_value, + prefs_common.scroll_step); + } else + return FALSE; + } else { + if (text->vadj->value > 0.0) { + old_value = text->vadj->value; + last_value = text->vadj->value - page_incr; + last_value = MAX(last_value, 0.0); + + textview_smooth_scroll_do(textview, old_value, + last_value, + prefs_common.scroll_step); + } else + return FALSE; + } + + return TRUE; +} + +static void textview_key_pressed(GtkWidget *widget, GdkEventKey *event, + TextView *textview) +{ + SummaryView *summaryview = NULL; + + if (!event) return; + if (textview->messageview->mainwin) + summaryview = textview->messageview->mainwin->summaryview; + + switch (event->keyval) { + case GDK_Tab: + case GDK_Home: + case GDK_Left: + case GDK_Up: + case GDK_Right: + case GDK_Down: + case GDK_Page_Up: + case GDK_Page_Down: + case GDK_End: + case GDK_Control_L: + case GDK_Control_R: + break; + case GDK_space: + if (summaryview) + summary_pass_key_press_event(summaryview, event); + else + textview_scroll_page(textview, FALSE); + break; + case GDK_BackSpace: + case GDK_Delete: + textview_scroll_page(textview, TRUE); + break; + case GDK_Return: + textview_scroll_one_line(textview, + (event->state & GDK_MOD1_MASK) != 0); + break; + default: + if (summaryview) + summary_pass_key_press_event(summaryview, event); + break; + } +} + +static void textview_button_pressed(GtkWidget *widget, GdkEventButton *event, + TextView *textview) +{ + if (event && + ((event->button == 1 && event->type == GDK_2BUTTON_PRESS) || + event->button == 2)) { + GSList *cur; + guint current_pos; + + current_pos = GTK_EDITABLE(textview->text)->current_pos; + + for (cur = textview->uri_list; cur != NULL; cur = cur->next) { + RemoteURI *uri = (RemoteURI *)cur->data; + + if (current_pos >= uri->start && + current_pos < uri->end) { + if (!strncasecmp(uri->uri, "mailto:", 7)) + compose_new_with_recipient + (NULL, uri->uri + 7); + else + open_uri(uri->uri, + prefs_common.uri_cmd); + } + } + } +} + +static void textview_uri_list_remove_all(GSList *uri_list) +{ + GSList *cur; + + for (cur = uri_list; cur != NULL; cur = cur->next) { + if (cur->data) { + g_free(((RemoteURI *)cur->data)->uri); + g_free(cur->data); + } + } + + g_slist_free(uri_list); +} diff --git a/src/textview.h b/src/textview.h new file mode 100644 index 000000000..fd3d101ec --- /dev/null +++ b/src/textview.h @@ -0,0 +1,77 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __TEXTVIEW_H__ +#define __TEXTVIEW_H__ + +#include <glib.h> +#include <gtk/gtkwidget.h> + +typedef struct _TextView TextView; + +#include "messageview.h" +#include "procmime.h" + +struct _TextView +{ + GtkWidget *vbox; + GtkWidget *scrolledwin; + GtkWidget *scrolledwin_sb; + GtkWidget *scrolledwin_mb; + GtkWidget *text; + GtkWidget *text_sb; + GtkWidget *text_mb; + + gboolean text_is_mb; + + GSList *uri_list; + + GdkFont *msgfont; + GdkFont *boldfont; + gint prev_ascent; + gint prev_descent; + + MessageView *messageview; +}; + +TextView *textview_create (void); +void textview_init (TextView *textview); +void textview_show_message (TextView *textview, + MimeInfo *mimeinfo, + const gchar *file); +void textview_show_part (TextView *textview, + MimeInfo *mimeinfo, + FILE *fp); +void textview_show_mime_part (TextView *textview, + MimeInfo *partinfo); +#if USE_GPGME +void textview_show_signature_part(TextView *textview, + MimeInfo *partinfo); +#endif +void textview_clear (TextView *textview); +void textview_destroy (TextView *textview); +void textview_set_font (TextView *textview, + const gchar *codeset); +void textview_scroll_one_line (TextView *textview, + gboolean up); +gboolean textview_scroll_page (TextView *textview, + gboolean up); +void textview_update_message_colors(void); + +#endif /* __TEXTVIEW_H__ */ diff --git a/src/unmime.c b/src/unmime.c new file mode 100644 index 000000000..e9f0c3621 --- /dev/null +++ b/src/unmime.c @@ -0,0 +1,995 @@ +/* + * MIME mail decoding. + * + * This module contains decoding routines for converting + * quoted-printable data into pure 8-bit data, in MIME + * formatted messages. + * + * By Henrik Storner <storner@image.dk> + * + * Configuration file support for fetchmail 4.3.8 by + * Frank Damgaard <frda@post3.tele.dk> + * + * Modified by Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <ctype.h> +#if HAVE_ALLOCA_H +# include <alloca.h> +#endif +#if HAVE_LIBJCONV +# include <jconv.h> +# include "prefs_common.h" +#endif + +#include "unmime.h" +#include "base64.h" +#include "rfc822.h" +#include "utils.h" + +#ifndef TRUE +#define FALSE 0 +#define TRUE 1 +#endif /* TRUE */ + +#define xalloca(ptr, t, n) if (!(ptr = (t) alloca(n))) \ + {fprintf(stderr, "alloca failed"); exit(1);} + +static unsigned char unhex(unsigned char c) +{ + if ((c >= '0') && (c <= '9')) + return (c - '0'); + else if ((c >= 'A') && (c <= 'F')) + return (c - 'A' + 10); + else if ((c >= 'a') && (c <= 'f')) + return (c - 'a' + 10); + else + return c; +} + +static int qp_char(unsigned char c1, unsigned char c2, unsigned char *c_out) +{ + c1 = unhex(c1); + c2 = unhex(c2); + + if ((c1 > 15) || (c2 > 15)) + return 1; + else { + *c_out = 16*c1+c2; + return 0; + } +} + + +/* + * Routines to decode MIME QP-encoded headers, as per RFC 2047. + */ + +/* States of the decoding state machine */ +#define S_COPY_PLAIN 0 /* Just copy, but watch for the QP flag */ +#define S_SKIP_MIMEINIT 1 /* Get the encoding, and skip header */ +#define S_COPY_MIME 2 /* Decode a sequence of coded characters */ + +static const char MIMEHDR_INIT[] = "=?"; /* Start of coded sequence */ +static const char MIMEHDR_END[] = "?="; /* End of coded sequence */ + +#if !HAVE_LIBJCONV +void UnMimeHeader(unsigned char *hdr) +{ + /* Decode a buffer containing data encoded according to RFC + * 2047. This only handles content-transfer-encoding; conversion + * between character sets is not implemented. In other words: We + * assume the charsets used can be displayed by your mail program + * without problems. + */ + + /* Note: Decoding is done "in-situ", i.e. without using an + * additional buffer for temp. storage. This is possible, since the + * decoded string will always be shorter than the encoded string, + * due to the en- coding scheme. + */ + + int state = S_COPY_PLAIN; + unsigned char *p_in, *p_out, *p; + unsigned char enc = '\0'; /* initialization pacifies -Wall */ + int i; + + /* Speed up in case this is not a MIME-encoded header */ + p = strstr(hdr, MIMEHDR_INIT); + if (p == NULL) + return; /* No MIME header */ + + /* Loop through the buffer. + * p_in : Next char to be processed. + * p_out: Where to put the next processed char + * enc : Encoding used (usually, 'q' = quoted-printable) + */ + for (p_out = p_in = hdr; (*p_in); ) { + switch (state) { + case S_COPY_PLAIN: + p = strstr(p_in, MIMEHDR_INIT); + if (p == NULL) { + /* + * No more coded data in buffer, + * just move remainder into place. + */ + i = strlen(p_in); /* How much left */ + memmove(p_out, p_in, i); + p_in += i; p_out += i; + } + else { + /* MIME header init found at location p */ + if (p > p_in) { + /* There are some uncoded chars at the beginning. */ + i = (p - p_in); + memmove(p_out, p_in, i); + p_out += i; + } + p_in = (p + 2); + state = S_SKIP_MIMEINIT; + } + break; + + case S_SKIP_MIMEINIT: + /* Mime type definition: "charset?encoding?" */ + p = strchr(p_in, '?'); + if (p != NULL) { + /* p_in .. (p-1) holds the charset */ + + /* *(p+1) is the transfer encoding, *(p+2) must be a '?' */ + if (*(p+2) == '?') { + enc = tolower(*(p+1)); + p_in = p+3; + state = S_COPY_MIME; + } + else + state = S_COPY_PLAIN; + } + else + state = S_COPY_PLAIN; /* Invalid data */ + break; + + case S_COPY_MIME: + p = strstr(p_in, MIMEHDR_END); /* Find end of coded data */ + if (p == NULL) p = p_in + strlen(p_in); + for (; (p_in < p); ) { + /* Decode all encoded data */ + if (enc == 'q') { + if (*p_in == '=') { + /* Decode one char qp-coded at (p_in+1) and (p_in+2) */ + if (qp_char(*(p_in+1), *(p_in+2), p_out) == 0) + p_in += 3; + else { + /* Invalid QP data - pass through unchanged. */ + *p_out = *p_in; + p_in++; + } + } + else if (*p_in == '_') { + /* + * RFC 2047: '_' inside encoded word represents 0x20. + * NOT a space - always the value 0x20. + */ + *p_out = 0x20; + p_in++; + } + else { + /* Copy unchanged */ + *p_out = *p_in; + p_in++; + } + p_out++; + } + else if (enc == 'b') { + /* Decode base64 encoded data */ + char delimsave; + int decoded_count; + + delimsave = *p; *p = '\r'; + decoded_count = from64tobits(p_out, p_in); + *p = delimsave; + if (decoded_count > 0) + p_out += decoded_count; + p_in = p; + } + else { + /* Copy unchanged */ + *p_out = *p_in; + p_in++; + p_out++; + } + } + if (*p_in) + p_in += 2; /* Skip the MIMEHDR_END delimiter */ + + /* + * We've completed decoding one encoded sequence. But another + * may follow immediately, in which case whitespace before the + * new MIMEHDR_INIT delimiter must be discarded. + * See if that is the case + */ + p = strstr(p_in, MIMEHDR_INIT); + state = S_COPY_PLAIN; + if (p != NULL) { + /* + * There is more MIME data later on. Is there + * whitespace only before the delimiter? + */ + unsigned char *q; + int wsp_only = 1; + + for (q=p_in; (wsp_only && (q < p)); q++) + wsp_only = isspace(*q); + + if (wsp_only) { + /* + * Whitespace-only before the MIME delimiter. OK, + * just advance p_in to past the new MIMEHDR_INIT, + * and prepare to process the new MIME charset/encoding + * header. + */ + p_in = p + strlen(MIMEHDR_INIT); + state = S_SKIP_MIMEINIT; + } + } + break; + } + } + + *p_out = '\0'; +} +#else /* HAVE_LIBJCONV */ +void UnMimeHeaderConv(unsigned char *hdr, unsigned char *conv_r, int conv_len) +{ + int state = S_COPY_PLAIN; + unsigned char *p_in, *p_out, *p; + unsigned char enc = '\0'; /* initialization pacifies -Wall */ + int i; + unsigned char *p_mimestart = NULL; + iconv_t cd = (iconv_t)-1; + + if (conv_r && conv_len < 0) { + conv_len = 0; + conv_r = NULL; + } + else + conv_len--; /* reserve for terminating NULL character */ + + /* Speed up in case this is not a MIME-encoded header */ + p = strstr(hdr, MIMEHDR_INIT); + if (p == NULL) { + /* No MIME header */ + const char *const *codesets; + int n_codesets, actual_codeset, r; + char *newstr; + size_t newlen = 0; + + if (prefs_common.force_charset) { + codesets = (const char **)&prefs_common.force_charset; + n_codesets = 1; + } + else + codesets = jconv_info_get_pref_codesets(&n_codesets); + + r = jconv_alloc_conv(hdr, strlen(hdr), &newstr, &newlen, + codesets, n_codesets, &actual_codeset, + jconv_info_get_current_codeset()); + if (r == 0) { + if (newlen > conv_len) newlen = conv_len; + strncpy(conv_r, newstr, newlen); + conv_r[newlen] = '\0'; + free(newstr); + } + else { + strncpy(conv_r, hdr, conv_len); + conv_r[conv_len] = '\0'; + } + + return; + } + + /* Loop through the buffer. + * p_in : Next char to be processed. + * p_out: Where to put the next processed char + * enc : Encoding used (usually, 'q' = quoted-printable) + */ + for (p_out = p_in = hdr; (*p_in); ) { + switch (state) { + case S_COPY_PLAIN: + p = strstr(p_in, MIMEHDR_INIT); + if (p == NULL) { + /* + * No more coded data in buffer, + * just move remainder into place. + */ + i = strlen(p_in); /* How much left */ + if (conv_r) { + int len; + + len = conv_len > i ? i : conv_len; + memcpy(conv_r, p_in, len); + conv_r += len; + conv_len -= len; + } + memmove(p_out, p_in, i); + p_in += i; p_out += i; + } + else { + /* MIME header init found at location p */ + if (p > p_in) { + /* There are some uncoded chars at the beginning. */ + i = (p - p_in); + if (conv_r) { + int len; + + len = conv_len > i ? i : conv_len; + memcpy(conv_r, p_in, len); + conv_r += len; + conv_len -= len; + } + memmove(p_out, p_in, i); + p_out += i; + } + p_in = (p + 2); + state = S_SKIP_MIMEINIT; + } + break; + + case S_SKIP_MIMEINIT: + /* Mime type definition: "charset?encoding?" */ + p = strchr(p_in, '?'); + if (p != NULL) { + /* p_in .. (p-1) holds the charset */ + char *charset; + + charset = malloc(p - p_in + 1); + memcpy(charset, p_in, p - p_in); + charset[p - p_in] = '\0'; + if (cd != (iconv_t)-1) iconv_close(cd); + cd = iconv_open(jconv_info_get_current_codeset(), charset); + free(charset); + + /* *(p+1) is the transfer encoding, *(p+2) must be a '?' */ + if (*(p+2) == '?') { + enc = tolower(*(p+1)); + p_in = p+3; + state = S_COPY_MIME; + } + else + state = S_COPY_PLAIN; + } + else + state = S_COPY_PLAIN; /* Invalid data */ + break; + + case S_COPY_MIME: + p_mimestart = p_out; + p = strstr(p_in, MIMEHDR_END); /* Find end of coded data */ + if (p == NULL) p = p_in + strlen(p_in); + for (; (p_in < p); ) { + /* Decode all encoded data */ + if (enc == 'q') { + if (*p_in == '=') { + /* Decode one char qp-coded at (p_in+1) and (p_in+2) */ + if (qp_char(*(p_in+1), *(p_in+2), p_out) == 0) + p_in += 3; + else { + /* Invalid QP data - pass through unchanged. */ + *p_out = *p_in; + p_in++; + } + } + else if (*p_in == '_') { + /* + * RFC 2047: '_' inside encoded word represents 0x20. + * NOT a space - always the value 0x20. + */ + *p_out = 0x20; + p_in++; + } + else { + /* Copy unchanged */ + *p_out = *p_in; + p_in++; + } + p_out++; + } + else if (enc == 'b') { + /* Decode base64 encoded data */ + char delimsave; + int decoded_count; + + delimsave = *p; *p = '\r'; + decoded_count = from64tobits(p_out, p_in); + *p = delimsave; + if (decoded_count > 0) + p_out += decoded_count; + p_in = p; + } + else { + /* Copy unchanged */ + *p_out = *p_in; + p_in++; + p_out++; + } + } + if (conv_r && cd != (iconv_t)-1) { + size_t inleft; + + inleft = p_out - p_mimestart; + iconv(cd, (char **)&p_mimestart, &inleft, (char **)&conv_r, &conv_len); + } + if (*p_in) + p_in += 2; /* Skip the MIMEHDR_END delimiter */ + + /* + * We've completed decoding one encoded sequence. But another + * may follow immediately, in which case whitespace before the + * new MIMEHDR_INIT delimiter must be discarded. + * See if that is the case + */ + p = strstr(p_in, MIMEHDR_INIT); + state = S_COPY_PLAIN; + if (p != NULL) { + /* + * There is more MIME data later on. Is there + * whitespace only before the delimiter? + */ + unsigned char *q; + int wsp_only = 1; + + for (q=p_in; (wsp_only && (q < p)); q++) + wsp_only = isspace(*q); + + if (wsp_only) { + /* + * Whitespace-only before the MIME delimiter. OK, + * just advance p_in to past the new MIMEHDR_INIT, + * and prepare to process the new MIME charset/encoding + * header. + */ + p_in = p + strlen(MIMEHDR_INIT); + state = S_SKIP_MIMEINIT; + } + } + break; + } + } + + *p_out = '\0'; + if (conv_r) + *conv_r = '\0'; + if (cd != (iconv_t)-1) iconv_close(cd); +} + +#endif /* !HAVE_LIBJCONV */ + + +/* + * Routines for decoding body-parts of a message. + * + * Since the "fetch" part of fetchmail gets a message body + * one line at a time, we need to maintain some state variables + * across multiple invokations of the UnMimeBodyline() routine. + * The driver routine should call MimeBodyType() when all + * headers have been received, and then UnMimeBodyline() for + * every line in the message body. + * + */ +#define S_BODY_DATA 0 +#define S_BODY_HDR 1 + +/* + * Flag indicating if we are currently processing + * the headers or the body of a (multipart) message. + */ +static int BodyState = S_BODY_DATA; + +/* + * Flag indicating if we are in the process of decoding + * a quoted-printable body part. + */ +static int CurrEncodingIsQP = 0; +static int CurrTypeNeedsDecode = 0; + +/* + * Delimiter for multipart messages. RFC 2046 states that this must + * NEVER be longer than 70 characters. Add 3 for the two hyphens + * at the beginning, and a terminating null. + */ +#define MAX_DELIM_LEN 70 +static unsigned char MultipartDelimiter[MAX_DELIM_LEN+3]; + + +/* This string replaces the "Content-Transfer-Encoding: quoted-printable" + * string in all headers, including those in body-parts. The replacement + * must be no longer than the original string. + */ +static const char ENC8BIT[] = "Content-Transfer-Encoding: 8bit"; +static void SetEncoding8bit(unsigned char *XferEncOfs) +{ + unsigned char *p; + + if (XferEncOfs != NULL) { + memcpy(XferEncOfs, ENC8BIT, strlen(ENC8BIT)); + + /* If anything left, in this header, replace with whitespace */ + for (p=XferEncOfs+strlen(ENC8BIT); (*p >= ' '); p++) *p=' '; + } +} + +static char *GetBoundary(char *CntType) +{ + char *p1, *p2; + int flag; + + /* Find the "boundary" delimiter. It must be preceded with a ';' + * and optionally some whitespace. + */ + p1 = CntType; + do { + p2 = strchr(p1, ';'); + if (p2) + for (p2++; isspace(*p2); p2++); + + p1 = p2; + } while ((p1) && (strncasecmp(p1, "boundary", 8) != 0)); + + if (p1 == NULL) + /* No boundary delimiter */ + return NULL; + + /* Skip "boundary", whitespace and '='; check that we do have a '=' */ + for (p1+=8, flag=0; (isspace(*p1) || (*p1 == '=')); p1++) + flag |= (*p1 == '='); + if (!flag) + return NULL; + + /* Find end of boundary delimiter string */ + if (*p1 == '\"') { + /* The delimiter is inside quotes */ + p1++; + p2 = strchr(p1, '\"'); + if (p2 == NULL) + return NULL; /* No closing '"' !?! */ + } + else { + /* There might be more text after the "boundary" string. */ + p2 = strchr(p1, ';'); /* Safe - delimiter with ';' must be in quotes */ + } + + /* Zero-terminate the boundary string */ + if (p2 != NULL) + *p2 = '\0'; + + return (p1 && strlen(p1)) ? p1 : NULL; +} + + +int CheckContentType(char *CntType) +{ + /* + * Static array of Content-Type's for which we will do + * quoted-printable decoding, if requested. + * It is probably wise to do this only on known text-only types; + * be really careful if you change this. + */ + + static char *DecodedTypes[] = { + "text/", /* Will match ALL content-type's starting with 'text/' */ + "message/rfc822", + NULL + }; + + char *p = CntType; + int i; + + /* If no Content-Type header, it isn't MIME - don't touch it */ + if (CntType == NULL) return 0; + + /* Skip whitespace, if any */ + for (; isspace(*p); p++) ; + + for (i=0; + (DecodedTypes[i] && + (strncasecmp(p, DecodedTypes[i], strlen(DecodedTypes[i])))); + i++) ; + + return (DecodedTypes[i] != NULL); +} + + +/* + * This routine does three things: + * 1) It determines - based on the message headers - whether the + * message body is a MIME message that may hold 8 bit data. + * - A message that has a "quoted-printable" or "8bit" transfer + * encoding is assumed to contain 8-bit data (when decoded). + * - A multipart message is assumed to contain 8-bit data + * when decoded (there might be quoted-printable body-parts). + * - All other messages are assumed NOT to include 8-bit data. + * 2) It determines the delimiter-string used in multi-part message + * bodies. + * 3) It sets the initial values of the CurrEncodingIsQP, + * CurrTypeNeedsDecode, and BodyState variables, from the header + * contents. + * + * The return value is a bitmask. + */ +int MimeBodyType(unsigned char *hdrs, int WantDecode) +{ + unsigned char *NxtHdr = hdrs; + unsigned char *XferEnc, *XferEncOfs, *CntType, *MimeVer, *p; + int HdrsFound = 0; /* We only look for three headers */ + int BodyType; /* Return value */ + + /* Setup for a standard (no MIME, no QP, 7-bit US-ASCII) message */ + MultipartDelimiter[0] = '\0'; + CurrEncodingIsQP = CurrTypeNeedsDecode = 0; + BodyState = S_BODY_DATA; + BodyType = 0; + + /* Just in case ... */ + if (hdrs == NULL) + return BodyType; + + XferEnc = XferEncOfs = CntType = MimeVer = NULL; + + do { + if (strncasecmp("Content-Transfer-Encoding:", NxtHdr, 26) == 0) { + XferEncOfs = NxtHdr; + p = nxtaddr(NxtHdr); + if (p != NULL) { + xalloca(XferEnc, char *, strlen(p) + 1); + strcpy(XferEnc, p); + HdrsFound++; + } + } + else if (strncasecmp("Content-Type:", NxtHdr, 13) == 0) { + /* + * This one is difficult. We cannot use the standard + * nxtaddr() routine, since the boundary-delimiter is + * (probably) enclosed in quotes - and thus appears + * as an rfc822 comment, and nxtaddr() "eats" up any + * spaces in the delimiter. So, we have to do this + * by hand. + */ + + /* Skip the "Content-Type:" part and whitespace after it */ + for (NxtHdr += 13; ((*NxtHdr == ' ') || (*NxtHdr == '\t')); NxtHdr++); + + /* + * Get the full value of the Content-Type header; + * it might span multiple lines. So search for + * a newline char, but ignore those that have a + * have a TAB or space just after the NL (continued + * lines). + */ + p = NxtHdr-1; + do { + p=strchr((p+1),'\n'); + } while ( (p != NULL) && ((*(p+1) == '\t') || (*(p+1) == ' ')) ); + if (p == NULL) p = NxtHdr + strlen(NxtHdr); + + xalloca(CntType, char *, p-NxtHdr+2); + strncpy(CntType, NxtHdr, (p-NxtHdr)); + *(CntType+(p-NxtHdr)) = '\0'; + HdrsFound++; + } + else if (strncasecmp("MIME-Version:", NxtHdr, 13) == 0) { + p = nxtaddr(NxtHdr); + if (p != NULL) { + xalloca(MimeVer, char *, strlen(p) + 1); + strcpy(MimeVer, p); + HdrsFound++; + } + } + + NxtHdr = (strchr(NxtHdr, '\n')); + if (NxtHdr != NULL) NxtHdr++; + } while ((NxtHdr != NULL) && (*NxtHdr) && (HdrsFound != 3)); + + + /* Done looking through the headers, now check what they say */ + if ((MimeVer != NULL) && (strcmp(MimeVer, "1.0") == 0)) { + + CurrTypeNeedsDecode = CheckContentType(CntType); + + /* Check Content-Type to see if this is a multipart message */ + if ( (CntType != NULL) && + ((strncasecmp(CntType, "multipart/mixed", 16) == 0) || + (strncasecmp(CntType, "message/", 8) == 0)) ) { + + char *p1 = GetBoundary(CntType); + + if (p1 != NULL) { + /* The actual delimiter is "--" followed by + the boundary string */ + strcpy(MultipartDelimiter, "--"); + strncat(MultipartDelimiter, p1, MAX_DELIM_LEN); + BodyType = (MSG_IS_8BIT | MSG_NEEDS_DECODE); + } + } + + /* + * Check Content-Transfer-Encoding, but + * ONLY for non-multipart messages (BodyType == 0). + */ + if ((XferEnc != NULL) && (BodyType == 0)) { + if (strcasecmp(XferEnc, "quoted-printable") == 0) { + CurrEncodingIsQP = 1; + BodyType = (MSG_IS_8BIT | MSG_NEEDS_DECODE); + if (WantDecode && CurrTypeNeedsDecode) { + SetEncoding8bit(XferEncOfs); + } + } + else if (strcasecmp(XferEnc, "7bit") == 0) { + CurrEncodingIsQP = 0; + BodyType = (MSG_IS_7BIT); + } + else if (strcasecmp(XferEnc, "8bit") == 0) { + CurrEncodingIsQP = 0; + BodyType = (MSG_IS_8BIT); + } + } + + } + + return BodyType; +} + + +/* + * Decode one line of data containing QP data. + * Return flag set if this line ends with a soft line-break. + * 'bufp' is modified to point to the end of the output buffer. + */ +int DoOneQPLine(unsigned char **bufp, flag delimited, flag issoftline) +{ + unsigned char *buf = *bufp; + unsigned char *p_in, *p_out, *p; + int n; + int ret = 0; + + /* + * Special case: line consists of a single =2E and messages are + * dot-terminated. Line has to be dot-stuffed after decoding. + */ + if (delimited && !issoftline && buf[0]=='=' && !strncmp(*bufp, "=2E\n", 4)) + { + strcpy(buf, "..\n"); + *bufp += 4; + return(FALSE); + } + + p_in = buf; + if (delimited && issoftline && (strncmp(buf, "..", 2) == 0)) + p_in++; + + for (p_out = buf; (*p_in); ) { + p = strchr(p_in, '='); + if (p == NULL) { + /* No more QP data, just move remainder into place */ + n = strlen(p_in); + memmove(p_out, p_in, n); + p_in += n; p_out += n; + } + else { + if (p > p_in) { + /* There are some uncoded chars at the beginning. */ + n = (p - p_in); + memmove(p_out, p_in, n); + p_out += n; + } + + switch (*(p+1)) { + case '\0': case '\r': case '\n': + /* Soft line break, skip '=' */ + p_in = p+1; + if (*p_in == '\r') p_in++; + if (*p_in == '\n') p_in++; + ret = 1; + break; + + default: + /* There is a QP encoded byte */ + if (qp_char(*(p+1), *(p+2), p_out) == 0) { + p_in = p+3; + } + else { + /* Invalid QP data - pass through unchanged. */ + *p_out = '='; + p_in = p+1; + } + p_out++; + break; + } + } + } + + *p_out = '\0'; + *bufp = p_out; + return ret; +} + + +/* This is called once per line in the message body. We need to scan + * all lines in the message body for the multipart delimiter string, + * and handle any body-part headers in such messages (these can toggle + * qp-decoding on and off). + * + * Note: Messages that are NOT multipart-messages go through this + * routine quickly, since BodyState will always be S_BODY_DATA, + * and MultipartDelimiter is NULL. + * + * Return flag set if this line ends with a soft line-break. + * 'bufp' is modified to point to the end of the output buffer. + */ + +#if 0 +int UnMimeBodyline(unsigned char **bufp, flag delimited, flag softline) +{ + unsigned char *buf = *bufp; + int ret = 0; + + switch (BodyState) { + case S_BODY_HDR: + UnMimeHeader(buf); /* Headers in body-parts can be encoded, too! */ + if ((*buf == '\0') || (*buf == '\n') || (strcmp(buf, "\r\n") == 0)) { + BodyState = S_BODY_DATA; + } + else if (strncasecmp("Content-Transfer-Encoding:", buf, 26) == 0) { + char *XferEnc; + + XferEnc = nxtaddr(buf); + if ((XferEnc != NULL) && (strcasecmp(XferEnc, "quoted-printable") == 0)) { + CurrEncodingIsQP = 1; + + /* + * Hmm ... we cannot be really sure that CurrTypeNeedsDecode + * has been set - we may not have seen the Content-Type header + * yet. But *usually* the Content-Type header comes first, so + * this will work. And there is really no way of doing it + * "right" as long as we stick with the line-by-line processing. + */ + if (CurrTypeNeedsDecode) + SetEncoding8bit(buf); + } + } + else if (strncasecmp("Content-Type:", buf, 13) == 0) { + CurrTypeNeedsDecode = CheckContentType(nxtaddr(buf)); + } + + *bufp = (buf + strlen(buf)); + break; + + case S_BODY_DATA: + if ((*MultipartDelimiter) && + (strncmp(buf, MultipartDelimiter, strlen(MultipartDelimiter)) == 0)) { + BodyState = S_BODY_HDR; + CurrEncodingIsQP = CurrTypeNeedsDecode = 0; + } + + if (CurrEncodingIsQP && CurrTypeNeedsDecode) + ret = DoOneQPLine(bufp, delimited, softline); + else + *bufp = (buf + strlen(buf)); + break; + } + + return ret; +} +#endif /* 0 */ + + +#ifdef STANDALONE +#include <stdio.h> +#include <unistd.h> + +char *program_name = "unmime"; +int outlevel = 0; + +#define BUFSIZE_INCREMENT 4096 + +#ifdef DEBUG +#define DBG_FWRITE(B,L,BS,FD) fwrite(B, L, BS, FD) +#else +#define DBG_FWRITE(B,L,BS,FD) +#endif + +int main(int argc, char *argv[]) +{ + unsigned int BufSize; + unsigned char *buffer, *buf_p; + int nl_count, i, bodytype; + +#ifdef DEBUG + pid_t pid; + FILE *fd_orig, *fd_conv; + char fnam[100]; + + pid = getpid(); + sprintf(fnam, "/tmp/i_unmime.%x", pid); + fd_orig = fopen(fnam, "w"); + sprintf(fnam, "/tmp/o_unmime.%x", pid); + fd_conv = fopen(fnam, "w"); +#endif + + BufSize = BUFSIZE_INCREMENT; /* Initial size of buffer */ + buf_p = buffer = (unsigned char *) xmalloc(BufSize); + nl_count = 0; + + do { + i = fread(buf_p, 1, 1, stdin); + switch (*buf_p) { + case '\n': + nl_count++; + break; + + case '\r': + break; + + default: + nl_count = 0; + break; + } + + buf_p++; + if ((buf_p - buffer) == BufSize) { + /* Buffer is full! Get more room. */ + buffer = xrealloc(buffer, BufSize+BUFSIZE_INCREMENT); + buf_p = buffer + BufSize; + BufSize += BUFSIZE_INCREMENT; + } + } while ((i > 0) && (nl_count < 2)); + + *buf_p = '\0'; + DBG_FWRITE(buffer, strlen(buffer), 1, fd_orig); + + UnMimeHeader(buffer); + bodytype = MimeBodyType(buffer, 1); + + i = strlen(buffer); + fwrite(buffer, i, 1, stdout); + DBG_FWRITE(buffer, i, 1, fd_conv); + + do { + buf_p = (buffer - 1); + do { + buf_p++; + i = fread(buf_p, 1, 1, stdin); + } while ((i == 1) && (*buf_p != '\n')); + if (i == 1) buf_p++; + *buf_p = '\0'; + DBG_FWRITE(buf, (buf_p - buffer), 1, fd_orig); + + if (buf_p > buffer) { + if (bodytype & MSG_NEEDS_DECODE) { + buf_p = buffer; + UnMimeBodyline(&buf_p, 0); + } + fwrite(buffer, (buf_p - buffer), 1, stdout); + DBG_FWRITE(buffer, (buf_p - buffer), 1, fd_conv); + } + } while (buf_p > buffer); + + free(buffer); + fflush(stdout); + +#ifdef DEBUG + fclose(fd_orig); + fclose(fd_conv); +#endif + + return 0; +} +#endif + diff --git a/src/unmime.h b/src/unmime.h new file mode 100644 index 000000000..ccd163785 --- /dev/null +++ b/src/unmime.h @@ -0,0 +1,23 @@ +/* unmime.c */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +typedef char flag; +/* Bit-mask returned by MimeBodyType */ +#define MSG_IS_7BIT 0x01 +#define MSG_IS_8BIT 0x02 +#define MSG_NEEDS_DECODE 0x80 + +#if !HAVE_LIBJCONV +extern void UnMimeHeader(unsigned char *buf); +#else +extern void UnMimeHeaderConv(unsigned char *buf, unsigned char *conv_r, + int conv_len); +#endif +extern int MimeBodyType(unsigned char *hdrs, int WantDecode); +extern int DoOneQPLine(unsigned char **bufp, flag delimited, flag issoftline); +#if 0 +extern int UnMimeBodyline(unsigned char **buf, flag delimited, flag issoftline); +#endif diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 000000000..6c01c73e6 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,1833 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999-2001 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 + * 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. + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include "defs.h" + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <ctype.h> +#include <errno.h> + +#if (HAVE_WCTYPE_H && HAVE_WCHAR_H) +# include <wchar.h> +# include <wctype.h> +#endif +#include <stdlib.h> +#include <sys/stat.h> +#include <unistd.h> +#include <stdarg.h> +#include <sys/types.h> +#include <sys/wait.h> +#include <dirent.h> +#include <time.h> + +#include "intl.h" +#include "utils.h" +#include "statusbar.h" +#include "logwindow.h" + +#define BUFFSIZE 8192 + +extern gboolean debug_mode; + +static void hash_free_strings_func(gpointer key, gpointer value, gpointer data); + +void list_free_strings(GList *list) +{ + list = g_list_first(list); + + while (list != NULL) { + g_free(list->data); + list = list->next; + } +} + +void slist_free_strings(GSList *list) +{ + while (list != NULL) { + g_free(list->data); + list = list->next; + } +} + +static void hash_free_strings_func(gpointer key, gpointer value, gpointer data) +{ + g_free(key); +} + +void hash_free_strings(GHashTable *table) +{ + g_hash_table_foreach(table, hash_free_strings_func, NULL); +} + +void ptr_array_free_strings(GPtrArray *array) +{ + gint i; + gchar *str; + + g_return_if_fail(array != NULL); + + for (i = 0; i < array->len; i++) { + str = g_ptr_array_index(array, i); + g_free(str); + } +} + +gint to_number(const gchar *nstr) +{ + register const gchar *p; + + if (*nstr == '\0') return -1; + + for (p = nstr; *p != '\0'; p++) + if (!isdigit(*p)) return -1; + + return atoi(nstr); +} + +/* convert integer into string */ +gchar *itos(gint n) +{ + static gchar nstr[11]; + + g_snprintf(nstr, 11, "%d", n); + return nstr; +} + +gchar *to_human_readable(off_t size) +{ + static gchar str[9]; + gint count; + guint32 div = 1; + + for (count = 0; count < 3; count++) { + if (size / div < 1024) + break; + else + div *= 1024; + } + + switch (count) { + case 0: g_snprintf(str, sizeof(str), "%dB", (gint)size); break; + case 1: g_snprintf(str, sizeof(str), "%.1fKB", (gfloat)size / div); + break; + case 2: g_snprintf(str, sizeof(str), "%.1fMB", (gfloat)size / div); + break; + default: + g_snprintf(str, sizeof(str), "%.1fGB", (gfloat)size / div); + break; + } + + return str; +} + +/* strcmp with NULL-checking */ +gint strcmp2(const gchar *s1, const gchar *s2) +{ + if (s1 == NULL || s2 == NULL) + return -1; + else + return strcmp(s1, s2); +} + +/* compare paths */ +gint path_cmp(const gchar *s1, const gchar *s2) +{ + gint len1, len2; + + if (s1 == NULL || s2 == NULL) return -1; + if (*s1 == '\0' || *s2 == '\0') return -1; + + len1 = strlen(s1); + len2 = strlen(s2); + + if (s1[len1 - 1] == G_DIR_SEPARATOR) len1--; + if (s2[len2 - 1] == G_DIR_SEPARATOR) len2--; + + return strncmp(s1, s2, MAX(len1, len2)); +} + +/* remove trailing return code */ +gchar *strretchomp(gchar *str) +{ + register gchar *s; + + if (!*str) return str; + + for (s = str + strlen(str) - 1; + s >= str && (*s == '\n' || *s == '\r'); + s--) + *s = '\0'; + + return str; +} + +/* Similar to `strstr' but this function ignores the case of both strings. */ +gchar *strcasestr(const gchar *haystack, const gchar *needle) +{ + register size_t haystack_len, needle_len; + + haystack_len = strlen(haystack); + needle_len = strlen(needle); + + if (haystack_len < needle_len || needle_len == 0) + return NULL; + + while (haystack_len >= needle_len) { + if (!strncasecmp(haystack, needle, needle_len)) + return (gchar *)haystack; + else { + haystack++; + haystack_len--; + } + } + + return NULL; +} + +/* Copy no more than N characters of SRC to DEST, with NULL terminating. */ +gchar *strncpy2(gchar *dest, const gchar *src, size_t n) +{ + register gchar c; + gchar *s = dest; + + do { + if (--n == 0) { + *dest = '\0'; + return s; + } + c = *src++; + *dest++ = c; + } while (c != '\0'); + + /* don't do zero fill */ + return s; +} + +#if !HAVE_ISWALNUM +int iswalnum(wint_t wc) +{ + return isalnum((int)wc); +} +#endif + +#if !HAVE_ISWSPACE +int iswspace(wint_t wc) +{ + return isspace((int)wc); +} +#endif + +#if !HAVE_TOWLOWER +wint_t towlower(wint_t wc) +{ + if (wc >= L'A' && wc <= L'Z') + return wc + L'a' - L'A'; + + return wc; +} +#endif + +#if !HAVE_WCSLEN +size_t wcslen(const wchar_t *s) +{ + size_t len = 0; + + while (*s != L'\0') + ++len, ++s; + + return len; +} +#endif + +#if !HAVE_WCSCPY +/* Copy SRC to DEST. */ +wchar_t *wcscpy(wchar_t *dest, const wchar_t *src) +{ + wint_t c; + wchar_t *s = dest; + + do { + c = *src++; + *dest++ = c; + } while (c != L'\0'); + + return s; +} +#endif + +#if !HAVE_WCSNCPY +/* Copy no more than N wide-characters of SRC to DEST. */ +wchar_t *wcsncpy (wchar_t *dest, const wchar_t *src, size_t n) +{ + wint_t c; + wchar_t *s = dest; + + do { + c = *src++; + *dest++ = c; + if (--n == 0) + return s; + } while (c != L'\0'); + + /* zero fill */ + do + *dest++ = L'\0'; + while (--n > 0); + + return s; +} +#endif + +/* Duplicate S, returning an identical malloc'd string. */ +wchar_t *wcsdup(const wchar_t *s) +{ + wchar_t *new_str; + + if (s) { + new_str = g_new(wchar_t, wcslen(s) + 1); + wcscpy(new_str, s); + } else + new_str = NULL; + + return new_str; +} + +/* Duplicate no more than N wide-characters of S, + returning an identical malloc'd string. */ +wchar_t *wcsndup(const wchar_t *s, size_t n) +{ + wchar_t *new_str; + + if (s) { + new_str = g_new(wchar_t, n + 1); + wcsncpy(new_str, s, n); + new_str[n] = (wchar_t)0; + } else + new_str = NULL; + + return new_str; +} + +wchar_t *strdup_mbstowcs(const gchar *s) +{ + wchar_t *new_str; + + if (s) { + new_str = g_new(wchar_t, strlen(s) + 1); + if (mbstowcs(new_str, s, strlen(s) + 1) < 0) { + g_free(new_str); + new_str = NULL; + } else + new_str = g_realloc(new_str, + sizeof(wchar_t) * (wcslen(new_str) + 1)); + } else + new_str = NULL; + + return new_str; +} + +gchar *strdup_wcstombs(const wchar_t *s) +{ + gchar *new_str; + size_t len; + + if (s) { + len = wcslen(s) * MB_CUR_MAX + 1; + new_str = g_new(gchar, len); + if (wcstombs(new_str, s, len) < 0) { + g_free(new_str); + new_str = NULL; + } else + new_str = g_realloc(new_str, strlen(new_str) + 1); + } else + new_str = NULL; + + return new_str; +} + +/* Compare S1 and S2, ignoring case. */ +gint wcsncasecmp(const wchar_t *s1, const wchar_t *s2, size_t n) +{ + wint_t c1; + wint_t c2; + + while (n--) { + c1 = towlower(*s1++); + c2 = towlower(*s2++); + if (c1 != c2) + return c1 - c2; + else if (c1 == 0 && c2 == 0) + break; + } + + return 0; +} + +/* Find the first occurrence of NEEDLE in HAYSTACK, ignoring case. */ +wchar_t *wcscasestr(const wchar_t *haystack, const wchar_t *needle) +{ + register size_t haystack_len, needle_len; + + haystack_len = wcslen(haystack); + needle_len = wcslen(needle); + + if (haystack_len < needle_len || needle_len == 0) + return NULL; + + while (haystack_len >= needle_len) { + if (!wcsncasecmp(haystack, needle, needle_len)) + return (wchar_t *)haystack; + else { + haystack++; + haystack_len--; + } + } + + return NULL; +} + +/* Examine if next block is non-ASCII string */ +gboolean is_next_nonascii(const wchar_t *s) +{ + const wchar_t *wp; + + /* skip head space */ + for (wp = s; *wp != (wchar_t)0 && iswspace(*wp); wp++) + ; + for (; *wp != (wchar_t)0 && !iswspace(*wp); wp++) { + if (*wp > 127) + return TRUE; + } + + return FALSE; +} + +/* Examine if next block is multi-byte string */ +gboolean is_next_mbs(const wchar_t *s) +{ + gint mbl; + const wchar_t *wp; + gchar tmp[MB_CUR_MAX]; + + /* skip head space */ + for (wp = s; *wp != (wchar_t)0 && iswspace(*wp); wp++) + ; + for (; *wp != (wchar_t)0 && !iswspace(*wp); wp++) { + mbl = wctomb(tmp, *wp); + if (mbl > 1) + return TRUE; + } + + return FALSE; +} + +wchar_t *find_wspace(const wchar_t *s) +{ + const wchar_t *wp; + + for (wp = s; *wp != (wchar_t)0 && iswspace(*wp); wp++) + ; + for (; *wp != (wchar_t)0; wp++) { + if (iswspace(*wp)) + return (wchar_t *)wp; + } + + return NULL; +} + +/* compare subjects */ +gint subject_compare(const gchar *s1, const gchar *s2) +{ + gint retval; + gchar *str1, *str2; + + if (!s1 || !s2) return -1; + if (!*s1 || !*s2) return -1; + + Xalloca(str1, strlen(s1) + 1, return -1); + Xalloca(str2, strlen(s2) + 1, return -1); + strcpy(str1, s1); + strcpy(str2, s2); + + trim_subject(str1); + trim_subject(str2); + + if (!*str1 || !*str2) return -1; + + retval = strcmp(str1, str2); + //if (retval == 0) + // g_print("\ns1 = %s\ns2 = %s\n" + // "str1 = %s\nstr2 = %s\nmatched.\n", + // s1, s2, str1, str2); + + return retval; +} + +void trim_subject(gchar *str) +{ + gchar *srcp; + + eliminate_parenthesis(str, '[', ']'); + eliminate_parenthesis(str, '(', ')'); + g_strstrip(str); + + while (!strncasecmp(str, "Re:", 3)) { + srcp = str + 3; + while (isspace(*srcp)) srcp++; + memmove(str, srcp, strlen(srcp) + 1); + } +} + +void eliminate_parenthesis(gchar *str, gchar op, gchar cl) +{ + register gchar *srcp, *destp; + gint in_brace; + + srcp = destp = str; + + while ((destp = strchr(destp, op))) { + in_brace = 1; + srcp = destp + 1; + while (*srcp) { + if (*srcp == op) + in_brace++; + else if (*srcp == cl) + in_brace--; + srcp++; + if (in_brace == 0) + break; + } + while (isspace(*srcp)) srcp++; + memmove(destp, srcp, strlen(srcp) + 1); + } +} + +void extract_parenthesis(gchar *str, gchar op, gchar cl) +{ + register gchar *srcp, *destp; + gint in_brace; + + srcp = destp = str; + + while ((srcp = strchr(destp, op))) { + if (destp > str) + *destp++ = ' '; + memmove(destp, srcp + 1, strlen(srcp)); + in_brace = 1; + while(*destp) { + if (*destp == op) + in_brace++; + else if (*destp == cl) + in_brace--; + + if (in_brace == 0) + break; + + destp++; + } + } + *destp = '\0'; +} + +void extract_parenthesis_with_skip_quote(gchar *str, gchar quote_chr, + gchar op, gchar cl) +{ + register gchar *srcp, *destp; + gint in_brace; + gboolean in_quote = FALSE; + + srcp = destp = str; + + while ((srcp = strchr_with_skip_quote(destp, '"', op))) { + if (destp > str) + *destp++ = ' '; + memmove(destp, srcp + 1, strlen(srcp)); + in_brace = 1; + while(*destp) { + if (*destp == op && !in_quote) + in_brace++; + else if (*destp == cl && !in_quote) + in_brace--; + else if (*destp == quote_chr) + in_quote ^= TRUE; + + if (in_brace == 0) + break; + + destp++; + } + } + *destp = '\0'; +} + +void eliminate_quote(gchar *str, gchar quote_chr) +{ + register gchar *srcp, *destp; + + srcp = destp = str; + + while ((destp = strchr(destp, quote_chr))) { + if ((srcp = strchr(destp + 1, quote_chr))) { + srcp++; + while (isspace(*srcp)) srcp++; + memmove(destp, srcp, strlen(srcp) + 1); + } else { + *destp = '\0'; + break; + } + } +} + +void extract_quote(gchar *str, gchar quote_chr) +{ + register gchar *p; + + if ((str = strchr(str, quote_chr))) { + if ((p = strchr(str + 1, quote_chr))) { + *p = '\0'; + memmove(str, str + 1, p - str); + } + } +} + +void eliminate_address_comment(gchar *str) +{ + register gchar *srcp, *destp; + gint in_brace; + + srcp = destp = str; + + while ((destp = strchr(destp, '"'))) { + if ((srcp = strchr(destp + 1, '"'))) { + srcp++; + if (*srcp == '@') { + destp = srcp + 1; + } else { + while (isspace(*srcp)) srcp++; + memmove(destp, srcp, strlen(srcp) + 1); + } + } else { + *destp = '\0'; + break; + } + } + + srcp = destp = str; + + while ((destp = strchr_with_skip_quote(destp, '"', '('))) { + in_brace = 1; + srcp = destp + 1; + while (*srcp) { + if (*srcp == '(') + in_brace++; + else if (*srcp == ')') + in_brace--; + srcp++; + if (in_brace == 0) + break; + } + while (isspace(*srcp)) srcp++; + memmove(destp, srcp, strlen(srcp) + 1); + } +} + +gchar *strchr_with_skip_quote(const gchar *str, gint quote_chr, gint c) +{ + gboolean in_quote = FALSE; + + while (*str) { + if (*str == c && !in_quote) + return (gchar *)str; + if (*str == quote_chr) + in_quote ^= TRUE; + str++; + } + + return NULL; +} + +gchar *strrchr_with_skip_quote(const gchar *str, gint quote_chr, gint c) +{ + gboolean in_quote = FALSE; + const gchar *p; + + p = str + strlen(str) - 1; + while (p >= str) { + if (*p == c && !in_quote) + return (gchar *)p; + if (*p == quote_chr) + in_quote ^= TRUE; + p--; + } + + return NULL; +} + +void extract_address(gchar *str) +{ + eliminate_address_comment(str); + if (strchr_with_skip_quote(str, '"', '<')) + extract_parenthesis_with_skip_quote(str, '"', '<', '>'); + g_strstrip(str); +} + +GSList *address_list_append(GSList *addr_list, const gchar *str) +{ + gchar *work; + gchar *workp; + + if (!str) return addr_list; + + Xstrdup_a(work, str, return addr_list); + + eliminate_address_comment(work); + workp = work; + + while (workp && *workp) { + gchar *p, *next; + + if ((p = strchr_with_skip_quote(workp, '"', ','))) { + *p = '\0'; + next = p + 1; + } else + next = NULL; + + if (strchr_with_skip_quote(workp, '"', '<')) + extract_parenthesis_with_skip_quote + (workp, '"', '<', '>'); + + g_strstrip(workp); + if (*workp) + addr_list = g_slist_append(addr_list, g_strdup(workp)); + + workp = next; + } + + return addr_list; +} + +GSList *references_list_append(GSList *msgid_list, const gchar *str) +{ + const gchar *strp; + + if (!str) return msgid_list; + strp = str; + + while (strp && *strp) { + const gchar *start, *end; + gchar *msgid; + + if ((start = strchr(strp, '<')) != NULL) { + end = strchr(start + 1, '>'); + if (!end) break; + } else + break; + + msgid = g_strndup(start + 1, end - start - 1); + g_strstrip(msgid); + if (*msgid) + msgid_list = g_slist_append(msgid_list, msgid); + else + g_free(msgid); + + strp = end + 1; + } + + return msgid_list; +} + +GSList *newsgroup_list_append(GSList *group_list, const gchar *str) +{ + gchar *work; + gchar *workp; + + if (!str) return group_list; + + Xstrdup_a(work, str, return group_list); + + workp = work; + + while (workp && *workp) { + gchar *p, *next; + + if ((p = strchr_with_skip_quote(workp, '"', ','))) { + *p = '\0'; + next = p + 1; + } else + next = NULL; + + g_strstrip(workp); + if (*workp) + group_list = g_slist_append(group_list, + g_strdup(workp)); + + workp = next; + } + + return group_list; +} + +void remove_return(gchar *str) +{ + register gchar *p = str; + + while (*p) { + if (*p == '\n' || *p == '\r') + memmove(p, p + 1, strlen(p)); + else + p++; + } +} + +void remove_space(gchar *str) +{ + register gchar *p = str; + register gint spc; + + while (*p) { + spc = 0; + while (isspace(*(p + spc))) + spc++; + if (spc) + memmove(p, p + spc, strlen(p + spc) + 1); + else + p++; + } +} + +void subst_char(gchar *str, gchar orig, gchar subst) +{ + register gchar *p = str; + + while (*p) { + if (*p == orig) + *p = subst; + p++; + } +} + +gboolean is_header_line(const gchar *str) +{ + if (str[0] == ':') return FALSE; + + while (*str != '\0' && *str != ' ') { + if (*str == ':') + return TRUE; + str++; + } + + return FALSE; +} + +gboolean is_ascii_str(const guchar *str) +{ + while (*str != '\0') { + if (*str != '\t' && *str != ' ' && + *str != '\r' && *str != '\n' && + (*str < 32 || *str >= 127)) + return FALSE; + str++; + } + + return TRUE; +} + +gint get_quote_level(const gchar *str) +{ + size_t firstquotepos; + size_t lastquotepos = -1; + const gchar *p = str; + const gchar *pos; + gint quotelevel = -1; + gint i = 0; + + /* speed up line processing by only searching to the last '>' */ + if ((pos = strchr(str, '>')) != NULL) { + firstquotepos = pos - str; + lastquotepos = strrchr(str, '>') - str + 1; + + /* skip a line if it contains a '<' before the initial '>' */ + if (memchr(str, '<', pos - str) != NULL) + return -1; + } else + return -1; + + while (i < lastquotepos) { + while (i < lastquotepos) { + if (isspace(*p) || (*p == '\t')) { + p++; + i++; + } else + break; + } + if (i >= lastquotepos) + break; + + if (*p == '>') + quotelevel++; + else if ((*p != '-') && !isspace(*p) && (i < lastquotepos)) { + /* any characters are allowed except '-' and space */ + while ((*p != '-') && (*p != '>') && !isspace(*p) && + (i < lastquotepos)) { + p++; + i++; + } + if (*p == '>') + quotelevel++; + else if ((i >= lastquotepos) || isspace(*p)) + break; + } + + p++; + i++; + } + + return quotelevel; +} + +GList *uri_list_extract_filenames(const gchar *uri_list) +{ + GList *result = NULL; + const gchar *p, *q; + gchar *file; + + p = uri_list; + + while (p) { + if (*p != '#') { + while (isspace(*p)) p++; + if (!strncmp(p, "file:", 5)) { + p += 5; + q = p; + while (*q && *q != '\n' && *q != '\r') q++; + + if (q > p) { + q--; + while (q > p && isspace(*q)) q--; + file = g_malloc(q - p + 2); + strncpy(file, p, q - p + 1); + file[q - p + 1] = '\0'; + result = g_list_append(result,file); + } + } + } + p = strchr(p, '\n'); + if (p) p++; + } + + return result; +} + +gchar *strstr_with_skip_quote(const gchar *haystack, const gchar *needle) +{ + register guint haystack_len, needle_len; + gboolean in_squote = FALSE, in_dquote = FALSE; + + haystack_len = strlen(haystack); + needle_len = strlen(needle); + + if (haystack_len < needle_len || needle_len == 0) + return NULL; + + while (haystack_len >= needle_len) { + if (!in_squote && !in_dquote && + !strncmp(haystack, needle, needle_len)) + return (gchar *)haystack; + + /* 'foo"bar"' -> foo"bar" + "foo'bar'" -> foo'bar' */ + if (*haystack == '\'') { + if (in_squote) + in_squote = FALSE; + else if (!in_dquote) + in_squote = TRUE; + } else if (*haystack == '\"') { + if (in_dquote) + in_dquote = FALSE; + else if (!in_squote) + in_dquote = TRUE; + } + + haystack++; + haystack_len--; + } + + return NULL; +} + +/* this fuction was taken from gstrfuncs.c in glib. */ +gchar **strsplit_with_quote(const gchar *str, const gchar *delim, + gint max_tokens) +{ + GSList *string_list = NULL, *slist; + gchar **str_array, *s; + guint i, n = 1; + + g_return_val_if_fail(str != NULL, NULL); + g_return_val_if_fail(delim != NULL, NULL); + + if (max_tokens < 1) + max_tokens = G_MAXINT; + + s = strstr_with_skip_quote(str, delim); + if (s) { + guint delimiter_len = strlen(delim); + + do { + guint len; + gchar *new_str; + + len = s - str; + new_str = g_new(gchar, len + 1); + strncpy(new_str, str, len); + new_str[len] = 0; + string_list = g_slist_prepend(string_list, new_str); + n++; + str = s + delimiter_len; + s = strstr_with_skip_quote(str, delim); + } while (--max_tokens && s); + } + + if (*str) { + n++; + string_list = g_slist_prepend(string_list, g_strdup(str)); + } + + str_array = g_new(gchar*, n); + + i = n - 1; + + str_array[i--] = NULL; + for (slist = string_list; slist; slist = slist->next) + str_array[i--] = slist->data; + + g_slist_free(string_list); + + return str_array; +} + +gchar *get_rc_dir(void) +{ + static gchar *rc_dir = NULL; + + if (!rc_dir) + rc_dir = g_strconcat(g_get_home_dir(), G_DIR_SEPARATOR_S, + RC_DIR, NULL); + + return rc_dir; +} + +gchar *get_news_cache_dir(void) +{ + static gchar *news_cache_dir = NULL; + + if (!news_cache_dir) + news_cache_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + NEWS_CACHE_DIR, NULL); + + return news_cache_dir; +} + +gchar *get_imap_cache_dir(void) +{ + static gchar *imap_cache_dir = NULL; + + if (!imap_cache_dir) + imap_cache_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + IMAP_CACHE_DIR, NULL); + + return imap_cache_dir; +} + +gchar *get_mime_tmp_dir(void) +{ + static gchar *mime_tmp_dir = NULL; + + if (!mime_tmp_dir) + mime_tmp_dir = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + MIME_TMP_DIR, NULL); + + return mime_tmp_dir; +} + +gchar *get_tmp_file(void) +{ + static gchar *tmp_file = NULL; + + if (!tmp_file) + tmp_file = g_strconcat(get_rc_dir(), G_DIR_SEPARATOR_S, + "tmpfile", NULL); + + return tmp_file; +} + +gchar *get_domain_name(void) +{ + static gchar *domain_name = NULL; + + if (!domain_name) { + gchar buf[BUFFSIZE] = ""; + + if (gethostname(buf, sizeof(buf)) < 0) { + perror("gethostname"); + strcpy(buf, "unknown"); + } + + domain_name = g_strdup(buf); + } + + return domain_name; +} + +off_t get_file_size(const gchar *file) +{ + struct stat s; + + if (stat(file, &s) < 0) { + FILE_OP_ERROR(file, "stat"); + return -1; + } + + return s.st_size; +} + +gboolean file_exist(const gchar *file, gboolean allow_fifo) +{ + struct stat s; + + if (stat(file, &s) < 0) { + if (ENOENT != errno) FILE_OP_ERROR(file, "stat"); + return FALSE; + } + + if (S_ISREG(s.st_mode) || (allow_fifo && S_ISFIFO(s.st_mode))) + return TRUE; + + return FALSE; +} + +gboolean is_dir_exist(const gchar *dir) +{ + struct stat s; + + if (stat(dir, &s) < 0) { + if (ENOENT != errno) FILE_OP_ERROR(dir, "stat"); + return FALSE; + } + + if (S_ISDIR(s.st_mode)) + return TRUE; + + return FALSE; +} + +gint change_dir(const gchar *dir) +{ + gchar *prevdir = NULL; + + if (debug_mode) + prevdir = g_get_current_dir(); + + if (chdir(dir) < 0) { + FILE_OP_ERROR(dir, "chdir"); + if (debug_mode) g_free(prevdir); + return -1; + } else if (debug_mode) { + gchar *cwd; + + cwd = g_get_current_dir(); + if (strcmp(prevdir, cwd) != 0) + g_print("current dir: %s\n", cwd); + g_free(cwd); + g_free(prevdir); + } + + return 0; +} + +gint make_dir_hier(const gchar *dir) +{ + gchar *parent_dir; + const gchar *p; + + for (p = dir; (p = strchr(p, G_DIR_SEPARATOR)) != NULL; p++) { + parent_dir = g_strndup(dir, p - dir); + if (*parent_dir != '\0') { + if (!is_dir_exist(parent_dir)) { + if (mkdir(parent_dir, S_IRWXU) < 0) { + FILE_OP_ERROR(parent_dir, "mkdir"); + g_free(parent_dir); + return -1; + } + if (chmod(parent_dir, S_IRWXU) < 0) + FILE_OP_ERROR(parent_dir, "chmod"); + } + } + g_free(parent_dir); + } + if (!is_dir_exist(dir)) { + if (mkdir(dir, S_IRWXU) < 0) { + FILE_OP_ERROR(dir, "mkdir"); + return -1; + } + if (chmod(dir, S_IRWXU) < 0) + FILE_OP_ERROR(dir, "chmod"); + } + + return 0; +} + +gint remove_all_files(const gchar *dir) +{ + DIR *dp; + struct dirent *d; + gchar *prev_dir; + + prev_dir = g_get_current_dir(); + + if (chdir(dir) < 0) { + FILE_OP_ERROR(dir, "chdir"); + return -1; + } + + if ((dp = opendir(".")) == NULL) { + FILE_OP_ERROR(dir, "opendir"); + return -1; + } + + while ((d = readdir(dp)) != NULL) { + if (!strcmp(d->d_name, ".") || + !strcmp(d->d_name, "..")) + continue; + + if (unlink(d->d_name) < 0) + FILE_OP_ERROR(d->d_name, "unlink"); + } + + closedir(dp); + + if (chdir(prev_dir) < 0) { + FILE_OP_ERROR(prev_dir, "chdir"); + g_free(prev_dir); + return -1; + } + + g_free(prev_dir); + + return 0; +} + +gint remove_dir_recursive(const gchar *dir) +{ + struct stat s; + DIR *dp; + struct dirent *d; + gchar *prev_dir; + + //g_print("dir = %s\n", dir); + + if (stat(dir, &s) < 0) { + FILE_OP_ERROR(dir, "stat"); + if (ENOENT == errno) return 0; + return -1; + } + + if (!S_ISDIR(s.st_mode)) { + if (unlink(dir) < 0) { + FILE_OP_ERROR(dir, "unlink"); + return -1; + } + + return 0; + } + + prev_dir = g_get_current_dir(); + //g_print("prev_dir = %s\n", prev_dir); + + if (!path_cmp(prev_dir, dir)) { + g_free(prev_dir); + if (chdir("..") < 0) { + FILE_OP_ERROR(dir, "chdir"); + return -1; + } + prev_dir = g_get_current_dir(); + } + + if (chdir(dir) < 0) { + FILE_OP_ERROR(dir, "chdir"); + g_free(prev_dir); + return -1; + } + + if ((dp = opendir(".")) == NULL) { + FILE_OP_ERROR(dir, "opendir"); + chdir(prev_dir); + g_free(prev_dir); + return -1; + } + + /* remove all files in the directory */ + while ((d = readdir(dp)) != NULL) { + if (!strcmp(d->d_name, ".") || + !strcmp(d->d_name, "..")) + continue; + + if (stat(d->d_name, &s) < 0) { + FILE_OP_ERROR(d->d_name, "stat"); + continue; + } + + //g_print("removing %s\n", d->d_name); + + if (S_ISDIR(s.st_mode)) { + if (remove_dir_recursive(d->d_name) < 0) { + g_warning("can't remove directory\n"); + return -1; + } + } else { + if (unlink(d->d_name) < 0) + FILE_OP_ERROR(d->d_name, "unlink"); + } + } + + closedir(dp); + + if (chdir(prev_dir) < 0) { + FILE_OP_ERROR(prev_dir, "chdir"); + g_free(prev_dir); + return -1; + } + + g_free(prev_dir); + + if (rmdir(dir) < 0) { + FILE_OP_ERROR(dir, "rmdir"); + return -1; + } + + return 0; +} + +#if 0 +/* this seems to be slower than the stdio version... */ +gint copy_file(const gchar *src, const gchar *dest) +{ + gint src_fd, dest_fd; + gint n_read; + gint n_write; + gchar buf[BUFSIZ]; + gchar *dest_bak = NULL; + + if ((src_fd = open(src, O_RDONLY)) < 0) { + FILE_OP_ERROR(src, "open"); + return -1; + } + + if (is_file_exist(dest)) { + dest_bak = g_strconcat(dest, ".bak", NULL); + if (rename(dest, dest_bak) < 0) { + FILE_OP_ERROR(dest, "rename"); + close(src_fd); + g_free(dest_bak); + return -1; + } + } + + if ((dest_fd = open(dest, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR)) < 0) { + FILE_OP_ERROR(dest, "open"); + close(src_fd); + if (dest_bak) { + if (rename(dest_bak, dest) < 0) + FILE_OP_ERROR(dest_bak, "rename"); + g_free(dest_bak); + } + return -1; + } + + while ((n_read = read(src_fd, buf, sizeof(buf))) > 0) { + gint len = n_read; + gchar *bufp = buf; + + while (len > 0) { + n_write = write(dest_fd, bufp, len); + if (n_write <= 0) { + g_warning(_("writing to %s failed.\n"), dest); + close(dest_fd); + close(src_fd); + unlink(dest); + if (dest_bak) { + if (rename(dest_bak, dest) < 0) + FILE_OP_ERROR(dest_bak, "rename"); + g_free(dest_bak); + } + return -1; + } + len -= n_write; + bufp += n_write; + } + } + + close(src_fd); + close(dest_fd); + + if (n_read < 0 || get_file_size(src) != get_file_size(dest)) { + g_warning(_("File copy from %s to %s failed.\n"), src, dest); + unlink(dest); + if (dest_bak) { + if (rename(dest_bak, dest) < 0) + FILE_OP_ERROR(dest_bak, "rename"); + g_free(dest_bak); + } + return -1; + } + g_free(dest_bak); + + return 0; +} +#endif + +gint copy_file(const gchar *src, const gchar *dest) +{ + FILE *src_fp, *dest_fp; + gint n_read; + gchar buf[BUFSIZ]; + gchar *dest_bak = NULL; + gboolean err = FALSE; + + if ((src_fp = fopen(src, "r")) == NULL) { + FILE_OP_ERROR(src, "fopen"); + return -1; + } + if (is_file_exist(dest)) { + dest_bak = g_strconcat(dest, ".bak", NULL); + if (rename(dest, dest_bak) < 0) { + FILE_OP_ERROR(dest, "rename"); + fclose(src_fp); + g_free(dest_bak); + return -1; + } + } + + if ((dest_fp = fopen(dest, "w")) == NULL) { + FILE_OP_ERROR(dest, "fopen"); + fclose(src_fp); + if (dest_bak) { + if (rename(dest_bak, dest) < 0) + FILE_OP_ERROR(dest_bak, "rename"); + g_free(dest_bak); + } + return -1; + } + + if (change_file_mode_rw(dest_fp, dest) < 0) { + FILE_OP_ERROR(dest, "chmod"); + g_warning(_("can't change file mode\n")); + } + + while ((n_read = fread(buf, sizeof(gchar), sizeof(buf), src_fp)) > 0) { + if (n_read < sizeof(buf) && ferror(src_fp)) + break; + if (fwrite(buf, n_read, 1, dest_fp) < 1) { + g_warning(_("writing to %s failed.\n"), dest); + fclose(dest_fp); + fclose(src_fp); + unlink(dest); + if (dest_bak) { + if (rename(dest_bak, dest) < 0) + FILE_OP_ERROR(dest_bak, "rename"); + g_free(dest_bak); + } + return -1; + } + } + + if (ferror(src_fp)) { + FILE_OP_ERROR(src, "fread"); + err = TRUE; + } + fclose(src_fp); + if (fclose(dest_fp) == EOF) { + FILE_OP_ERROR(dest, "fclose"); + err = TRUE; + } + + if (err) { + unlink(dest); + if (dest_bak) { + if (rename(dest_bak, dest) < 0) + FILE_OP_ERROR(dest_bak, "rename"); + g_free(dest_bak); + } + return -1; + } + + g_free(dest_bak); + + return 0; +} + +gint change_file_mode_rw(FILE *fp, const gchar *file) +{ +#if HAVE_FCHMOD + return fchmod(fileno(fp), S_IRUSR|S_IWUSR); +#else + return chmod(file, S_IRUSR|S_IWUSR); +#endif +} + +FILE *my_tmpfile(void) +{ +#if HAVE_MKSTEMP + const gchar suffix[] = ".XXXXXX"; + const gchar *tmpdir; + guint tmplen; + const gchar *progname; + guint proglen; + gchar *fname; + gint fd; + FILE *fp; + + tmpdir = g_get_tmp_dir(); + tmplen = strlen(tmpdir); + progname = g_get_prgname(); + proglen = strlen(progname); + Xalloca(fname, tmplen + 1 + proglen + sizeof(suffix), + return tmpfile()); + + memcpy(fname, tmpdir, tmplen); + fname[tmplen] = G_DIR_SEPARATOR; + memcpy(fname + tmplen + 1, progname, proglen); + memcpy(fname + tmplen + 1 + proglen, suffix, sizeof(suffix)); + + fd = mkstemp(fname); + if (fd < 0) + return tmpfile(); + + unlink(fname); + + fp = fdopen(fd, "w+b"); + if (!fp) + close(fd); + else + return fp; +#endif /* HAVE_MKSTEMP */ + + return tmpfile(); +} + +gint execute_async(gchar *const argv[]) +{ + pid_t pid; + + if ((pid = fork()) < 0) { + perror("fork"); + return -1; + } + + if (pid == 0) { /* child process */ + pid_t gch_pid; + + if ((gch_pid = fork()) < 0) { + perror("fork"); + _exit(1); + } + + if (gch_pid == 0) { /* grandchild process */ + execvp(argv[0], argv); + + perror("execvp"); + _exit(1); + } + + _exit(0); + } + + waitpid(pid, NULL, 0); + + return 0; +} + +gint execute_command_line(const gchar *cmdline) +{ + gchar **argv; + gint i; + gint ret; + + argv = strsplit_with_quote(cmdline, " ", 0); + + for (i = 0; argv[i] != NULL; i++) { + gchar *str = argv[i]; + + if (str[0] == '\'' || str[0] == '\"') { + gint len; + + len = strlen(str); + if (str[len - 1] == str[0]) { + str[len - 1] = '\0'; + memmove(str, str + 1, len - 1); + } + } + } + + ret = execute_async(argv); + g_strfreev(argv); + + return ret; +} + +gint open_uri(const gchar *uri, const gchar *cmdline) +{ + static gchar *default_cmdline = "netscape -remote openURL(%s,raise)"; + gchar buf[BUFFSIZE]; + gchar *p; + + g_return_val_if_fail(uri != NULL, -1); + + if (cmdline && + (p = strchr(cmdline, '%')) && *(p + 1) == 's' && + !strchr(p + 2, '%')) + g_snprintf(buf, sizeof(buf), cmdline, uri); + else { + if (cmdline) + g_warning(_("Open URI command line is invalid: `%s'"), + cmdline); + g_snprintf(buf, sizeof(buf), default_cmdline, uri); + } + + execute_command_line(buf); + + return 0; +} + +time_t remote_tzoffset_sec(const gchar *zone) +{ + static gchar ustzstr[] = "PSTPDTMSTMDTCSTCDTESTEDT"; + gchar zone3[4]; + gchar *p; + gchar c; + gint iustz; + gint h, m; + time_t remoteoffset; + + strncpy(zone3, zone, 3); + zone3[3] = '\0'; + remoteoffset = 0; + + if (sscanf(zone, "%c%2d%2d", &c, &h, &m) == 3 && + (c == '+' || c == '-')) { + remoteoffset = ((h * 60) + m) * 60; + if (c == '-') + remoteoffset = -remoteoffset; + } else if (!strncmp(zone, "UT" , 2) || + !strncmp(zone, "GMT", 2)) { + remoteoffset = 0; + } else if (strlen(zone3) == 3 && + (p = strstr(ustzstr, zone3)) != NULL && + (p - ustzstr) % 3 == 0) { + iustz = ((gint)(p - ustzstr) / 3 + 1) / 2 - 8; + remoteoffset = iustz * 3600; + } else if (strlen(zone3) == 1) { + switch (zone[0]) { + case 'Z': remoteoffset = 0; break; + case 'A': remoteoffset = -1; break; + case 'B': remoteoffset = -2; break; + case 'C': remoteoffset = -3; break; + case 'D': remoteoffset = -4; break; + case 'E': remoteoffset = -5; break; + case 'F': remoteoffset = -6; break; + case 'G': remoteoffset = -7; break; + case 'H': remoteoffset = -8; break; + case 'I': remoteoffset = -9; break; + case 'K': remoteoffset = -10; break; /* J is not used */ + case 'L': remoteoffset = -11; break; + case 'M': remoteoffset = -12; break; + case 'N': remoteoffset = 1; break; + case 'O': remoteoffset = 2; break; + case 'P': remoteoffset = 3; break; + case 'Q': remoteoffset = 4; break; + case 'R': remoteoffset = 5; break; + case 'S': remoteoffset = 6; break; + case 'T': remoteoffset = 7; break; + case 'U': remoteoffset = 8; break; + case 'V': remoteoffset = 9; break; + case 'W': remoteoffset = 10; break; + case 'X': remoteoffset = 11; break; + case 'Y': remoteoffset = 12; break; + default: remoteoffset = 0; break; + } + remoteoffset = remoteoffset * 3600; + } + + return remoteoffset; +} + +time_t tzoffset_sec(time_t *now) +{ + struct tm gmt, *lt; + gint off; + + gmt = *gmtime(now); + lt = localtime(now); + + off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min; + + if (lt->tm_year < gmt.tm_year) + off -= 24 * 60; + else if (lt->tm_year > gmt.tm_year) + off += 24 * 60; + else if (lt->tm_yday < gmt.tm_yday) + off -= 24 * 60; + else if (lt->tm_yday > gmt.tm_yday) + off += 24 * 60; + + if (off >= 24 * 60) /* should be impossible */ + off = 23 * 60 + 59; /* if not, insert silly value */ + if (off <= -24 * 60) + off = -(23 * 60 + 59); + if (off > 12 * 60) + off -= 24 * 60; + if (off < -12 * 60) + off += 24 * 60; + + return off * 60; +} + +/* calculate timezone offset */ +gchar *tzoffset(time_t *now) +{ + static gchar offset_string[6]; + struct tm gmt, *lt; + gint off; + gchar sign = '+'; + + gmt = *gmtime(now); + lt = localtime(now); + + off = (lt->tm_hour - gmt.tm_hour) * 60 + lt->tm_min - gmt.tm_min; + + if (lt->tm_year < gmt.tm_year) + off -= 24 * 60; + else if (lt->tm_year > gmt.tm_year) + off += 24 * 60; + else if (lt->tm_yday < gmt.tm_yday) + off -= 24 * 60; + else if (lt->tm_yday > gmt.tm_yday) + off += 24 * 60; + + if (off < 0) { + sign = '-'; + off = -off; + } + + if (off >= 24 * 60) /* should be impossible */ + off = 23 * 60 + 59; /* if not, insert silly value */ + + sprintf(offset_string, "%c%02d%02d", sign, off / 60, off % 60); + + return offset_string; +} + +void get_rfc822_date(gchar *buf, gint len) +{ + struct tm *lt; + time_t t; + gchar day[4], mon[4]; + gint dd, hh, mm, ss, yyyy; + + t = time(NULL); + lt = localtime(&t); + + sscanf(asctime(lt), "%3s %3s %d %d:%d:%d %d\n", + day, mon, &dd, &hh, &mm, &ss, &yyyy); + g_snprintf(buf, len, "%s, %d %s %d %02d:%02d:%02d %s", + day, dd, mon, yyyy, hh, mm, ss, tzoffset(&t)); +} + +void debug_print(const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + if (!debug_mode) return; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + fputs(buf, stdout); +} + +void log_print(const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + if (debug_mode) fputs(buf, stdout); + log_window_append(buf, LOG_NORMAL); + statusbar_puts_all(buf); +} + +void log_message(const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + if (debug_mode) g_message("%s", buf); + log_window_append(buf, LOG_MSG); +} + +void log_warning(const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + g_warning("%s", buf); + log_window_append(buf, LOG_WARN); +} + +void log_error(const gchar *format, ...) +{ + va_list args; + gchar buf[BUFFSIZE]; + + va_start(args, format); + g_vsnprintf(buf, sizeof(buf), format, args); + va_end(args); + + g_warning("%s", buf); + log_window_append(buf, LOG_ERROR); +} diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 000000000..6f6ac12a4 --- /dev/null +++ b/src/utils.h @@ -0,0 +1,254 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __UTILS_H__ +#define __UTILS_H__ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <time.h> +#if HAVE_ALLOCA_H +# include <alloca.h> +#endif +#if HAVE_WCHAR_H +# include <wchar.h> +#endif + +#define CHDIR_RETURN_IF_FAIL(dir) \ +{ \ + if (change_dir(dir) < 0) return; \ +} + +#define CHDIR_RETURN_VAL_IF_FAIL(dir, val) \ +{ \ + if (change_dir(dir) < 0) return val; \ +} + +#define Xalloca(ptr, size, iffail) \ +{ \ + if ((ptr = alloca(size)) == NULL) { \ + g_warning("can't allocate memory\n"); \ + iffail; \ + } \ +} + +#define Xstrdup_a(ptr, str, iffail) \ +{ \ + gchar *__tmp; \ + \ + if ((__tmp = alloca(strlen(str) + 1)) == NULL) { \ + g_warning("can't allocate memory\n"); \ + iffail; \ + } else \ + strcpy(__tmp, str); \ + \ + ptr = __tmp; \ +} + +#define Xstrndup_a(ptr, str, len, iffail) \ +{ \ + gchar *__tmp; \ + \ + if ((__tmp = alloca(len + 1)) == NULL) { \ + g_warning("can't allocate memory\n"); \ + iffail; \ + } else { \ + strncpy(__tmp, str, len); \ + __tmp[len] = '\0'; \ + } \ + \ + ptr = __tmp; \ +} + +#define FILE_OP_ERROR(file, func) \ +{ \ + fprintf(stderr, "%s: ", file); \ + perror(func); \ +} + +/* for macro expansion */ +#define Str(x) #x +#define Xstr(x) Str(x) + +void list_free_strings (GList *list); +void slist_free_strings (GSList *list); + +void hash_free_strings (GHashTable *table); + +void ptr_array_free_strings (GPtrArray *array); + +/* number-string conversion */ +gint to_number (const gchar *nstr); +gchar *itos (gint n); +gchar *to_human_readable (off_t size); + +/* alternative string functions */ +gint strcmp2 (const gchar *s1, + const gchar *s2); +gint path_cmp (const gchar *s1, + const gchar *s2); +gchar *strretchomp (gchar *str); +gchar *strcasestr (const gchar *haystack, + const gchar *needle); +gchar *strncpy2 (gchar *dest, + const gchar *src, + size_t n); + +/* wide-character functions */ +#if !HAVE_ISWALNUM +int iswalnum (wint_t wc); +#endif +#if !HAVE_ISWSPACE +int iswspace (wint_t wc); +#endif +#if !HAVE_TOWLOWER +wint_t towlower (wint_t wc); +#endif + +#if !HAVE_WCSLEN +size_t wcslen (const wchar_t *s); +#endif +#if !HAVE_WCSCPY +wchar_t *wcscpy (wchar_t *dest, + const wchar_t *src); +#endif +#if !HAVE_WCSNCPY +wchar_t *wcsncpy (wchar_t *dest, + const wchar_t *src, + size_t n); +#endif + +wchar_t *wcsdup (const wchar_t *s); +wchar_t *wcsndup (const wchar_t *s, + size_t n); +wchar_t *strdup_mbstowcs (const gchar *s); +gchar *strdup_wcstombs (const wchar_t *s); +gint wcsncasecmp (const wchar_t *s1, + const wchar_t *s2, + size_t n); +wchar_t *wcscasestr (const wchar_t *haystack, + const wchar_t *needle); + +gboolean is_next_nonascii (const wchar_t *s); +gboolean is_next_mbs (const wchar_t *s); +wchar_t *find_wspace (const wchar_t *s); + +/* functions for string parsing */ +gint subject_compare (const gchar *s1, + const gchar *s2); +void trim_subject (gchar *str); +void eliminate_parenthesis (gchar *str, + gchar op, + gchar cl); +void extract_parenthesis (gchar *str, + gchar op, + gchar cl); +void extract_parenthesis_with_skip_quote(gchar *str, + gchar quote_chr, + gchar op, + gchar cl); +void eliminate_quote (gchar *str, + gchar quote_chr); +void extract_quote (gchar *str, + gchar quote_chr); +void eliminate_address_comment (gchar *str); +gchar *strchr_with_skip_quote (const gchar *str, + gint quote_chr, + gint c); +gchar *strrchr_with_skip_quote (const gchar *str, + gint quote_chr, + gint c); +void extract_address (gchar *str); +GSList *address_list_append (GSList *addr_list, + const gchar *str); +GSList *references_list_append (GSList *msgid_list, + const gchar *str); +GSList *newsgroup_list_append (GSList *group_list, + const gchar *str); +void remove_return (gchar *str); +void remove_space (gchar *str); +void subst_char (gchar *str, + gchar orig, + gchar subst); +gboolean is_header_line (const gchar *str); +gboolean is_ascii_str (const guchar *str); +gint get_quote_level (const gchar *str); +GList *uri_list_extract_filenames (const gchar *uri_list); +gchar *strstr_with_skip_quote (const gchar *haystack, + const gchar *needle); +gchar **strsplit_with_quote (const gchar *str, + const gchar *delim, + gint max_tokens); + +/* return static strings */ +gchar *get_rc_dir (void); +gchar *get_news_cache_dir (void); +gchar *get_imap_cache_dir (void); +gchar *get_mime_tmp_dir (void); +gchar *get_tmp_file (void); +gchar *get_domain_name (void); + +/* file / directory handling */ +off_t get_file_size (const gchar *file); +gboolean file_exist (const gchar *file, + gboolean allow_fifo); +gboolean is_dir_exist (const gchar *dir); +gint change_dir (const gchar *dir); +gint make_dir_hier (const gchar *dir); +gint remove_all_files (const gchar *dir); +gint remove_dir_recursive (const gchar *dir); +gint copy_file (const gchar *src, + const gchar *dest); +gint change_file_mode_rw (FILE *fp, + const gchar *file); +FILE *my_tmpfile (void); + +#define is_file_exist(file) file_exist(file, FALSE) +#define is_file_or_fifo_exist(file) file_exist(file, TRUE) + +/* process execution */ +gint execute_async (gchar *const argv[]); +gint execute_command_line (const gchar *cmdline); + +/* open URI with external browser */ +gint open_uri(const gchar *uri, const gchar *cmdline); + +/* time functions */ +time_t remote_tzoffset_sec (const gchar *zone); +time_t tzoffset_sec (time_t *now); +gchar *tzoffset (time_t *now); +void get_rfc822_date (gchar *buf, + gint len); + +/* logging */ +void debug_print(const gchar *format, ...) G_GNUC_PRINTF(1, 2); +void log_print (const gchar *format, ...) G_GNUC_PRINTF(1, 2); +void log_message(const gchar *format, ...) G_GNUC_PRINTF(1, 2); +void log_warning(const gchar *format, ...) G_GNUC_PRINTF(1, 2); +void log_error (const gchar *format, ...) G_GNUC_PRINTF(1, 2); + +#endif /* __UTILS_H__ */ diff --git a/src/uuencode.c b/src/uuencode.c new file mode 100644 index 000000000..e0b2e79a3 --- /dev/null +++ b/src/uuencode.c @@ -0,0 +1,101 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <ctype.h> + +#define UUDECODE(c) (c=='`' ? 0 : c - ' ') +#define N64(i) (i & ~63) + +const char uudigit[64] = +{ + '`', '!', '"', '#', '$', '%', '&', '\'', + '(', ')', '*', '+', ',', '-', '.', '/', + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', ':', ';', '<', '=', '>', '?', + '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', + 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', + 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', + 'X', 'Y', 'Z', '[', '\\', ']', '^', '_' +}; + +int touufrombits(unsigned char *out, const unsigned char *in, int inlen) +{ + int len; + + if (inlen > 45) return -1; + len = (inlen * 4 + 2) / 3 + 1; + *out++ = uudigit[inlen]; + + for (; inlen >= 3; inlen -= 3) { + *out++ = uudigit[in[0] >> 2]; + *out++ = uudigit[((in[0] << 4) & 0x30) | (in[1] >> 4)]; + *out++ = uudigit[((in[1] << 2) & 0x3c) | (in[2] >> 6)]; + *out++ = uudigit[in[2] & 0x3f]; + in += 3; + } + + if (inlen > 0) { + *out++ = uudigit[(in[0] >> 2)]; + if (inlen == 1) { + *out++ = uudigit[((in[0] << 4) & 0x30)]; + } else { + *out++ = uudigit[(((in[0] << 4) & 0x30) | (in[1] >> 4))] ; + *out++ = uudigit[((in[1] << 2) & 0x3c)]; + } + } + *out = '\0'; + + return len; +} + +int fromuutobits(char *out, const char *in) +{ + int len, outlen, inlen; + register unsigned char digit1, digit2; + + outlen = UUDECODE(in[0]); + in += 1; + if(outlen < 0 || outlen > 45) + return -2; + if(outlen == 0) + return 0; + inlen = (outlen * 4 + 2) / 3; + len = 0; + + for( ; inlen>0; inlen-=4) { + digit1 = UUDECODE(in[0]); + if (N64(digit1)) return -1; + digit2 = UUDECODE(in[1]); + if (N64(digit2)) return -1; + out[len++] = (digit1 << 2) | (digit2 >> 4); + if (inlen > 2) { + digit1 = UUDECODE(in[2]); + if (N64(digit1)) return -1; + out[len++] = (digit2 << 4) | (digit1 >> 2); + if (inlen > 3) { + digit2 = UUDECODE(in[3]); + if (N64(digit2)) return -1; + out[len++] = (digit1 << 6) | digit2; + } + } + in += 4; + } + + return len == outlen ? len : -3; +} diff --git a/src/uuencode.h b/src/uuencode.h new file mode 100644 index 000000000..3658ebc6d --- /dev/null +++ b/src/uuencode.h @@ -0,0 +1,24 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +void touufrombits(unsigned char *, const unsigned char *, int); +int fromuutobits(char *, const char *); + +#define X_UUENCODE_END_LINE '`' +#define UUENCODE_END_LINE ' ' diff --git a/src/xml.c b/src/xml.c new file mode 100644 index 000000000..b27611533 --- /dev/null +++ b/src/xml.c @@ -0,0 +1,511 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#include <glib.h> +#include <stdio.h> +#include <string.h> +#include <ctype.h> + +#include "xml.h" +#include "utils.h" + +static void xml_free_tag (XMLTag *tag); +static gint xml_get_parenthesis (XMLFile *file, + gchar *buf, + gint len); + +XMLFile *xml_open_file(const gchar *path) +{ + XMLFile *newfile; + + g_return_val_if_fail(path != NULL, NULL); + + newfile = g_new(XMLFile, 1); + + newfile->fp = fopen(path, "r"); + if (!newfile->fp) { + g_free(newfile); + return NULL; + } + + newfile->buf = g_string_new(NULL); + newfile->bufp = newfile->buf->str; + + newfile->dtd = NULL; + newfile->tag_stack = NULL; + newfile->level = 0; + newfile->is_empty_element = FALSE; + + return newfile; +} + +void xml_close_file(XMLFile *file) +{ + g_return_if_fail(file != NULL); + + if (file->fp) fclose(file->fp); + + g_string_free(file->buf, TRUE); + + g_free(file->dtd); + + while (file->tag_stack != NULL) + xml_pop_tag(file); + + g_free(file); +} + +static GNode *xml_build_tree(XMLFile *file, GNode *parent, guint level) +{ + GNode *node = NULL; + XMLNode *xmlnode; + XMLTag *tag; + + while (xml_parse_next_tag(file) == 0) { + if (file->level < level) break; + if (file->level == level) { + g_warning("xml_build_tree(): Parse error\n"); + break; + } + + tag = xml_get_current_tag(file); + if (!tag) break; + xmlnode = g_new(XMLNode, 1); + xmlnode->tag = xml_copy_tag(tag); + xmlnode->element = xml_get_element(file); + if (!parent) + node = g_node_new(xmlnode); + else + node = g_node_append_data(parent, xmlnode); + + xml_build_tree(file, node, file->level); + if (file->level == 0) break; + } + + return node; +} + +GNode *xml_parse_file(const gchar *path) +{ + XMLFile *file; + GNode *node; + + file = xml_open_file(path); + g_return_val_if_fail(file != NULL, NULL); + + xml_get_dtd(file); + + node = xml_build_tree(file, NULL, file->level); + + xml_close_file(file); + return node; +} + +gint xml_get_dtd(XMLFile *file) +{ + gchar buf[XMLBUFSIZE]; + gchar *bufp = buf; + + if (xml_get_parenthesis(file, buf, sizeof(buf)) < 0) return -1; + + if ((*bufp++ == '?') && + (bufp = strcasestr(bufp, "xml")) && + (bufp = strcasestr(bufp + 3, "version")) && + (bufp = strchr(bufp + 7, '?'))) + file->dtd = g_strdup(buf); + else { + g_warning("Can't get xml dtd\n"); + return -1; + } + + return 0; +} + +gint xml_parse_next_tag(XMLFile *file) +{ + gchar buf[XMLBUFSIZE]; + gchar *bufp = buf; + XMLTag *tag; + gint len; + + if (file->is_empty_element == TRUE) { + file->is_empty_element = FALSE; + xml_pop_tag(file); + return 0; + } + + if (xml_get_parenthesis(file, buf, sizeof(buf)) < 0) { + g_warning("xml_parse_next_tag(): Can't parse next tag\n"); + return -1; + } + + /* end-tag */ + if (buf[0] == '/') { + if (strcmp(xml_get_current_tag(file)->tag, buf + 1) != 0) { + g_warning("xml_parse_next_tag(): Tag name mismatch: %s\n", buf); + return -1; + } + xml_pop_tag(file); + return 0; + } + + tag = g_new0(XMLTag, 1); + xml_push_tag(file, tag); + + len = strlen(buf); + if (len > 0 && buf[len - 1] == '/') { + file->is_empty_element = TRUE; + buf[len - 1] = '\0'; + g_strchomp(buf); + } + if (strlen(buf) == 0) { + g_warning("xml_parse_next_tag(): Tag name is empty\n"); + return -1; + } + + while (*bufp != '\0' && !isspace(*bufp)) bufp++; + if (*bufp == '\0') { + tag->tag = g_strdup(buf); + return 0; + } else { + *bufp++ = '\0'; + tag->tag = g_strdup(buf); + } + + /* parse attributes ( name=value ) */ + while (*bufp) { + XMLAttr *attr; + gchar *attr_name; + gchar *attr_value; + gchar *p; + gchar quote; + + while (isspace(*bufp)) bufp++; + attr_name = bufp; + if ((p = strchr(attr_name, '=')) == NULL) { + g_warning("xml_parse_next_tag(): Syntax error in tag\n"); + return -1; + } + bufp = p; + *bufp++ = '\0'; + while (isspace(*bufp)) bufp++; + + if (*bufp != '"' && *bufp != '\'') { + g_warning("xml_parse_next_tag(): Syntax error in tag\n"); + return -1; + } + quote = *bufp; + bufp++; + attr_value = bufp; + if ((p = strchr(attr_value, quote)) == NULL) { + g_warning("xml_parse_next_tag(): Syntax error in tag\n"); + return -1; + } + bufp = p; + *bufp++ = '\0'; + + g_strchomp(attr_name); + xml_unescape_str(attr_value); + + attr = g_new(XMLAttr, 1); + attr->name = g_strdup(attr_name); + attr->value = g_strdup(attr_value); + tag->attr = g_list_append(tag->attr, attr); + } + + return 0; +} + +void xml_push_tag(XMLFile *file, XMLTag *tag) +{ + g_return_if_fail(tag != NULL); + + file->tag_stack = g_list_prepend(file->tag_stack, tag); + file->level++; +} + +void xml_pop_tag(XMLFile *file) +{ + XMLTag *tag; + + if (!file->tag_stack) return; + + tag = (XMLTag *)file->tag_stack->data; + + xml_free_tag(tag); + file->tag_stack = g_list_remove(file->tag_stack, tag); + file->level--; +} + +XMLTag *xml_get_current_tag(XMLFile *file) +{ + if (file->tag_stack) + return (XMLTag *)file->tag_stack->data; + else + return NULL; +} + +GList *xml_get_current_tag_attr(XMLFile *file) +{ + XMLTag *tag; + + tag = xml_get_current_tag(file); + if (!tag) return NULL; + + return tag->attr; +} + +gchar *xml_get_element(XMLFile *file) +{ + gchar *str; + gchar *end; + + while ((end = strchr(file->bufp, '<')) == NULL) + if (xml_read_line(file) < 0) return NULL; + + if (end == file->bufp) + return NULL; + + str = g_strndup(file->bufp, end - file->bufp); + /* this is not XML1.0 strict */ + g_strstrip(str); + xml_unescape_str(str); + + file->bufp = end; + xml_truncate_buf(file); + + if (str[0] == '\0') { + g_free(str); + return NULL; + } + + return str; +} + +gint xml_read_line(XMLFile *file) +{ + gchar buf[XMLBUFSIZE]; + gint index; + + if (fgets(buf, sizeof(buf), file->fp) == NULL) + return -1; + + index = file->bufp - file->buf->str; + + g_string_append(file->buf, buf); + + file->bufp = file->buf->str + index; + + return 0; +} + +void xml_truncate_buf(XMLFile *file) +{ + gint len; + + len = file->bufp - file->buf->str; + if (len > 0) { + g_string_erase(file->buf, 0, len); + file->bufp = file->buf->str; + } +} + +gboolean xml_compare_tag(XMLFile *file, const gchar *name) +{ + XMLTag *tag; + + tag = xml_get_current_tag(file); + + if (tag && strcmp(tag->tag, name) == 0) + return TRUE; + else + return FALSE; +} + +XMLTag *xml_copy_tag(XMLTag *tag) +{ + XMLTag *new_tag; + XMLAttr *attr; + GList *list; + + new_tag = g_new(XMLTag, 1); + new_tag->tag = g_strdup(tag->tag); + new_tag->attr = NULL; + for (list = tag->attr; list != NULL; list = list->next) { + attr = xml_copy_attr((XMLAttr *)list->data); + new_tag->attr = g_list_append(new_tag->attr, attr); + } + + return new_tag; +} + +XMLAttr *xml_copy_attr(XMLAttr *attr) +{ + XMLAttr *new_attr; + + new_attr = g_new(XMLAttr, 1); + new_attr->name = g_strdup(attr->name); + new_attr->value = g_strdup(attr->value); + + return new_attr; +} + +gint xml_unescape_str(gchar *str) +{ + gchar *start; + gchar *end; + gchar *p = str; + gchar *esc_str; + gchar ch; + gint len; + + while ((start = strchr(p, '&')) != NULL) { + if ((end = strchr(start + 1, ';')) == NULL) { + g_warning("Unescaped `&' appeared\n"); + p = start + 1; + continue; + } + len = end - start + 1; + if (len < 3) { + p = end + 1; + continue; + } + + Xstrndup_a(esc_str, start, len, return -1); + if (!strcmp(esc_str, "<")) + ch = '<'; + else if (!strcmp(esc_str, ">")) + ch = '>'; + else if (!strcmp(esc_str, "&")) + ch = '&'; + else if (!strcmp(esc_str, "'")) + ch = '\''; + else if (!strcmp(esc_str, """)) + ch = '\"'; + else { + p = end + 1; + continue; + } + + *start = ch; + memmove(start + 1, end + 1, strlen(end + 1) + 1); + p = start + 1; + } + + return 0; +} + +gint xml_file_put_escape_str(FILE *fp, const gchar *str) +{ + const gchar *p; + + g_return_val_if_fail(fp != NULL, -1); + + if (!str) return 0; + + for (p = str; *p != '\0'; p++) { + switch (*p) { + case '<': + fputs("<", fp); + break; + case '>': + fputs(">", fp); + break; + case '&': + fputs("&", fp); + break; + case '\'': + fputs("'", fp); + break; + case '\"': + fputs(""", fp); + break; + default: + fputc(*p, fp); + } + } + + return 0; +} + +void xml_free_node(XMLNode *node) +{ + if (!node) return; + + xml_free_tag(node->tag); + g_free(node->element); + g_free(node); +} + +static gboolean xml_free_func(GNode *node, gpointer data) +{ + XMLNode *xmlnode = node->data; + + xml_free_node(xmlnode); + return FALSE; +} + +void xml_free_tree(GNode *node) +{ + g_return_if_fail(node != NULL); + + g_node_traverse(node, G_PRE_ORDER, G_TRAVERSE_ALL, -1, xml_free_func, + NULL); + + g_node_destroy(node); +} + +static void xml_free_tag(XMLTag *tag) +{ + if (!tag) return; + + g_free(tag->tag); + while (tag->attr != NULL) { + XMLAttr *attr = (XMLAttr *)tag->attr->data; + g_free(attr->name); + g_free(attr->value); + g_free(attr); + tag->attr = g_list_remove(tag->attr, tag->attr->data); + } + g_free(tag); +} + +static gint xml_get_parenthesis(XMLFile *file, gchar *buf, gint len) +{ + gchar *start; + gchar *end; + + buf[0] = '\0'; + + while ((start = strchr(file->bufp, '<')) == NULL) + if (xml_read_line(file) < 0) return -1; + + start++; + file->bufp = start; + + while ((end = strchr(file->bufp, '>')) == NULL) + if (xml_read_line(file) < 0) return -1; + + strncpy2(buf, file->bufp, MIN(end - file->bufp + 1, len)); + g_strstrip(buf); + file->bufp = end + 1; + xml_truncate_buf(file); + + return 0; +} diff --git a/src/xml.h b/src/xml.h new file mode 100644 index 000000000..c88791340 --- /dev/null +++ b/src/xml.h @@ -0,0 +1,94 @@ +/* + * Sylpheed -- a GTK+ based, lightweight, and fast e-mail client + * Copyright (C) 1999,2000 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 + * 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. + */ + +#ifndef __XML_H__ +#define __XML_H__ + +#include <glib.h> +#include <stdio.h> + +#define XMLBUFSIZE 8192 + +typedef struct _XMLAttr XMLAttr; +typedef struct _XMLTag XMLTag; +typedef struct _XMLNode XMLNode; +typedef struct _XMLFile XMLFile; + +struct _XMLAttr +{ + gchar *name; + gchar *value; +}; + +struct _XMLTag +{ + gchar *tag; + GList *attr; +}; + +struct _XMLNode +{ + XMLTag *tag; + gchar *element; +}; + +struct _XMLFile +{ + FILE *fp; + + GString *buf; + gchar *bufp; + + gchar *dtd; + GList *tag_stack; + guint level; + + gboolean is_empty_element; +}; + +XMLFile *xml_open_file (const gchar *path); +void xml_close_file (XMLFile *file); +GNode *xml_parse_file (const gchar *path); + +gint xml_get_dtd (XMLFile *file); +gint xml_parse_next_tag (XMLFile *file); +void xml_push_tag (XMLFile *file, + XMLTag *tag); +void xml_pop_tag (XMLFile *file); + +XMLTag *xml_get_current_tag (XMLFile *file); +GList *xml_get_current_tag_attr(XMLFile *file); +gchar *xml_get_element (XMLFile *file); + +gint xml_read_line (XMLFile *file); +void xml_truncate_buf (XMLFile *file); +gboolean xml_compare_tag (XMLFile *file, + const gchar *name); + +XMLTag *xml_copy_tag (XMLTag *tag); +XMLAttr *xml_copy_attr (XMLAttr *attr); + +gint xml_unescape_str (gchar *str); +gint xml_file_put_escape_str (FILE *fp, + const gchar *str); + +void xml_free_node (XMLNode *node); +void xml_free_tree (GNode *node); + +#endif /* __XML_H__ */ diff --git a/stamp-h.in b/stamp-h.in new file mode 100644 index 000000000..9788f7023 --- /dev/null +++ b/stamp-h.in @@ -0,0 +1 @@ +timestamp diff --git a/sylpheed.spec.in b/sylpheed.spec.in new file mode 100644 index 000000000..00c551adb --- /dev/null +++ b/sylpheed.spec.in @@ -0,0 +1,264 @@ +%define ver @VERSION@ +%define rel 1 +%define prefix /usr + +Summary: a GTK+ based, lightweight, and fast e-mail client +Name: sylpheed +Version: %{ver} +Release: %{rel} +Source: http://sylpheed.good-day.net/sylpheed/%{name}-%{ver}.tar.gz +Copyright: GPL +URL: http://sylpheed.good-day.net/ +Requires: gtk+ >= 1.2.6 +Group: Applications/Internet +Packager: Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +Buildroot: /var/tmp/%{name}-root + +%changelog +* Tue Jan 9 2001 Yoichi Imai <yoichi@silver-forest.com> +- edited for spec.in + +* Tue Jan 2 2001 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.51 + +* Mon Jan 1 2001 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.50 + +* Mon Dec 18 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.9 + +* Thu Dec 7 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.8 + +* Fri Dec 1 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.7, and updated %description + +* Mon Nov 27 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.6 + +* Wed Nov 22 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.5 + +* Tue Nov 7 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.4 + +* Wed Nov 1 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.3 + +* Thu Oct 14 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.2 + +* Thu Sep 28 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.1, and modified %files + +* Wed Sep 27 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.4.0, and modified %description + +* Tue Sep 26 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.99, and modified %files + +* Sat Sep 16 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.29 + +* Tue Aug 29 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.28 + +* Fri Aug 25 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.27 + +* Sat Aug 19 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.26, and modified URL + +* Thu Aug 10 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.25 + +* Fri Aug 4 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.24 + +* Sat Jul 24 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.23 + +* Sat Jul 20 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.22 + +* Sun Jul 4 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.21, and modified Summary + +* Thu Jun 29 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.20 + +* Mon Jun 26 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.19 + +* Tue Jun 17 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.18 + +* Tue Jun 15 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.17 + +* Sun Jun 11 2000 Hiroyuki Yamamoto <hiro-y@kcn.ne.jp> +- updated to 0.3.15 and modified description and doc + +* Sun Jun 4 2000 Yoichi Imai <yoichi@silver-forest.com> +- some change + +* Sun Jun 4 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.13 + +* Sat Jun 3 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.12 + +* Fri Jun 2 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.11 + +* Sat May 20 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.10 + +* Sat May 20 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.9 + +* Sun May 14 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.8 + +* Thu May 11 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.7a + +* Thu May 4 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.6a + +* Sun Apr 30 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.5 + +* Sun Apr 30 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.4 + +* Sat Apr 29 2000 Yoichi Imai <yoichi@silver-forest.com> +- gnome-menu and requires header change + +* Mon Apr 24 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.3 + +* Sat Apr 15 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.2 + +* Tue Apr 14 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.3.1 + +* Tue Mar 14 2000 Yoichi Imai <yoichi@silver-forest.com> +- update to 0.2.9 + +* Tue Mar 14 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.7 + +* Thu Feb 24 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.4 + +* Tue Feb 22 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.3 + +* Sun Feb 20 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.2 + +* Sat Feb 19 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.1 + +* Sat Feb 12 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.0pre8 + +* Sat Feb 12 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.0pre7 + +* Wed Feb 5 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.0pre3 + +* Wed Feb 5 2000 Yoichi Imai <yoichi@silver-forest.com> +- append "TODO.jp" + +* Wed Feb 5 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.2.0pre1 + +* Wed Feb 4 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.23 + +* Wed Feb 2 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.21 + +* Tue Feb 1 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.20 + +* Tue Jan 25 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.19 + +* Sun Jan 23 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.17 + +* Sun Jan 16 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.15 + +* Sat Jan 15 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.14 + +* Fri Jan 14 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.13 + +* Thu Jan 13 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.12 + +* Wed Jan 12 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.11 + +* Tue Jan 11 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.10 + +* Mon Jan 10 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.8 + +* Sat Jan 8 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.7 + +* Fri Jan 7 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.6 + +* Thu Jan 6 2000 Yoichi Imai <yoichi@silver-forest.com> +- update for 0.1.5 + +* Sat Jan 1 2000 Yoichi Imai <yoichi@silver-forest.com> +- first release for version 0.1.0 + +%description +Sylpheed is an e-mail client (and news reader) based on GTK+, running on +X Window System, and aiming for + * Quick response + * Graceful, and sophisticated interface + * Easy configuration, intuitive operation + * Abundant features +The appearance and interface are similar to some popular e-mail clients for +Windows, such as Outlook Express, Becky!, and Datula. The interface is also +designed to emulate the mailers on Emacsen, and almost all commands are +accessible with the keyboard. + +The messages are managed by MH format, and you'll be able to use it together +with another mailer based on MH format (like Mew). You can also utilize +fetchmail or/and procmail, and external programs on receiving (like inc or +imget). + +%prep +rm -rf $RPM_BUILD_ROOT + +%setup +%build +CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} +make + +%install +make prefix=${RPM_BUILD_ROOT}%{prefix} install + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%doc COPYING ChangeLog ChangeLog.jp README README.jp INSTALL INSTALL.jp TODO.jp +%{prefix}/bin/sylpheed +%{prefix}/share/locale/*/LC_MESSAGES/sylpheed.mo +%{prefix}/share/sylpheed/manual/*/* -- 2.25.1